pax_global_header00006660000000000000000000000064142455040300014507gustar00rootroot0000000000000052 comment=af0ac3e4b9bd5fff55337aee32bf37f6116c7b4f http-party-http-server-af0ac3e/000077500000000000000000000000001424550403000166505ustar00rootroot00000000000000http-party-http-server-af0ac3e/.eslintrc.json000066400000000000000000000003521424550403000214440ustar00rootroot00000000000000{ "extends": "eslint-config-populist", "rules": { "strict": "warn", "indent": ["warn", 2], "valid-jsdoc": "warn", "no-undefined": "warn", "comma-dangle": "warn", "callback-return": ["warn", ["next"]] } } http-party-http-server-af0ac3e/.github/000077500000000000000000000000001424550403000202105ustar00rootroot00000000000000http-party-http-server-af0ac3e/.github/CONTRIBUTING.md000066400000000000000000000103741424550403000224460ustar00rootroot00000000000000# Contributing to http-server > Please read these guidelines before submitting an issue, filing a feature request, or contributing code. ## :bug: I Found a Bug Sorry! It happens to the best of us. If you've found a bug in http-server, **please [search](https://github.com/http-party/http-server/issues/) to see if it's already been reported**. Otherwise, create a [new issue](https://github.com/http-party/http-server/issues/new). If you can fix the bug yourself, feel free to create a [pull request](#propose-a-change) thereafter. Please include _as much detail as possible_ to help us reproduce and diagnose the bug. Most importantly: - Make use of the issue template! - Let us know _how_ you're running http-server (options, flags, environment, etc.) - Include your test code or file(s). If large, please provide a link to a repository or [gist](https://gist.github.com). - Please show code in JavaScript only (any version) If we need more information from you, we'll let you know. If you don't within a reasonable time frame (TBD), your issue will be automatically tagged as stale and eventually closed for inactivity. ## :exclamation: Propose a Change Before you get your hands dirty, please [search](https://github.com/http-party/http-server/issues/) for a related issue, or [create a new one](https://github.com/http-party/http-server/issues/new). If you wish to contribute a new feature, this is doubly important! Let's discuss your proposed changes first; we don't want you to waste time implementing a change that is at odds with the project's direction. That said, we'll happily consider any contribution, no matter how great or small. ### :shoe: Contributing Code: Step-by-Step Follow these steps to get going. 1. [Install the latest version of Node.js](https://nodejs.org/en/download). - If you're new to installing Node, a tool like [nvm](https://github.com/creationix/nvm#install-script) can help you manage multiple version installations. 1. Follow [Github's documentation](https://help.github.com/articles/fork-a-repo/) on setting up Git, forking and cloning. 1. Create a new branch in your fork, giving it a descriptive name 1. Execute `npm install` to install the prod and dev dependencies - Do not use `yarn install` for development, as it may not get the same package versions as other developers. 1. Make your changes and add them via `git add`. - **Tests are required** for any non-trivial code change. If you're having trouble making tests, go ahead and open the pull request and we can help - Keep your PR focused. Don't fix multiple things at once, and don't upgrade dependencies unless necessary. 1. Before committing, run `npm test` - Tests will also run on your PR, but running them locally will let you catch problems ahead-of-time. 1. Commit your changes. - See [How to Write a Git Commit Message](https://chris.beams.io/posts/git-commit/). - **Please do not use "Conventional Commits" style** 1. Push your changes to your fork. 1. Now on [http-party/http-server](https://github.com/http-party/http-server), you should see a notification about your recent changes in your fork's branch, with a green button to create a pull request. Click the button. 1. Describe your changes in detail here, following the template. Once you're satisfied, submit the form. 1. Be patient while your PR is reviewed. This can take a while. We may request changes, but don't be afraid to question them. 1. Your PR might become conflicted with the code in `master`. If this is the case, you will need to [update your PR](#up-to-date) and resolve your conflicts. 1. You don't need to make a new PR to any needed changes. Instead, commit on top of your changes, and push these to your fork's branch. The PR will be updated, and CI will re-run. - **Please do not rebase and force-push**, it ruins the git history ## :angel: I Just Want To Help _Excellent._ Here's how: - **Handy with JavaScript?** Please check out the issues labeled [`help-wanted`](https://github.com/http-party/http-server/issues?q=is%3Aopen+is%3Aissue+label%3A%22help-wanted%22) or [`good first issue`](https://github.com/http-party/http-server/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Agood+first+issue). - **Wait--you write unit tests for _fun_?** A PR which increases coverage is unlikely to ever be turned down. http-party-http-server-af0ac3e/.github/FUNDING.yml000066400000000000000000000000211424550403000220160ustar00rootroot00000000000000github: thornjad http-party-http-server-af0ac3e/.github/ISSUE_TEMPLATE/000077500000000000000000000000001424550403000223735ustar00rootroot00000000000000http-party-http-server-af0ac3e/.github/ISSUE_TEMPLATE/bug-report.md000066400000000000000000000010271424550403000250030ustar00rootroot00000000000000--- name: Bug report about: Create a report to help us improve --- #### Environment Versions 1. OS Type 1. Node version: `$ node --version` 1. http-server version: `$ http-server --version` #### Steps to reproduce 1. ... 2. ... 3. ... #### Expected result ... #### Actual result ... #### Other information http-party-http-server-af0ac3e/.github/ISSUE_TEMPLATE/feature-request.md000066400000000000000000000013401424550403000260340ustar00rootroot00000000000000--- name: Feature request about: Suggest an idea for this project --- #### What's the problem this feature will solve? #### Describe the solution you'd like #### Alternative Solutions #### Additional context http-party-http-server-af0ac3e/.github/PULL_REQUEST_TEMPLATE.md000066400000000000000000000014041424550403000240100ustar00rootroot00000000000000 ##### Relevant issues ##### Contributor checklist - [ ] Provide tests for the changes (unless documentation-only) - [ ] Documented any new features, CLI switches, etc. (if applicable) - [ ] Server `--help` output - [ ] README.md - [ ] doc/http-server.1 (use the same format as other entries) - [ ] The pull request is being made against the `master` branch ##### Maintainer checklist - [ ] Assign a version triage tag - [ ] Approve tests if applicable http-party-http-server-af0ac3e/.github/release-drafter.yml000066400000000000000000000013361424550403000240030ustar00rootroot00000000000000name-template: 'v$RESOLVED_VERSION' tag-template: 'v$RESOLVED_VERSION' change-template: '- $TITLE @$AUTHOR (#$NUMBER)' change-title-escapes: '\<*_&' categories: - title: 'Breaking changes' labels: - 'major version' - title: 'Features and enhancements' labels: - 'feature' - 'enhancement' - title: 'Bug Fixes' labels: - 'fix' - 'bug' - title: 'Other changes' labels: - 'dependencies' - 'documentation' exclude-labels: - "skip-changelog" - "maintenance" - "trivial" version-resolver: major: labels: - 'major version' minor: labels: - 'minor version' patch: labels: - 'patch version' default: patch template: | $CHANGES http-party-http-server-af0ac3e/.github/workflows/000077500000000000000000000000001424550403000222455ustar00rootroot00000000000000http-party-http-server-af0ac3e/.github/workflows/node.js.yml000066400000000000000000000015411424550403000243310ustar00rootroot00000000000000# This workflow will do a clean install of node dependencies, cache/restore them, build the source code and run tests across different versions of node # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions name: Node.js CI on: push: branches: [ master ] pull_request: branches: [ master ] jobs: build: name: Test runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: node-version: [12.x, 14.x, 16.x, 17.x] os: [ubuntu-latest, macOS-latest, windows-latest] steps: - uses: actions/checkout@v2 - name: Use Node.js ${{ matrix.node-version }} on ${{ matrix.os }} uses: actions/setup-node@v2 with: node-version: ${{ matrix.node-version }} cache: 'npm' - run: npx npm@7 ci - run: npm test http-party-http-server-af0ac3e/.github/workflows/release-drafter.yml000066400000000000000000000010001424550403000260240ustar00rootroot00000000000000name: release-drafter on: push: # branches to consider in the event; optional, defaults to all branches: - master jobs: update_release_draft: permissions: contents: write pull-requests: read if: github.repository == 'http-party/http-server' runs-on: ubuntu-latest steps: # Drafts your next release notes as pull requests are merged into master - uses: release-drafter/release-drafter@v5 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} http-party-http-server-af0ac3e/.github/workflows/stale.yml000066400000000000000000000013661424550403000241060ustar00rootroot00000000000000name: Mark stale issues and pull requests on: schedule: - cron: '25 12 * * *' jobs: stale: runs-on: ubuntu-latest permissions: issues: write pull-requests: write steps: - uses: actions/stale@v4.0.0 with: repo-token: ${{ secrets.GITHUB_TOKEN }} days-before-stale: 360 days-before-issue-stale: 180 days-before-pr-stale: 360 stale-issue-message: 'This issue has been inactive for 180 days' stale-pr-message: 'This pull request has been inactive for 360 days' stale-issue-label: 'stale' stale-pr-label: 'stale' exempt-issue-labels: 'no-stale' exempt-pr-labels: 'no-stale' exempt-all-milestones: true days-before-close: -1 http-party-http-server-af0ac3e/.gitignore000066400000000000000000000000761424550403000206430ustar00rootroot00000000000000node_modules/ npm-debug.log* .nyc_*/ .dir-locals.el .DS_Store http-party-http-server-af0ac3e/CODE_OF_CONDUCT.md000066400000000000000000000121561424550403000214540ustar00rootroot00000000000000# Contributor Covenant Code of Conduct ## Our Pledge We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. ## Our Standards Examples of behavior that contributes to a positive environment for our community include: * Demonstrating empathy and kindness toward other people * Being respectful of differing opinions, viewpoints, and experiences * Giving and gracefully accepting constructive feedback * Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience * Focusing on what is best not just for us as individuals, but for the overall community Examples of unacceptable behavior include: * The use of sexualized language or imagery, and sexual attention or advances of any kind * Trolling, insulting or derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or email address, without their explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Enforcement Responsibilities Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. ## Scope This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at jademichael @ jmthornton.net. All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the reporter of any incident. ## Enforcement Guidelines Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: ### 1. Correction **Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. **Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. ### 2. Warning **Community Impact**: A violation through a single incident or series of actions. **Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. ### 3. Temporary Ban **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. **Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. ### 4. Permanent Ban **Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. **Consequence**: A permanent ban from any sort of public interaction within the community. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0, available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity). [homepage]: https://www.contributor-covenant.org For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations. http-party-http-server-af0ac3e/LICENSE000066400000000000000000000021441424550403000176560ustar00rootroot00000000000000Copyright (c) 2011-2022 Charlie Robbins, Marak Squires, Jade Michael Thornton 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. http-party-http-server-af0ac3e/README.md000066400000000000000000000147221424550403000201350ustar00rootroot00000000000000[![GitHub Workflow Status (master)](https://img.shields.io/github/workflow/status/http-party/http-server/Node.js%20CI/master?style=flat-square)](https://github.com/http-party/http-server/actions) [![npm](https://img.shields.io/npm/v/http-server.svg?style=flat-square)](https://www.npmjs.com/package/http-server) [![homebrew](https://img.shields.io/homebrew/v/http-server?style=flat-square)](https://formulae.brew.sh/formula/http-server) [![npm downloads](https://img.shields.io/npm/dm/http-server?color=blue&label=npm%20downloads&style=flat-square)](https://www.npmjs.com/package/http-server) [![license](https://img.shields.io/github/license/http-party/http-server.svg?style=flat-square)](https://github.com/http-party/http-server) # http-server: a simple static HTTP server `http-server` is a simple, zero-configuration command-line static 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. ![Example of running http-server](https://github.com/http-party/http-server/raw/master/screenshots/public.png) ## Installation: #### Running on-demand: Using `npx` you can run the script without installing it first: npx http-server [path] [options] #### Globally via `npm` npm install --global http-server This will install `http-server` globally so that it may be run from the command line anywhere. #### Globally via Homebrew brew install http-server #### As a dependency in your `npm` package: npm install http-server ## Usage: http-server [path] [options] `[path]` defaults to `./public` if the folder exists, and `./` otherwise. *Now you can visit http://localhost:8080 to view your server* **Note:** Caching is on by default. Add `-c-1` as an option to disable caching. ## Available Options: | Command | Description | Defaults | | ------------- |-------------|-------------| |`-p` or `--port` |Port to use. Use `-p 0` to look for an open port, starting at 8080. It will also read from `process.env.PORT`. |8080 | |`-a` |Address to use |0.0.0.0| |`-d` |Show directory listings |`true` | |`-i` | Display autoIndex | `true` | |`-g` or `--gzip` |When enabled it will serve `./public/some-file.js.gz` in place of `./public/some-file.js` when a gzipped version of the file exists and the request accepts gzip encoding. If brotli is also enabled, it will try to serve brotli first.|`false`| |`-b` or `--brotli`|When enabled it will serve `./public/some-file.js.br` in place of `./public/some-file.js` when a brotli compressed version of the file exists and the request accepts `br` encoding. If gzip is also enabled, it will try to serve brotli first. |`false`| |`-e` or `--ext` |Default file extension if none supplied |`html` | |`-s` or `--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. Optionally provide a URL path to open. e.g.: -o /other/dir/ | | |`-c` |Set cache time (in seconds) for cache-control max-age header, e.g. `-c10` for 10 seconds. To disable caching, use `-c-1`.|`3600` | |`-U` or `--utc` |Use UTC time format in log messages.| | |`--log-ip` |Enable logging of the client's IP address |`false` | |`-P` or `--proxy` |Proxies all requests which can't be resolved locally to the given url. e.g.: -P http://someurl.com | | |`--proxy-options` |Pass proxy [options](https://github.com/http-party/node-http-proxy#options) using nested dotted objects. e.g.: --proxy-options.secure false | |`--username` |Username for basic authentication | | |`--password` |Password for basic authentication | | |`-S`, `--tls` or `--ssl` |Enable secure request serving with TLS/SSL (HTTPS)|`false`| |`-C` or `--cert` |Path to ssl cert file |`cert.pem` | |`-K` or `--key` |Path to ssl key file |`key.pem` | |`-r` or `--robots` | Automatically provide a /robots.txt (The content of which defaults to `User-agent: *\nDisallow: /`) | `false` | |`--no-dotfiles` |Do not show dotfiles| | |`--mimetypes` |Path to a .types file for custom mimetype definition| | |`-h` or `--help` |Print this list and exit. | | |`-v` or `--version`|Print the version and exit. | | ## Magic Files - `index.html` will be served as the default file to any directory requests. - `404.html` will be served if a file is not found. This can be used for Single-Page App (SPA) hosting to serve the entry page. ## Catch-all redirect To implement a catch-all redirect, use the index page itself as the proxy with: ``` http-server --proxy http://localhost:8080? ``` Note the `?` at the end of the proxy URL. Thanks to [@houston3](https://github.com/houston3) for this clever hack! ## TLS/SSL First, you need to make sure that [openssl](https://github.com/openssl/openssl) is installed correctly, and you have `key.pem` and `cert.pem` files. You can generate them using this command: ``` sh openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem ``` You will be prompted with a few questions after entering the command. Use `127.0.0.1` as value for `Common name` if you want to be able to install the certificate in your OS's root certificate store or browser so that it is trusted. This generates a cert-key pair and it will be valid for 3650 days (about 10 years). Then you need to run the server with `-S` for enabling SSL and `-C` for your certificate file. ``` sh http-server -S -C cert.pem ``` If you wish to use a passphrase with your private key you can include one in the openssl command via the -passout parameter (using password of foobar) e.g. `openssl req -newkey rsa:2048 -passout pass:foobar -keyout key.pem -x509 -days 365 -out cert.pem` For security reasons, the passphrase will only be read from the `NODE_HTTP_SERVER_SSL_PASSPHRASE` environment variable. This is what should be output if successful: ``` sh Starting up http-server, serving ./ through https http-server settings: CORS: disabled Cache: 3600 seconds Connection Timeout: 120 seconds Directory Listings: visible AutoIndex: visible Serve GZIP Files: false Serve Brotli Files: false Default File Extension: none Available on: https://127.0.0.1:8080 https://192.168.1.101:8080 https://192.168.1.104:8080 Hit CTRL-C to stop the server ``` # Development Checkout this repository locally, then: ```sh $ npm i $ npm start ``` *Now you can visit http://localhost:8080 to view your server* You should see the turtle image in the screenshot above hosted at that URL. See the `./public` folder for demo content. http-party-http-server-af0ac3e/SECURITY.md000066400000000000000000000006321424550403000204420ustar00rootroot00000000000000# Security Policy ## Supported Versions | Version | Supported | |---------|------------------------| | 14.x | ✔️ Yes | | 13.x | 🔐 Security updates until April 2022 | | <= 0.13.x | ❌ No | ## Reporting a Vulnerability In general, vulnerabilities can be reported as an issue, pull requests are very welcome. If you'd like to report privately, please email jademichael+http-server@jmthornton.net. http-party-http-server-af0ac3e/bin/000077500000000000000000000000001424550403000174205ustar00rootroot00000000000000http-party-http-server-af0ac3e/bin/http-server000077500000000000000000000222411424550403000216320ustar00rootroot00000000000000#!/usr/bin/env node 'use strict'; var chalk = require('chalk'), os = require('os'), httpServer = require('../lib/http-server'), portfinder = require('portfinder'), opener = require('opener'), fs = require('fs'), url = require('url'); var argv = require('minimist')(process.argv.slice(2), { alias: { tls: 'ssl' } }); var ifaces = os.networkInterfaces(); process.title = 'http-server'; if (argv.h || argv.help) { console.log([ 'usage: http-server [path] [options]', '', 'options:', ' -p --port Port to use. If 0, look for open port. [8080]', ' -a Address to use [0.0.0.0]', ' -d Show directory listings [true]', ' -i Display autoIndex [true]', ' -g --gzip Serve gzip files when possible [false]', ' -b --brotli Serve brotli files when possible [false]', ' If both brotli and gzip are enabled, brotli takes precedence', ' -e --ext Default file extension if none supplied [none]', ' -s --silent Suppress log messages from output', ' --cors[=headers] Enable CORS via the "Access-Control-Allow-Origin" header', ' Optionally provide CORS headers list separated by commas', ' -o [path] Open browser window after starting the server.', ' Optionally provide a URL path to open the browser window to.', ' -c Cache time (max-age) in seconds [3600], e.g. -c10 for 10 seconds.', ' To disable caching, use -c-1.', ' -t Connections timeout in seconds [120], e.g. -t60 for 1 minute.', ' To disable timeout, use -t0', ' -U --utc Use UTC time format in log messages.', ' --log-ip Enable logging of the client\'s IP address', '', ' -P --proxy Fallback proxy if the request cannot be resolved. e.g.: http://someurl.com', ' --proxy-options Pass options to proxy using nested dotted objects. e.g.: --proxy-options.secure false', '', ' --username Username for basic authentication [none]', ' Can also be specified with the env variable NODE_HTTP_SERVER_USERNAME', ' --password Password for basic authentication [none]', ' Can also be specified with the env variable NODE_HTTP_SERVER_PASSWORD', '', ' -S --tls --ssl Enable secure request serving with TLS/SSL (HTTPS)', ' -C --cert Path to TLS cert file (default: cert.pem)', ' -K --key Path to TLS key file (default: key.pem)', '', ' -r --robots Respond to /robots.txt [User-agent: *\\nDisallow: /]', ' --no-dotfiles Do not show dotfiles', ' --mimetypes Path to a .types file for custom mimetype definition', ' -h --help Print this list and exit.', ' -v --version Print the version and exit.' ].join('\n')); process.exit(); } var port = argv.p || argv.port || parseInt(process.env.PORT, 10), host = argv.a || '0.0.0.0', tls = argv.S || argv.tls, sslPassphrase = process.env.NODE_HTTP_SERVER_SSL_PASSPHRASE, proxy = argv.P || argv.proxy, proxyOptions = argv['proxy-options'], utc = argv.U || argv.utc, version = argv.v || argv.version, logger; var proxyOptionsBooleanProps = [ 'ws', 'xfwd', 'secure', 'toProxy', 'prependPath', 'ignorePath', 'changeOrigin', 'preserveHeaderKeyCase', 'followRedirects', 'selfHandleResponse' ]; if (proxyOptions) { Object.keys(proxyOptions).forEach(function (key) { if (proxyOptionsBooleanProps.indexOf(key) > -1) { proxyOptions[key] = proxyOptions[key].toLowerCase() === 'true'; } }); } if (!argv.s && !argv.silent) { logger = { info: console.log, request: function (req, res, error) { var date = utc ? new Date().toUTCString() : new Date(); var ip = argv['log-ip'] ? req.headers['x-forwarded-for'] || '' + req.connection.remoteAddress : ''; if (error) { logger.info( '[%s] %s "%s %s" Error (%s): "%s"', date, ip, chalk.red(req.method), chalk.red(req.url), chalk.red(error.status.toString()), chalk.red(error.message) ); } else { logger.info( '[%s] %s "%s %s" "%s"', date, ip, chalk.cyan(req.method), chalk.cyan(req.url), req.headers['user-agent'] ); } } }; } else if (chalk) { logger = { info: function () {}, request: function () {} }; } if (version) { logger.info('v' + require('../package.json').version); process.exit(); } 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, timeout: argv.t, showDir: argv.d, autoIndex: argv.i, gzip: argv.g || argv.gzip, brotli: argv.b || argv.brotli, robots: argv.r || argv.robots, ext: argv.e || argv.ext, logFn: logger.request, proxy: proxy, proxyOptions: proxyOptions, showDotfiles: argv.dotfiles, mimetypes: argv.mimetypes, username: argv.username || process.env.NODE_HTTP_SERVER_USERNAME, password: argv.password || process.env.NODE_HTTP_SERVER_PASSWORD }; if (argv.cors) { options.cors = true; if (typeof argv.cors === 'string') { options.corsHeaders = argv.cors; } } if (proxy) { try { new url.URL(proxy) } catch (err) { logger.info(chalk.red('Error: Invalid proxy url')); process.exit(1); } } if (tls) { options.https = { cert: argv.C || argv.cert || 'cert.pem', key: argv.K || argv.key || 'key.pem', passphrase: sslPassphrase, }; try { fs.lstatSync(options.https.cert); } catch (err) { logger.info(chalk.red('Error: Could not find certificate ' + options.https.cert)); process.exit(1); } try { fs.lstatSync(options.https.key); } catch (err) { logger.info(chalk.red('Error: Could not find private key ' + options.https.key)); process.exit(1); } } var server = httpServer.createServer(options); server.listen(port, host, function () { var protocol = tls ? 'https://' : 'http://'; logger.info([ chalk.yellow('Starting up http-server, serving '), chalk.cyan(server.root), tls ? (chalk.yellow(' through') + chalk.cyan(' https')) : '' ].join('')); logger.info([chalk.yellow('\nhttp-server version: '), chalk.cyan(require('../package.json').version)].join('')); logger.info([ chalk.yellow('\nhttp-server settings: '), ([chalk.yellow('CORS: '), argv.cors ? chalk.cyan(argv.cors) : chalk.red('disabled')].join('')), ([chalk.yellow('Cache: '), argv.c ? (argv.c === '-1' ? chalk.red('disabled') : chalk.cyan(argv.c + ' seconds')) : chalk.cyan('3600 seconds')].join('')), ([chalk.yellow('Connection Timeout: '), argv.t === '0' ? chalk.red('disabled') : (argv.t ? chalk.cyan(argv.t + ' seconds') : chalk.cyan('120 seconds'))].join('')), ([chalk.yellow('Directory Listings: '), argv.d ? chalk.red('not visible') : chalk.cyan('visible')].join('')), ([chalk.yellow('AutoIndex: '), argv.i ? chalk.red('not visible') : chalk.cyan('visible')].join('')), ([chalk.yellow('Serve GZIP Files: '), argv.g || argv.gzip ? chalk.cyan('true') : chalk.red('false')].join('')), ([chalk.yellow('Serve Brotli Files: '), argv.b || argv.brotli ? chalk.cyan('true') : chalk.red('false')].join('')), ([chalk.yellow('Default File Extension: '), argv.e ? chalk.cyan(argv.e) : (argv.ext ? chalk.cyan(argv.ext) : chalk.red('none'))].join('')) ].join('\n')); logger.info(chalk.yellow('\nAvailable on:')); if (argv.a && host !== '0.0.0.0') { logger.info(` ${protocol}${host}:${chalk.green(port.toString())}`); } else { Object.keys(ifaces).forEach(function (dev) { ifaces[dev].forEach(function (details) { if (details.family === 'IPv4') { logger.info((' ' + protocol + details.address + ':' + chalk.green(port.toString()))); } }); }); } if (typeof proxy === 'string') { if (proxyOptions) { logger.info('Unhandled requests will be served from: ' + proxy + '. Options: ' + JSON.stringify(proxyOptions)); } else { logger.info('Unhandled requests will be served from: ' + proxy); } } logger.info('Hit CTRL-C to stop the server'); if (argv.o) { const openHost = host === '0.0.0.0' ? '127.0.0.1' : host; let openUrl = `${protocol}${openHost}:${port}`; if (typeof argv.o === 'string') { openUrl += argv.o[0] === '/' ? argv.o : '/' + argv.o; } logger.info('Open: ' + openUrl); opener(openUrl); } // Spacing before logs if (!argv.s) logger.info(); }); } 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(chalk.red('http-server stopped.')); process.exit(); }); process.on('SIGTERM', function () { logger.info(chalk.red('http-server stopped.')); process.exit(); }); http-party-http-server-af0ac3e/doc/000077500000000000000000000000001424550403000174155ustar00rootroot00000000000000http-party-http-server-af0ac3e/doc/http-server.1000066400000000000000000000101541424550403000217630ustar00rootroot00000000000000.TH http-server 1 "April 2020" GNU "http-server man page" .SH NAME http-server \- a simple zero-configuration command-line http server .SH SYNOPSIS .B http-server [\fIPATH\fR] [\fIOPTIONS\fR] .SH DESCRIPTION \fBhttp-server\fR 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. .SH OPTIONS .TP .BI [\fIPATH\fR] The directory to serve. Defaults to ./public if it exists, and ./ otherwise. .TP .BI \-p ", " \-\-port " " \fIPORT\fR Port to use. If 0, look for the first available port, starting at 8080. Default is 8080. .TP .BI \-a " " \fIADDRESS\fR Address to use. Default is 0.0.0.0. .TP .BI \-d Show directory listings. Default is true. .TP .BI \-i Display autoIndex. Default is true. .TP .BI \-g ", " \-\-gzip Serve gzip files when possible. Default is false. .TP .BI \-b ", " \-\-brotli Serve brotli files when possible. If both brotli and gzip are enabled, brotli takes precedence. Default is false. .TP .BI \-e ", " \-\-ext " " \fIEXTENSION\fR Default file extension is none is provided. .TP .BI \-s ", " \-\-silent Suppress log messages from output. .TP .BI \-\-cors " " [\fIHEADERS\fR] Enable CORS via the "Access-Control-Allow-Origin" header. Optionally provide CORS headers list separated by commas. .TP .BI \-o " " [\fIPATH\fR] Open default browser window after starting the server. Optionally provide a URL path to open the browser window to. .TP .BI \-c " " \fITIME\fR Cache time (max-age) in seconds. To disable caching, use \-c \-1. Default is 3600. .TP .BI \-U ", " \-\-utc Use UTC time format in log messages. .TP .BI \-\-log\-ip Enable logging of the client IP address. .TP .BI \-P ", " \-\-proxy Fallback proxy if the request cannot be resolved. .TP .BI \-\-proxy\-options Pass proxy options using nested dotted objects. .TP .BI \-\-username " " \fIUSERNAME\fR Username for basic authentication. Can also be specified with the environment variable NODE_HTTP_SERVER_USERNAME. Defaults to none. .TP .BI \-\-password " " \fIPASSWORD\fR Password for basic authentication. Can also be specified with the environment variable NODE_HTTP_SERVER_PASSWORD. Defaults to none. .TP .BI \-S ", " \-\-tls ", " \-\-ssl Enable https. .TP .BI \-C ", " \-\-cert " " [\fIFILE\fR] Path to SSL certificate file. If not specified, uses cert.pem. .TP .BI \-K ", " \-\-key " " [\fIFILE\fR] Path to SSL key file. If not specified, uses key.pem. Passphrase will be read from NODE_HTTP_SERVER_SSL_PASSPHRASE (if set) .TP .BI \-r ", " \-\-robots " " [\fIUSER\-AGENT\fR] Respond to /robots.txt request. If not specified, uses "User-agent: *\\nDisallow: /]" .TP .BI \-\-no\-dotfiles Do not show dotfiles. .TP .BI \-h ", " \-\-help Print usage and exit. .TP .BI \-v ", " \-\-version Print version and exit. .SH FILES .B index.html will be served as the default file to any directory requests. .B 404.html will be served if a file is not found. This can be used for SPA hosting to serve the entry page. .SH COPYING Copyright (c) 2011-2022 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. .SH VERSION Version 0.12.2 http-party-http-server-af0ac3e/lib/000077500000000000000000000000001424550403000174165ustar00rootroot00000000000000http-party-http-server-af0ac3e/lib/core/000077500000000000000000000000001424550403000203465ustar00rootroot00000000000000http-party-http-server-af0ac3e/lib/core/aliases.json000066400000000000000000000016571424550403000226730ustar00rootroot00000000000000{ "autoIndex": [ "autoIndex", "autoindex" ], "showDir": [ "showDir", "showdir" ], "showDotfiles": ["showDotfiles", "showdotfiles"], "humanReadable": [ "humanReadable", "humanreadable", "human-readable" ], "hidePermissions": ["hidePermissions", "hidepermissions", "hide-permissions"], "si": [ "si", "index" ], "handleError": [ "handleError", "handleerror" ], "cors": [ "cors", "CORS" ], "headers": [ "H", "header", "headers" ], "contentType": [ "contentType", "contenttype", "content-type" ], "mimeType": [ "mimetype", "mimetypes", "mimeType", "mimeTypes", "mime-type", "mime-types", "mime-Type", "mime-Types" ], "weakEtags": [ "weakEtags", "weaketags", "weak-etags" ], "weakCompare": [ "weakcompare", "weakCompare", "weak-compare", "weak-Compare" ], "handleOptionsMethod": [ "handleOptionsMethod", "handleoptionsmethod", "handle-options-method" ] } http-party-http-server-af0ac3e/lib/core/defaults.json000066400000000000000000000005771424550403000230610ustar00rootroot00000000000000{ "autoIndex": true, "showDir": true, "showDotfiles": true, "humanReadable": true, "hidePermissions": false, "si": false, "cache": "max-age=3600", "cors": false, "gzip": true, "brotli": false, "defaultExt": ".html", "handleError": true, "contentType": "application/octet-stream", "weakEtags": true, "weakCompare": true, "handleOptionsMethod": false } http-party-http-server-af0ac3e/lib/core/etag.js000066400000000000000000000003051424550403000216220ustar00rootroot00000000000000'use strict'; module.exports = (stat, weakEtag) => { let etag = `"${[stat.ino, stat.size, stat.mtime.toISOString()].join('-')}"`; if (weakEtag) { etag = `W/${etag}`; } return etag; }; http-party-http-server-af0ac3e/lib/core/index.js000066400000000000000000000341571424550403000220250ustar00rootroot00000000000000#! /usr/bin/env node 'use strict'; const path = require('path'); const fs = require('fs'); const url = require('url'); const { Readable } = require('stream'); const buffer = require('buffer'); const mime = require('mime'); const urlJoin = require('url-join'); const showDir = require('./show-dir'); const version = require('../../package.json').version; const status = require('./status-handlers'); const generateEtag = require('./etag'); const optsParser = require('./opts'); const htmlEncodingSniffer = require('html-encoding-sniffer'); let httpServerCore = null; function decodePathname(pathname) { const pieces = pathname.replace(/\\/g, '/').split('/'); const normalized = path.normalize(pieces.map((rawPiece) => { const piece = decodeURIComponent(rawPiece); if (process.platform === 'win32' && /\\/.test(piece)) { throw new Error('Invalid forward slash character'); } return piece; }).join('/')); return process.platform === 'win32' ? normalized.replace(/\\/g, '/') : normalized; } const nonUrlSafeCharsRgx = /[\x00-\x1F\x20\x7F-\uFFFF]+/g; function ensureUriEncoded(text) { return text return String(text).replace(nonUrlSafeCharsRgx, encodeURIComponent); } // Check to see if we should try to compress a file with gzip. function shouldCompressGzip(req) { const headers = req.headers; return headers && headers['accept-encoding'] && headers['accept-encoding'] .split(',') .some(el => ['*', 'compress', 'gzip', 'deflate'].indexOf(el.trim()) !== -1) ; } function shouldCompressBrotli(req) { const headers = req.headers; return headers && headers['accept-encoding'] && headers['accept-encoding'] .split(',') .some(el => ['*', 'br'].indexOf(el.trim()) !== -1) ; } function hasGzipId12(gzipped, cb) { const stream = fs.createReadStream(gzipped, { start: 0, end: 1 }); let buffer = Buffer.from(''); let hasBeenCalled = false; stream.on('data', (chunk) => { buffer = Buffer.concat([buffer, chunk], 2); }); stream.on('error', (err) => { if (hasBeenCalled) { throw err; } hasBeenCalled = true; cb(err); }); stream.on('close', () => { if (hasBeenCalled) { return; } hasBeenCalled = true; cb(null, buffer[0] === 31 && buffer[1] === 139); }); } module.exports = function createMiddleware(_dir, _options) { let dir; let options; if (typeof _dir === 'string') { dir = _dir; options = _options; } else { options = _dir; dir = options.root; } const root = path.join(path.resolve(dir), '/'); const opts = optsParser(options); const cache = opts.cache; const autoIndex = opts.autoIndex; const baseDir = opts.baseDir; let defaultExt = opts.defaultExt; const handleError = opts.handleError; const headers = opts.headers; const weakEtags = opts.weakEtags; const handleOptionsMethod = opts.handleOptionsMethod; opts.root = dir; if (defaultExt && /^\./.test(defaultExt)) { defaultExt = defaultExt.replace(/^\./, ''); } // Support hashes and .types files in mimeTypes @since 0.8 if (opts.mimeTypes) { try { // You can pass a JSON blob here---useful for CLI use opts.mimeTypes = JSON.parse(opts.mimeTypes); } catch (e) { // swallow parse errors, treat this as a string mimetype input } if (typeof opts.mimeTypes === 'string') { mime.load(opts.mimeTypes); } else if (typeof opts.mimeTypes === 'object') { mime.define(opts.mimeTypes); } } function shouldReturn304(req, serverLastModified, serverEtag) { if (!req || !req.headers) { return false; } const clientModifiedSince = req.headers['if-modified-since']; const clientEtag = req.headers['if-none-match']; let clientModifiedDate; if (!clientModifiedSince && !clientEtag) { // Client did not provide any conditional caching headers return false; } if (clientModifiedSince) { // Catch "illegal access" dates that will crash v8 try { clientModifiedDate = new Date(Date.parse(clientModifiedSince)); } catch (err) { return false; } if (clientModifiedDate.toString() === 'Invalid Date') { return false; } // If the client's copy is older than the server's, don't return 304 if (clientModifiedDate < new Date(serverLastModified)) { return false; } } if (clientEtag) { // Do a strong or weak etag comparison based on setting // https://www.ietf.org/rfc/rfc2616.txt Section 13.3.3 if (opts.weakCompare && clientEtag !== serverEtag && clientEtag !== `W/${serverEtag}` && `W/${clientEtag}` !== serverEtag) { return false; } if (!opts.weakCompare && (clientEtag !== serverEtag || clientEtag.indexOf('W/') === 0)) { return false; } } return true; } return function middleware(req, res, next) { // Figure out the path for the file from the given url const parsed = url.parse(req.url); let pathname = null; let file = null; let gzippedFile = null; let brotliFile = null; try { decodeURIComponent(req.url); // check validity of url pathname = decodePathname(parsed.pathname); } catch (err) { status[400](res, next, { error: err }); return; } file = path.normalize( path.join( root, path.relative(path.join('/', baseDir), pathname) ) ); // determine compressed forms if they were to exist gzippedFile = `${file}.gz`; brotliFile = `${file}.br`; Object.keys(headers).forEach((key) => { res.setHeader(key, headers[key]); }); if (req.method === 'OPTIONS' && handleOptionsMethod) { res.end(); return; } // TODO: This check is broken, which causes the 403 on the // expected 404. if (file.slice(0, root.length) !== root) { status[403](res, next); return; } if (req.method && (req.method !== 'GET' && req.method !== 'HEAD')) { status[405](res, next); return; } function serve(stat) { // Do a MIME lookup, fall back to octet-stream and handle gzip // and brotli special case. const defaultType = opts.contentType || 'application/octet-stream'; let contentType = mime.lookup(file, defaultType); const range = (req.headers && req.headers.range); const lastModified = (new Date(stat.mtime)).toUTCString(); const etag = generateEtag(stat, weakEtags); let cacheControl = cache; let stream = null; if (contentType && isTextFile(contentType)) { if (stat.size < buffer.constants.MAX_LENGTH) { const bytes = fs.readFileSync(file); const sniffedEncoding = htmlEncodingSniffer(bytes, { defaultEncoding: 'UTF-8' }); contentType += `; charset=${sniffedEncoding}`; stream = Readable.from(bytes) } else { // Assume text types are utf8 contentType += '; charset=UTF-8'; } } if (file === gzippedFile) { // is .gz picked up res.setHeader('Content-Encoding', 'gzip'); // strip gz ending and lookup mime type contentType = mime.lookup(path.basename(file, '.gz'), defaultType); } else if (file === brotliFile) { // is .br picked up res.setHeader('Content-Encoding', 'br'); // strip br ending and lookup mime type contentType = mime.lookup(path.basename(file, '.br'), defaultType); } if (typeof cacheControl === 'function') { cacheControl = cache(pathname); } if (typeof cacheControl === 'number') { cacheControl = `max-age=${cacheControl}`; } if (range) { const total = stat.size; const parts = range.trim().replace(/bytes=/, '').split('-'); const partialstart = parts[0]; const partialend = parts[1]; const start = parseInt(partialstart, 10); const end = Math.min( total - 1, partialend ? parseInt(partialend, 10) : total - 1 ); const chunksize = (end - start) + 1; let fstream = null; if (start > end || isNaN(start) || isNaN(end)) { status['416'](res, next); return; } fstream = fs.createReadStream(file, { start, end }); fstream.on('error', (err) => { status['500'](res, next, { error: err }); }); res.on('close', () => { fstream.destroy(); }); res.writeHead(206, { 'Content-Range': `bytes ${start}-${end}/${total}`, 'Accept-Ranges': 'bytes', 'Content-Length': chunksize, 'Content-Type': contentType, 'cache-control': cacheControl, 'last-modified': lastModified, etag, }); fstream.pipe(res); return; } // TODO: Helper for this, with default headers. res.setHeader('cache-control', cacheControl); res.setHeader('last-modified', lastModified); res.setHeader('etag', etag); // Return a 304 if necessary if (shouldReturn304(req, lastModified, etag)) { status[304](res, next); return; } 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') { res.end(); return; } // stream may already have been assigned during encoding sniffing. if (stream === null) { stream = fs.createReadStream(file); } stream.pipe(res); stream.on('error', (err) => { status['500'](res, next, { error: err }); }); stream.on('close', () => { stream.destroy(); }) } function statFile() { try { fs.stat(file, (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 : ''}`, headers: req.headers, }, res, next); } else { // Try to serve default ./404.html const rawUrl = (handleError ? `/${path.join(baseDir, `404.${defaultExt}`)}` : req.url); const encodedUrl = ensureUriEncoded(rawUrl); middleware({ url: encodedUrl, headers: req.headers, statusCode: 404, }, res, next); } } else if (err) { status[500](res, next, { error: err }); } else if (stat.isDirectory()) { if (!autoIndex && !opts.showDir) { status[404](res, next); return; } // 302 to / if necessary if (!pathname.match(/\/$/)) { res.statusCode = 302; const q = parsed.query ? `?${parsed.query}` : ''; res.setHeader( 'location', ensureUriEncoded(`${parsed.pathname}/${q}`) ); res.end(); return; } if (autoIndex) { middleware({ url: urlJoin( encodeURIComponent(pathname), `/index.${defaultExt}` ), headers: req.headers, }, res, (autoIndexError) => { if (autoIndexError) { status[500](res, next, { error: autoIndexError }); return; } if (opts.showDir) { showDir(opts, stat)(req, res); return; } status[403](res, next); }); return; } if (opts.showDir) { showDir(opts, stat)(req, res); } } else { serve(stat); } }); } catch (err) { status[500](res, next, { error: err.message }); } } function isTextFile(mimeType) { return (/^text\/|^application\/(javascript|json)/).test(mimeType); } // serve gzip file if exists and is valid function tryServeWithGzip() { try { fs.stat(gzippedFile, (err, stat) => { if (!err && stat.isFile()) { hasGzipId12(gzippedFile, (gzipErr, isGzip) => { if (!gzipErr && isGzip) { file = gzippedFile; serve(stat); } else { statFile(); } }); } else { statFile(); } }); } catch (err) { status[500](res, next, { error: err.message }); } } // serve brotli file if exists, otherwise try gzip function tryServeWithBrotli(shouldTryGzip) { try { fs.stat(brotliFile, (err, stat) => { if (!err && stat.isFile()) { file = brotliFile; serve(stat); } else if (shouldTryGzip) { tryServeWithGzip(); } else { statFile(); } }); } catch (err) { status[500](res, next, { error: err.message }); } } const shouldTryBrotli = opts.brotli && shouldCompressBrotli(req); const shouldTryGzip = opts.gzip && shouldCompressGzip(req); // always try brotli first, next try gzip, finally serve without compression if (shouldTryBrotli) { tryServeWithBrotli(shouldTryGzip); } else if (shouldTryGzip) { tryServeWithGzip(); } else { statFile(); } }; }; httpServerCore = module.exports; httpServerCore.version = version; httpServerCore.showDir = showDir; http-party-http-server-af0ac3e/lib/core/opts.js000066400000000000000000000110451424550403000216720ustar00rootroot00000000000000'use strict'; // This is so you can have options aliasing and defaults in one place. const defaults = require('./defaults.json'); const aliases = require('./aliases.json'); module.exports = (opts) => { let autoIndex = defaults.autoIndex; let showDir = defaults.showDir; let showDotfiles = defaults.showDotfiles; let humanReadable = defaults.humanReadable; let hidePermissions = defaults.hidePermissions; let si = defaults.si; let cache = defaults.cache; let gzip = defaults.gzip; let brotli = defaults.brotli; let defaultExt = defaults.defaultExt; let handleError = defaults.handleError; const headers = {}; let contentType = defaults.contentType; let mimeTypes; let weakEtags = defaults.weakEtags; let weakCompare = defaults.weakCompare; let handleOptionsMethod = defaults.handleOptionsMethod; function isDeclared(k) { return typeof opts[k] !== 'undefined' && opts[k] !== null; } function setHeader(str) { const m = /^(.+?)\s*:\s*(.*)$/.exec(str); if (!m) { headers[str] = true; } else { headers[m[1]] = m[2]; } } if (opts) { aliases.autoIndex.some((k) => { if (isDeclared(k)) { autoIndex = opts[k]; return true; } return false; }); aliases.showDir.some((k) => { if (isDeclared(k)) { showDir = opts[k]; return true; } return false; }); aliases.showDotfiles.some((k) => { if (isDeclared(k)) { showDotfiles = opts[k]; return true; } return false; }); aliases.humanReadable.some((k) => { if (isDeclared(k)) { humanReadable = opts[k]; return true; } return false; }); aliases.hidePermissions.some((k) => { if (isDeclared(k)) { hidePermissions = opts[k]; return true; } return false; }); aliases.si.some((k) => { if (isDeclared(k)) { si = opts[k]; return true; } return false; }); 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}`; } else if (typeof opts.cache === 'function') { cache = opts.cache; } } if (typeof opts.gzip !== 'undefined' && opts.gzip !== null) { gzip = opts.gzip; } if (typeof opts.brotli !== 'undefined' && opts.brotli !== null) { brotli = opts.brotli; } aliases.handleError.some((k) => { if (isDeclared(k)) { handleError = opts[k]; return true; } return false; }); aliases.cors.forEach((k) => { if (isDeclared(k) && opts[k]) { handleOptionsMethod = true; headers['Access-Control-Allow-Origin'] = '*'; headers['Access-Control-Allow-Headers'] = 'Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since'; } }); aliases.headers.forEach((k) => { if (isDeclared(k)) { if (Array.isArray(opts[k])) { opts[k].forEach(setHeader); } else if (opts[k] && typeof opts[k] === 'object') { Object.keys(opts[k]).forEach((key) => { headers[key] = opts[k][key]; }); } else { setHeader(opts[k]); } } }); aliases.contentType.some((k) => { if (isDeclared(k)) { contentType = opts[k]; return true; } return false; }); aliases.mimeType.some((k) => { if (isDeclared(k)) { mimeTypes = opts[k]; return true; } return false; }); aliases.weakEtags.some((k) => { if (isDeclared(k)) { weakEtags = opts[k]; return true; } return false; }); aliases.weakCompare.some((k) => { if (isDeclared(k)) { weakCompare = opts[k]; return true; } return false; }); aliases.handleOptionsMethod.some((k) => { if (isDeclared(k)) { handleOptionsMethod = handleOptionsMethod || opts[k]; return true; } return false; }); } return { cache, autoIndex, showDir, showDotfiles, humanReadable, hidePermissions, si, defaultExt, baseDir: (opts && opts.baseDir) || '/', gzip, brotli, handleError, headers, contentType, mimeTypes, weakEtags, weakCompare, handleOptionsMethod, }; }; http-party-http-server-af0ac3e/lib/core/show-dir/000077500000000000000000000000001424550403000221025ustar00rootroot00000000000000http-party-http-server-af0ac3e/lib/core/show-dir/icons.json000066400000000000000000001707231424550403000241220ustar00rootroot00000000000000{ "_blank": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWBJREFUeNqEUj1LxEAQnd1MVA4lyIEWx6UIKEGUExGsbC3tLfwJ/hT/g7VlCnubqxXBwg/Q4hQP/LhKL5nZuBsvuGfW5MGyuzM7jzdvVuR5DgYnZ+f99ai7Vt5t9K9unu4HLweI3qWYxI6PDosdy0fhcntxO44CcOBzPA7mfEyuHwf7ntQk4jcnywOxIlfxOCNYaLVgb6cXbkTdhJXq2SIlNMC0xIqhHczDbi8OVzpLSUa0WebRfmigLHqj1EcPZnwf7gbDIrYVRyEinurj6jTBHyI7pqVrFQqEbt6TEmZ9v1NRAJNC1xTYxIQh/MmRUlmFQE3qWOW1nqB2TWk1/3tgJV0waVvkFIEeZbHq4ElyKzAmEXOx6gnEVJuWBzmkRJBRPYGZBDsVaOlpSgVJE2yVaAe/0kx/3azBRO0VsbMFZE3CDSZKweZfYIVg+DZ6v7h9GDVOwZPw/PoxKu/fAgwALbDAXf7DdQkAAAAASUVORK5CYII=", "_page": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmhJREFUeNpsUztv01AYPfdhOy/XTZ80VV1VoCqlA2zQqUgwMEErWBALv4GJDfEDmOEHsFTqVCTExAiiSI2QEKJKESVFFBWo04TESRzfy2c7LY/kLtf2d8+555zvM9NaI1ora5svby9OnbUEBxgDlIKiWjXQeLy19/X17sEtcPY2rtHS96/Hu0RvXXLz+cUzM87zShsI29DpHCYt4E6Box4IZzTnbDx7V74GjhOSfwgE0H2638K9h08A3iHGVbjTw7g6YmAyw/BgecHNGGJjvfQhIfmfIFDAXJpjuugi7djIFVI4P0plctgJQ0xnFe5eOO02OwEp2VkhSCnC8WOCdqgwnzFx4/IyppwRVN+XYXsecqZA1pB48ekAnw9/4GZx3L04N/GoTwEjX4cNH5vlPfjtAIYp8cWrQutxrC5Mod3VsXVTMFSqtaE+gl9dhaUxE2tXZiF7nYiiatJ3v5s8R/1yOCNLOuwjkELiTbmC9dJHpIaGASsDkoFQGJQwHWMcHWJYOmUj1OjvQotuytt5nHMLEGkCyx6QU384jwkUAd2sxJbS/QShZtg/8rHzzQOzSaFhxQrA6YgQMQHojCUlgnCAAvKFBoXXaHfArSCZDE0gyWJgFIKmvUFKO4MUNIk2a4+hODtDUVuJ/J732AKS6ZtImdTyAQQB3bZN8l9t75IFh0JMUdVKsohsUPqRgnka0tYgggYpCHkKGTsHI5NOMojB4iTICCepvX53AIEfQta1iUCmoTiBmdEri2RgddKFhuJoqb/af/yw/d3zTNM6UkaOfis62aUgddAbnz+rXuPY+Vnzjt9/CzAAbmLjCrfBiRgAAAAASUVORK5CYII=", "aac": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnhJREFUeNp0Uk1PE0EYftruVlvAUkhVEPoBcsEoLRJBY01MPHjCs3cvogcT/4qJJN5NvHhoohcOnPw4YEGIkCh+oLGBKm3Z7nZ3dme2vjOhTcjiJJvZzPvOM8/HG2q325Dr3kLp7Y1ibpIxjs4KhQBZfvV6s7K5Vb0bjeof5ZlcGysP1a51mifODybvzE8mzCbrAoTDIThMoGXZiZ4YSiurf+Z1XeuCqJ7Oj+sK3jQcNAmg8xkGQ71mYejcAB49vpmeuzJccl0+dUj6KIAvfHCPg3N+uAv4vg9BOxcCmfEzuP/genpmeqhEMgude10Jwm+DuUIyUdTlqu2byoMfX/dRermBeExHsTiWNi3+lMpzRwDki8zxCIATmzbevfmClukiP5NFhJgwkjeRTeLShdOoVJqnAgwkgCAZ6+UdLC9twjQZ8pdzioFkZBHY3q6B3l4dJEEEPOCeD4cYVH7Xsf15F+FImC775INAJBJSkVoWo0QY9YqgiR4ZZzRaGBkdwK3bFxGLRZUfB3Rm2x4x9CGtsUxH9QYkKICDFuLxKAozGZwdTqBRs2FbLlXbiPdECMCHadj/AaDXZNFqedCIvnRcS4UpRo7+hC5zUmw8Ope9wUFinvpmZ7NKt2RTmB4hKZo6n8qP4Oq1HBkKlVYAQBrUlziB0XQSif4YmQhksgNIJk9iaLhPaV9b/Um+uJSCdzyDbGZQRSkvjo+n4JNxubGUSsCj+ZCpODYjkGMAND2k7exUsfhkCd+29yguB88Wl7FW/o6tT7/gcXqAgGv7hhx1LWBireHVn79YP6ChQ3njb/eFlfWqGqT3H3ZlGIhGI2i2UO/U/wkwAAmoalcxlNA1AAAAAElFTkSuQmCC", "ai": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAk5JREFUeNpsU01vElEUPTPzZqBAQaSFQiJYUmlKYhoTF41L3Tbu/Q/+AvsX3Bp/gPsuWLrqyqQ7TUxMtAvF1tYGoXwNw7wv7zwYgtKX3Lw379575p5z77O01ohW+/DVh8zj7aYKhflGdG9ZsGwLNydffgVfr19YHvsEa+Zu/nxndob5StQK+dyzvZzyw/gKlmMj7IygFM+xvNcanp4/t5dAomXHBy2UUBOO2MAl/B9/cPb6PULuoHx0WM0e3GvpUOxD3wZAJWutZqYUYmqpSg5OMgH3YQObL59W0/ullpryR3HegkKEqiWBSGV4R3vQ7sIhScTZFTpHx3A215B5sluVY/WWMg7+ATB/lcLsKpTonHzD+OMFEuTz8ikkt9Kwt9YJZB38cpBdoQAZJdLvCGByfoPB6Xdk90pYy6Xg3c/DaWwArg09DaG5lCsUFN0pckZAojdC8m4auBqaALuSgez7VB1RtDSUWOQvUaBLFUzJBMJ2DwmPgd1Jwm0WoSgJfjDvrTKxtwAIyEkAOQ5hU//Zdg5uowDlUNMnwZLW0sSuUuACYhwQRwFvJxupCjEYUUccOkoaKmdOlZnY1TkgAcXAhxhOwLsDsHoN3u4O5JTDfVCH6I9nfjId3gIgSUATFJk/hVevGtOMwS0XwQ3AzB/FrlKg8Q27I2javVoZrFgwD4qVipAEyMlnaFArzaj/D0DiMXlJAFQyK2r8fnMMRZp4lQ1MaSL5tU/1kqAkMCh2tYI+7+kh70cjPbr4bEZ51jZr8TJnB9PJXpz3V4ABAPOQVJn2Q60GAAAAAElFTkSuQmCC", "aiff": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAohJREFUeNpkU9tqE1EUXZmZpE3aTBLbJFPTtFURtSCthr7UCyKKFJ/9An3og6Ag/oXfoUj7og9asCBYKT6UIPHaWtpq7NU2aZK5z5wZ9xxMpMwZDuewz9prr32ZiO/7CNaDx3OLt6fOjBqGg/aKRCIInp8+KzfKH7fudnVF58nE16el+/yU2mBFSWZKpWJKVc0OgUBo02K4NDmU6o75Mx+Wdu9IUXFeiOA/pn1xHeYaugVDdzpbp91qGlAKGTx8dC19/Wpxhjnsxj/RRwk85hGJC9d1O6fneWAuoztDYSSLe9OT6SuXB2ccx73Z9uukwDwfls1g0xZIY/Ad/Gnyt/XVfbyYrSDRE8PExHB6/8B6QuaxIwRBFMt0iIAiMx+LCys8jfGJEUik2WpZOD2SQf9oDtVqQwopCAiY66FS/om3b75CVS2MlU7AJ2WiJBCZjZ2dJuRkDJZFwFAR7UCBja3fNfxY2YEoCtRCj9em3Tpds6FpJseGCBxS0GgYGBzqw62p84gnYnAI2CSbSbPhEpFAaE2zODaUAlWWwDoS5DheGqbWpVE/0CmqCY9qkEyINBceb2uADRNQ8bSWAVVzIFKomCQim+0luS4yKYlsHlRyZo7EsSEC23K5vAsXh/H92zZkuRvxeBS5nEx2yp2KqhxPoV5TYS/8CtdApylM9sZQKKSQzyeRTseRV2QoAzIYY8jme5DN9fI0dQoUIjANGydP9VM7PZw9p/AiBpNYrdbw/t0yTJqRtdU9UrfJCUMpSJIgbWzsYe51BcViHzLHeqCRqhZ1YX1tFwNfZBxS9O3NWkAcHqR606k/n/3coKAoV/Y7vQ/OYCZevlrmv3c0GsFh06u3/f4KMABvSWfDHmbK2gAAAABJRU5ErkJggg==", "avi": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAm1JREFUeNpsU8tu00AUPXZcN0nzTpq2KQ3pAwkIAnWHqCoeexBb+AQ+ABZ8A2s+AIkdm266QUJIFWKBkHg1KpRHi5omJGkbJ3bGHj+4M1EQrTvSyGPPueeec++1EgQBxHp+/9mbyuriRZdxjJaiKBD3W+u1+p9a856max+gDO8ebT+WT20Ezi9NZi/crqadvn2MQBAGfpCOpqNru2937vxPIpY6Onjccx3Twck9MBiSU0ncfHirXFmZX3Md9wqCUwiEVN/zaQfHt0vfbBe5uQyuPVgpl5Zn11ybL4/i/lkICOw5niQRGQShoiqI6Bo43W2ub8n3hRtLZT7gTynk6gkCX9gAOxpAnxhHZDwC1/aI1EViJolu/QhKRMHZ1UX0Gr1USIEn5FPWHy+/wTokkrQOq2vBaHZBN4hmY9Jwfr4An/teiEB45ZZDwDiMhoExT0N+sYDCuUkkplLIlXP4/XEXdo+RUhdhBSSfUwtVTUG8MIHK9QVqI7D/uY6vr2pwmCPrkz+Tk9gwARWQ9WxppbXZhNnpw+ya4A5HZi6L4lIR8WyCcL6sTZiAWjWgAmpxkn5+kqTamK6WkCwmERmLDLvjB0ML9ikWXPLFuozYOap3L8HYN6DHdbS/d5CeTVBndBz87FCBLYkNTyIjBQemnIEsSY5lYrK1+UoWcToLMjEHAyIQ2BCBSx/NVh+ZUhrqmEqBebS3WyhdLg0zt/ugAaIklsSGLHCLa6zDMGhZ2HjyGsnpFPqNHnY2fmHv3R5SMymYbROszSQ2ROAY9qHiofvlxSc5xsKKqqnY3diRE9h4X5d/pzg7lnM4ivsrwADe9Wg/CQJgFAAAAABJRU5ErkJggg==", "bmp": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmZJREFUeNp0U+1rUlEY/13v9YV0vq2wttI5CdpL9aEGBZUDv0df668I6n+or0UQ/RuuD0EgVDAZrsKF4AR1a6COKW5qXvXec27PuVeda3bgcF6e8/ye5/d7niMZhgExnK9fbTrm5pbBGMZDkgCyq+VyhTUaT6Eo2ZHJePPWXJXRhez3B1yxmM/QdctXUSCgtV4Py4CvY3cky4e1x5DlLCaGbbzjXDcousG5OQe5HPRSCQPK4PpsEM/XH4WvhS4noeu3JwHGGRiULhsMoKZS4I0GtEIB9mgULJGA0+9DPBpBT7sffvf1W/Lg6OgJufw8C0CRGEXWazUwiiyFQjA8bsjVKjaJzovMD/Q5gxyJhG2cvyeXe2cAuADQNGBmBvLaGuTFRaDfh31lBTWi9pumjbK0B4JQul3vOQpM8JdskOLrdCvDcDjAsjtg5TIkoiKLaokMNR2cnZbqNAMycqG7XbHKR2fMzwO/dsxSwu0BiBJsNsv2LwAJAJCI5ux2gXYbqNetcz5PoORI1cDS0n8AxGW7A+zvEYBKZ2ZlcsEtJLbedMjePBaCTQMghx45ulyWkzxMVUQ2RMQhLfFO16YAqCrixPnm6iqKrRb2W23EfF4cUNSrHg90cr7hDyB33MTnSmUKALVs4uIlROjxg+AsPhGVl3fuIl2tIOB0Ya91gkOi9mxhAal0ekork1ic/kGLBORMxy2K1qS9V1ZQbNThIj2EGh+2tsyOnSai8r1UxMNIBB+LRTTULr4Uds0K1tU/uOLxIrmbNz8XXSrnASSpubG9fbKRyVh1n/zSw29t9oC1b47MfwUYAAUsLiWr4QUJAAAAAElFTkSuQmCC", "c": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAcxJREFUeNqEUk1rE0EYfmZnkgoJCaGNCehuJTalhJZSUZB66a0HwXsP/Qn+FM+9+hty0LNYCr2I7UVLIW0Fc0hpQpSS7O7MrO9MspuvVV8YMnk/nn2e5x0WRRFMvP/w6WSz5jbi/9NxfP693Wp3DrJCnMW5d28P7a+IE15lufR8o1ZEStwPhkWHsWbrZ+eNEPxsuubEF6m0TBv2Q4liPofXuzveulttSqW2UwH+GjqC0horpSL2njU89+FyMwjlTlxOJMTa9ZQHzDQIjgwdom9zLzfXPc75kbnOAswBJTlC2XrqQRMLxhi442DgB4UFBhgPpm3B5pgBHNUUxQKAHs8pHf3TEuFMetM9IKr/i2mWMwC0SnuSFTG2YKyppwKYVdGO7TFhzBqGIenVeLCUtfURgErucx5ECKREKBU4d3B718PHz6cICGT/1Qs8qpQtGOdyhtGEARWDQFqQJSeDL98u4VbLaKw9IRAJPwjtoJGlVAoDQ800+fRFTTYXcjlcXN2g++s36p5Lzzlve1iEROa8BGH1EbrSAeqrjxEqicHQt8/YSDHMpaNs7wJAp9vvfb287idboAVkRAa5fBYXP9rxO4Mgf0xvPPdHgAEA8OoGd40i1j0AAAAASUVORK5CYII=", "cpp": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAfJJREFUeNqEUs9PE0EU/mZ2WgqpXX+QIDFdalVslh8NlAOQaOKFAwfvHvwT/FM8e/U/MOnBmwcj8WD0ACEGghIkbU0baaEthe3OTJ0ZWV26q37JZt68ee/b9733yGAwgMbL12/fz+azbnAPY2Nrt7Zfqz9JMrYZ+J4/e2pOFjiciRvXlgp5GzHonXk2o6S8V6k/TjBrM/xGA4MLyeOSPZ8jkx7D+uqCU3Amy1yIYizB36AlCSkwfjWDR4uu40yMl/s+XwjeWThQQ4Z6QNSnSkYykcDXasP4lmfvOZTSF9q8TDBEFPbN5bOqCglCCCxK0TvvZyIV4CIxbgpC+4gm/PUmFCIE8iJPyME/e8Lon9j4HvyHYLjKSwRCSEUgf9+15mFbx8QS6CZJMzJ9SlBCwX3fJDLG4PX7ykcwkmQmJtpEhWa7g1dvNlSwjwelebz7tAXLolh0p/Fxe9fErK2WDFGEgKjxfNjegX0lDTc/heNuF99/HGEslcKXwyoazWNDdlCr6+DoJgrBzdI0T9rYO6yg2zszMlaKM3Dv5OBzbuyZuzm1B16U4Nzz2f3cFOx0Gq12F9cztpExncsqYoaHpSIKtx0zJdVIFpHQ6py29muNk1uTN829o/6SHEnh80HFaE6NjmLnWxUJy1LyTltB3k8BBgBeEeQTiWRskAAAAABJRU5ErkJggg==", "css": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAk1JREFUeNpsUktvUlEQ/u5DoCLl/RAKKKUvWmIxjYntQtcu3LvwJ/hTXLt16coFC2PsojEaMKZtCqFaTdGmjbS0CG3By+vei3OOBSGXSU7uzNyZ78z3zRF6vR6YvXzzPrMUCyf68bB9zO+VfpROn5hkOdfPPX/2lH/lfiLidztX5mN2jLGG0rKLENIE8liWpdzwP7HvqJqujmvudFU4bFY8Wk1FZsOBtKppd8YCDNu77CZevd3gflfTUFcUhP0ePLibiIR9rjSBpgwAfe4dVcV6dhtep4PH5msylGYLrzeybErcT85FYiH/CyPAf74gObC2vMhzsiRhPhpC6eQUM+EA1pJzILEnjRSuJsju7MJqsUCSRei6Dp3yXqcdGlHZ/rLPazQWGCn8+6YW4pAkEW0SjzUzanWlCa/LgcR0lNfovTEi6lcIkzesnM/R8RlN0INGp3h4DHoDsE5YRvQyiKiRSMzikRAOS2WoqoZWu41K7RwzlOOAVDMMMHhIGvFlRxJFrKYW0ep0IYgC3SDh4b1lTJjNfENsrazOAMAw680mPuW+8lFno1P4XDigRhOiwQAyJK7TbsNS/PaA7giAIAhYz2yRgBIfsVA8wIetPG6FAqhdNrC5u0f+TUyHgyMTDDToEt/ftQsEvW4EPG5OZcrvw0mlimarTXkPfpXPcNlQoGtjACgpryQXsPNtH/nvRXqBJpoKHMzGNkNB0Odls7LNyAYKpUq1dt1iuvB7fRDp9kr9D1xOFwkpoksXusmXaZWFn0coV89r/b6/AgwAkUENaQaRxswAAAAASUVORK5CYII=", "dat": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAfVJREFUeNqMU01PE1EUPe/Na0uptmlASg3MoiZgCA3hQ8PHAjbqwsS9C3+CP8W1W/+BSReyYUPwI4QAVkAgUEgIbVIg1FZb2pl5b3zv2cHBjsaTTOa+e989OffcGeK6LhTevFv+OJoZHPHOfrz/sl86KpWfhxnLe7lXL1/oN/MSZqonOXU/k0AA6lfNhEFIrlAsP2PMyPtr1AscLpyg5pbtIHErhqez4+awmc45nI8FEvwNaiQuBHqTcSxMjJhmX0/Osp1xr878FxWEzwMinxAzEA4xFIpnOjedHTKpYbxW4U2CP4j8uWxmUKsghMCgFI2mFe9QgHZj0Ba4yhFF+KvGJToIRLuPC/efnjD6+26wB1Lq/xgbSCBXKeWJG/OTdky8cWTdT3C9RmWSGk2XCLlWo4xTNbfN5qh7PpXM72GjZeHt0gpq9QbmH4whGb+NpU/reDQ7hcWVVXxvXOHxzCQopQEKXKEbL6o1ZIcy+LC5g62DY2zsHeC0fA4zndIrHOjvg2XbAQRSfsuy9XxC2qzi/H5B6/68W0AsGkW0KyJPBLbDO0fg3JX/CUM81i0bD6WKe6j9qOPJ3EMcF0tSNsFA6g6alqW+VtZBUL78Vtk+Oqne7U9rs5qOQCjSheJFBeFIFOfVujSUYu3rIc4uqxWv76cAAwCwbvRb3SgYxQAAAABJRU5ErkJggg==", "dmg": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAn9JREFUeNpsU01rE1EUPe9lkk47yWTStCmtNhFSWxos2EXVhSsRcasuxYV05V8Qf4DgD/AvCK5EV1oFI7iUBqmCNdDvppq2mWSSzEzy3vPOpFFq+uDNfR/3nnvueXeYUgrBWH1/9/NE7k5BKRnuRcfF2qdnmJq9DeF9tQ+2isuMsxXGWHh/a1mEVsPJSI5fSU3OPEj291IIlN49RXz0KqzEQjIeZS/L5Y/3wPGhDxIM/i/A7fZWgVG0t5EaG0ZUa0JGM8gvPrZmLt58QYwv91mfAqCIE0sAqgumBFITGQzpUYhuF0KfRa7waDyXXXolpVrsh/0tgSLDr5I+wUZo1UHCSkAficPzY6juFSmbRPrC/azjq+fkcO00gAqoU7B0ETKkfWbuCTjTYeq5oESAauexcTScX+ZACWFm0YQSLZKhHdr67+/wW0e0dgjYo3sCEXXybYtBDVSHLp2es3IpsILS24c42lkBg6DzRjgRzCDZ/xr0GNRJwwYiWgzt+hYMawleu0V3wbkT+kUirOc7IGJAz68R/Qak1BAlx3hqASPGBJRXpXOv58dkz3eAgQoOm4hyj57NgZm0MHvpBmK6QdUdg/DAg9cRkhicBSDaKJdeo1bdxmR2DtWDDUxl51HZ+QHTysD3XdQO95Gfv06aeGcAdBrY3Chi8lwO3768QWX7J5q1XWyVSxgajiOXLyBG2hzurRKV9lmt7ISNkkjo6HhNyjoK+2gXRsKE57ZIE2ot10Z1fz0Ue4ABVw3NMjnW14rInh8jTYywoTg3EOFpOM4mXNfH9PQUfGlrAwBOs3I8ljbtuMWhRWzIIPrkn+GcYcgIWEowbZ+0qB334/4IMADESjqbnHbH0gAAAABJRU5ErkJggg==", "doc": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAppJREFUeNpsU79PFEEU/mZ39vZu77g7DokcP04BBSUmiEKCSCxs7Ei00JAYO2NlTKyMrX+CJhaGwopSQ0dMtFEsbDRBgiZEQIF4IHcg+2t2Z8eZ5QDlnM1mZ9+8973vfe8NEUJArfSNhzPG0VIfeIiDRSDkw1cWVt3N8rhG6SdSO2Gvn8dfuueqZwuNZqk3Jxg7iNcIfBbgXD6ZC8u5qffzX8eoYeyDxC77uygKhcouovgVUQj1H4YB2ovNuD9+tTTU0zMVBmG/+C8AIYh8F361DL/yE5HnADKYlVdg6MDAmW7cuz5WGuw+PsWDYGAvbL8ECFUt4K7/AHd/I9c7BLaxinD2Ld5Zo7g78RLuRhlBS2cpWbGfStfhfwCEpK0nUjCbWuGsLciSOELPhkq/YgdY3l6HsLfRcLYf+pHNbH0JigEPkLAyMsiEJ7NrqQzM1i7wyhoMZqOhvQs6Z0ovXgdAJACRoulEg5HOwrOroKk0zOY2BDtVpTF0CU6kLkQJXa+BNEoG0lMSsBBKQXWNQktmoGcaYeSaQCIVWOvUYQAiWZFQtk5mSMoSzEILtBrTfEcviC5bwVwQmoh96wA0ic5dB57ngeoaTIPCdb34zDITYNLOOIeVSsW+dQC+7+NSWx6jJ4tY/rWNV7PfcGv0tBoPTM7M4eKJVgx2FTE9u4QPS6x+kHzfw/mOAjarW2hJG3hy8zIceweuY+PRtREMdzbjzcd5WBqPB6xeRGUMGRzHjWvMmxQ7tiOF1JBN6FiTd6Sy9RuFbHpX7MMMqOD088Ii+op5OUAO7jyeRGfBwrF8Cg8mXuDL4neMXzgFwhwZz+hf7a9d5yu3Z6DTPjVQIY9k7erO7Y63Lvc8ErEeyq6JaM6efjai4v4IMABI0DEPqPKkigAAAABJRU5ErkJggg==", "dotx": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAndJREFUeNpsU01rE1EUPTPzJk0y+WhMStW2qdVWxUVEQUF0I+4ELQiC7lz4N9z0T+hG9wrdZKUgLqulhrbSag1CKpT0g7RpYjqZmffle5NEKdMHlzfvvXvPPffcO4aUEno9f3Vt4dTp+BXOe+fB0u/NbVpv7h89NU1j1TCM8H7+xY9wJwPHZMbOjRadLAvE/2gToJTiTPx89k+OlVd/LT+0TPIPpO/SzyQk40xCMxBSZ9Z3CoAx5DOjeHT7SbE0XSpzwa8OWB9jINELolQg8AR0EgUKn1PIlIWpkUt4cPNxkTOU12trs8p95RiAXpqaztqou8q6SKQJJmZSqGwsodFsIJk1kcyLYv7IeafcLx4HUNkFF4jFTExMZ0B9DrfD4HUEusYhWs4GPEJg5wly/tBYRIOeDhpEwlS34xcyajdQr3UwOT2MlJOEBRuGNHWp9AQRVXDfQiFV/U5GBSiQ5p6ngBEa5z3fiIhC6g6IMDBwOdoHPkYnHPVyhN0tF7E4QSpr94CEOKELffq+y9Bq+DCJ7rWBoQQBVbPR2O6G4OlsLASJMtCZfQqm0NP5IVWnamdAkUxbyuIYtD7wWegb0YAzAVMkkI6NwPM9xEwHloyDGAmk7AKS9rAS0FKOdugbYeAHPu7OPEM+MY7q3hIKqTFQHmC3XcONc/fxdfMDrk/ew/edzyhvvTmBAddocVRqH3Frahau56qpZDho7+PnTgXffi/gbHYmLEvPSIQBp5JU62sYz13G609zKBXvoOMdYn2zgm7Xg2MVML/4Eu3uPgxhk2gXmNl8v/i2pcXTP8tKdTEcbWLZqDQXwu/l6pfwbEnSGsT9FWAA4mdHv2/9YJ4AAAAASUVORK5CYII=", "dwg": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAoFJREFUeNpsU0tPE2EUPfOg006hD4rQh8WgbCSwkKgbF2owujaCiQsXxpX+D6MmbtXEsHCLmIAbE6NLo8YlGIxREIshIqVl+mQ6j8/zFVCb4UtuZua795577rl3FCEE5Bl79vPd5LHYiOP7cH1AUWi85ytmvlas1bJ9E5ryBntH3BpuP/X9i7ovkluuiE8N9SDepaLpCcRCCqa/VDCaMuIjSWP25Upl6n+QDoCz6Yh7KKzh3sI2LuUimPtRRyaqodj0MDloYiITSTi+mH29Wu0AUf9CsZPJoW5czJl48LmCc5kIKo5Al67B9gUGYxrun+5NnMlFZ+GKiQADj2a7AquseLIvjMv5KMaSBu4sWVir+3i8VIVKYSby0UTdFU8Znu8AYBHQgVOJEN5uOXi4UsdawwU0FSf6TaSoyw6DRvukPkgGWpDKy4F8a3jImCrqFDFn6rhKPR4VGnhvOTAY3WLcjifcQAsqRfhUc/Gq1MKNbBh9nIAMDjEppocxs9HCMktfGTCwP/oOBkUKNk/qF3pDYC6Ktk8RfWzyaaoKrqdDaBDwya8W1m0/CPCR3kFy7CcnmWQRUJqcRJFUKtTnPCeR71LwoeYF92CYyVnCFZpCTrRtCv5to2St8SOrKxiPqEEA4fkYT+mI0rdoeUiH1XZVuQPpsIKqw2QmfifTsnOABiWySlH9uU0Hh2MqjsZV5LtpPSoGeN9rKnhBX7ehoOSLIIPfnGONXGMMWN7xUfVldYDbjM3mrh5HCDgS17DhHgDQcIU+XbBxnDTn1x1UuQcJ9iv7l5Q5e1zLGri92EDJFnoAgHtcfr6wbbVXUqq193+0z97n3UJt1+d51n7aHwEGAAHXJoAuZNlzAAAAAElFTkSuQmCC", "dxf": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAo5JREFUeNpsU0trE1EYPfNMmtdoH2kDNmJbaVFcaBVFpAsREQpFwY0bu3HjQnTj1mVd+ANcuC3qQixmry6E0kWFVIQ+bKy2tbFJm3emyXTujGca+4DkwsedfLnn3POd77uS67rw1vC79ek7fZEzpu3AYUqS9tKQGZPLpa3VXP0uFCmJ/8t9OLC3q/uJbcs5bkIybvdHoMsSbLKENRmvU2WcNnTjRFD7ML1WGSPJHI6sA4KRWMAWVDPxLYex3iCmfpuIh1QsFSyMxQO4GvXHHwOJ6XWSyIck8v6HQsnjAxFc7vTj2VwBg4aG78VdBHQFCk+dbVcxMdwev9gTSEC455sIBOu2KLsoJFzqasP9vjCeDBlYqzn4VXXwarGKZN7Crd5QfLDT/7KpBM84c9fFUFjFp2wdk6smflRsKKqMa7EgfJJ3Ac2OKlit2pEmBTQfngdpnupoU7BUtRGiiTe7fXiRqmK+KuDn6TpvYogmBRJcrOwIJLIWxmM+dOsyLKryQAaJpjJ1/AxrGO3SqdZt7kKZJrzJWBg5piHENuY8vV6e0UOye1TyftvC5l+gZB8SHJTwpSx4q4JeTUKaxhXoR57h7Rn+3iFolJ3xvPhab6HgJG/pJ7jsNP4sUX+jZiCgEsWd/DjH5IrSYpBUAr0yHpzSoXKOP25a6OBhndh0zcX1qIYM2RIbu6i0KiHD5B/GTMHG03kTGpEL7H80wHFOWwhqDZ+SpkBOtCDYJDhZE4gRcKNbYynAqbCMbXpwpVPFbEng0aKJGbYzK1p4wIegLlcEPmdt+DjXbzcsxFlCynRwwVAwW6hjqeg0Zt521SYCWCJvbe0Un29UDx7Hgrs3IEitHXkw3jOv2fl92D8BBgAJeyqBh90ENQAAAABJRU5ErkJggg==", "eps": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmlJREFUeNp0U01vElEUPfMFCEVArdoSqEA0KV246UJdUJM2Lo2JK/9FjXu3utJqTNz4D9worrsQExbFpAFT0TYp0CZ8pIAiyMfMvBnvm2Foa9uX3Lw7c98979x77hNM0wRf7ufPsq7Z2SQYw2QJAkDxQalUZa3WI8hy3gmZr15bu+z8kILBkCeRCJi6bufKMji0NhwiCQR6iitdatTvQ5LyOLLEiWcYukm3m4Zhmbq1BX13FyoxuH7xAlbvpqKRK1fT0PWbRwEmDEyiy1QVg/V1GO02tO1tKLEY2PIy3KEAlmJRDLXb0TeZL+n9g4MHlLJ5HIBuYnSzXq+DlcsQLk/D9Hoh1WrIUjlPcpsYGQzS3LWoaBhvKeXWMQCDA1D9pt8PaXERUjwOjEZQFhZQp9L2yERiqYRCkPt/z58ogTGqHQLE1BLgUmC6XGD5AlipBIFKkbhanKHGYLBDqQ4ZED0OAbfLlo8OIxwGvhVgyTHlA3xkomjH/gegBgDURMv6faDbBZpN+/tHkUApkdTA/PwZAPxntwdUyjYA/+ZMqJHjLgM9iv/6zRt2GgMaIE21aVIjnSm0DGPfmhzyde0UAE2Dj+p7urKCPvkZku9eJILOSMUnkvVhIo7GYIB3xSKYdhoA1erXGVKXpvFxZwdBonnD68PQ7YEwM4O4xwMPxc8RYE87g4FIcz+kvfmnA0YzIJIy77/m0OCqsTkkCTysKPjJG3viLei63Gm3kCO6UWqcMejjxecMPmxsoFKtYop6UNirYL9Wtc5OHqzznIXHq1na7OfMJROcK8a6O7MjW7nfzZdrd7jzT4ABACh3NGsh3GcdAAAAAElFTkSuQmCC", "exe": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAo1JREFUeNp0k8tPE1EUxr+ZzvRJO62lUAQaKIQ0FVJFjBBdoIkrDDHuXJi4NnHtX+HCjW408Q/QmHTRaCRRohIJifgiiBICTQu29mHfnc7MHc+MlECKdxZz595zf+c737nD6boOYzxJLC6Nhwej7e/24HkO779s7G6mMjcEwfKZ21+/d+em+RbagaFev28qEpZwzKg3ZckqCPH1nfS8hScIdyhBe6JqTG3PfyTTeLrwFhvbKdy9/xi5QglXL0yGJsKDccZY7LDIAwWHpSferWBh+RN8ni4UylVER8MY6PHj0uSpUK0hxzfTmWsUtnoEwO3rer64jEyxim6/Hy67DXaHExvJX3jw7CX8XjfORUdDlOohhU4fAVjILCPbm9V1yIqK2FgYt+ZmsZcv4lH8Nb5upXD7+hVMjIRQa8qeDg8UTYPU5cTcxSk4nS709XTD53ZhpD+IYMAPj+TBz93fZiz5oHV4AP1fGdlyHZIkIZkrI7GyhnK9CZXy+Aig6p1+HQAY003AcF8AVtGGfLWG9XTO4MLZ5cL0WAixoT4zVmPHADSiMo3hzHA/xgeDWFjbNg8H3A7kKnX0koEcPdTu/ylgRGZgOjNv38zoSXC8BZJDRKOlwGEV0VJVGM0y4joAPO1spXbx6sNHeD1uRIYGUCxVSRlDt1fC8rfvcDnsmJ+dOaLgoAs6AVLZPJJ7WdhEkUyT8GJpBflSBcVKDTvpDBw2GzQqQT1OgaZqUOhtFQUTUKnVTVWNpgy51YLVKph7sqKYkA4A1ScEfT66vm5kC3+ofh6Xz59FQ5bpkvE4QW3M5Apoyorhl9ABIKnFgNdTOh2NkJG6WSf9eRBJtmFwLDJmriUzeaOkYvvcXwEGAIVNH6cDA1DkAAAAAElFTkSuQmCC", "flv": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmtJREFUeNpsUl1PE0EUPbssLYUCXdpaC9gWoSTgAyFigiRGY+KjvuuTr/4A44MP/gx/gMYfwIsan0RjIjGiJIZgSIGFIoXSD0t3Z3dnd70zpITazuZmJzP3nnvumaMEQQCx3jx69SV3a3KWMxetpSgKxP3m242Do43SQy2k/YRydvds67n8a63k+FRSn7l/bdg5tdsAuM3he/5weDC8vLdqPLgIIpba2niux52mg//DqlsYSg3iztO7mczN3DJ3+ByCLgCBH4hOFEF7cDpzPCRyOpaeLGXSc2PL3HbnW3XaRQCPEgWI2MsRVAVqrwbX9bHxbhOKpiJ/bzpDOr2k68V2BtRNzMtqDEqPejY/4zSGjb54BM0mQ8k4xsDoIMauXxnqYOD7PmwScP31d0SS/eAuh1lrolFpIBQNQw2pqJdqsAlIceB1AJCIkkE/FZskXDQVRXw6IYHiE0nBEcaPXSSvJnGwWkQXAE4acAhbxPMJpOdHweoMhc9b2F8zwKizbdlyPLVH7QLg+JKBYzoorxzjz3oRzUoToaEw9KyO8XQW5AE5jrFT6AbAYVVNxCZ0Ka3So+DSTAoDiej5ywTySbls1OEDobhFlMcXxrHw+AbINEjNXgb7y6BndLhk8cRkHHbD7g4gEhiJFxsdhrDqaamBaDKKerGGSKwPI9kR9EZCaNA5ubE7A5s8IFhsrxQkgJhZoa/06xC5xRz2v+3BOjFlbqcGlquxsondT9vY+2pAJdeZR6fI355CgQCN2A4O1w7gkQ7cdLUOAKdhV6uFSv3kd/n8mT68eC8dKWLnY4FsfeZQh7nVVt0/AQYAsf5g+SvepeQAAAAASUVORK5CYII=", "gif": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmVJREFUeNp0U0tPE1EU/trplAqlL0laiw40xASByEJIZFGVnSvj1j+gWxNXJq7VrbrwF7h10cSNhMRHojEuACVBKmH6SJQyJeXRxzzv9dyZPiCtN5lMe8853znf953xcc4hztDzZ1+C6fQMHAfd4/MBFG+p6h/n4OAeAoGNToi/eOm+A50LKRaLh6amoty2vVpZdotNXccMEK3LwZxa2bsDSdrAqePv/mLM5tSdMwYBYqyvw9zdhUn/L59P4OGtG8qlZCoH254/DdCdQBCxqZu+ugqnWoW9swN5ehp2NotgIo6bGQWGtaS8+vQ5V9a0u5S+1gfABEilAqdUgm98HDwUQkDT8JXoPPq+BoM5kCYmFT9jryn1+hkAt7heBx8dhbSwACmTAUwTgdlZ/CVKJaLnI1GD8TikZiPSR8Gxib8chH95mZTxgwWHwH7+gFMswqcokIRbjMO2HDCnZ1VvArpjEmnKZc8+cZJJYGsLsMiZ8AgwEqaY6Mb6RQR33JFhGECzCRyfAFXNu9v+RVNRZWIMuDJNuYMAaDycUFGhCOgtuAtFVDA83G5A8TrFDw+F5QMAxAKJJxz2xnW3RPJGbm+rCyjotZetH4DGzaSSeDA3h4Zl4R0JOEZWTpIzF4n/m995bNdqZwB6m0gFft3Ak6vz+KYWwFsGlqIxXItEcDt1ARMEtKdVgZb+fwA0G2C2hXM0ZTZNRcSf0b1pmXi7uYnjI+Lfanm5fRQsK8BIxKcrK7i/uIgP+Tw+FlREqHN5fx/vyU4uHBE6UO4gDWqk/JFaLuMxcXeFk6TuJ90V0HOk1in7J8AAjmgkPfjU+isAAAAASUVORK5CYII=", "h": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAbRJREFUeNqMUk1Lw0AQnf0woK0ttVqp0hwqVCl+UBERT94F7x78Cf4Uz179DT14F8WbYHtRkBYRLNqDtdaPZLObuLs1NGlXcWDJZGbey+x7QUEQgIqT07PL5WKhHL5H46J+22q22vsWpbWwdnR4oJ80LNiz2czGUjENhvj4ctIE4Wrj8XmPUlKL9nCYcOFzE9j1OKSTCdjdrtiLdr7KhVgzEvwW6krC92E6k4Kd9bJt57JV5vFK2KfRQRV+RAMkzxglYI1RaDy2dW1rpWRjQo5VGicYIorWVooFvQVCCAjG8Omw1MgG8AM0uSBUDSnCfk/IGCHwf3DCD/7UhOLBrFkDuep/hDUSSCv1iYo4rIfqGwmUSNJjfYbBcQKhZw0aBMA4B48LwBhBt/cON80HmM9NQ6fXg/Wlku4TwmNWDzaQqzHG+0PSKod5cH5Vh2RiAhYKc8DlV1UPSyuFMGygVlMg1/P6BC6DqXQK8jNZDXAYA1f21V34wMXYFaiyVw0rJyzLgs3VMkxOjGtix/V0XWChZ0cI2i/dzvXdfTd0Qf91BMPrhyNzgKfOmxaWypqaDXHfAgwAtCL8XOfF47gAAAAASUVORK5CYII=", "hpp": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAehJREFUeNqEUk1v00AUHK/XKf1yZdESVRBXjRSRFqMQVBA5Ic5I3DnwE/gpnLnyG3LgXglx4UDDLZS0RWkDLiRxSusk9u6GXSembmLgWZbX7+2bnZl92mg0goo3b3ffO/ncdvyfjHef6q2Dlvs8Q2ktzr16+SL60jhhZ69bO8X8ClLC7w9XdKJVG8fuM0r1WrJG4gXjgqU1D0MGc2kBTytl+7a9XmWcl1IB/hZKEhccq5aJJ/e3bTu7Wg1CVo7rNLlRhUh4oMnXoDoyhoHGyWmUe+QUbELIa7W8CjAFlMzdzeckCwFN06ATAn8QmDMMMGlMuwWucpoCHNe4jBkAMenjYvRPTyi53JvuwX8AplleAeBcRFrH6rXIxLim9I/pi3QA1RhKaYxdjkN8IwalCMIwWs9ljMkh0wzk+9M7w179C3LZNXxve2h+c3Hu91HeKmD/6zHOLnw83ilB1/V0CeqU3Q81LC/O41b2Btx2N2JVP2riR8eTUxmi0TzBwrKZMsqMoz8MsDh/DWuWhUBKURLKxQIeOMWoptYPnS1c+INZBkwISomOSsmBZS7B+3WOzZvrKGzkMAiGqNy7g+LmRkRfekBnANy2163PZXrSbrQ6vch19Xz8fPDHyL39QzkHBKedXjfu+y3AAGU37INBJto1AAAAAElFTkSuQmCC", "html": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmBJREFUeNqEUktPE1EU/mY605a+hhZTBNKRDApNrWIRA4nEBUZdmCgLNi4MK5f+FNdu3bFv1J1EXODCR1JJSMTwpqUP6NiCpe10Zjz3hj5Mm3iSybl37jnf+c53jmDbNpi9eb+6Ftcisea909bWNzNb6dwzSXKkhIt/r14+515qBqmDA8HpqKagh53XaopblpIbe+knDpFAhPab2Dw0TKvRK7lmNODzePBgZlK9oUWSpmVNdpIU8T+jaMsyMaD4MDcZVa+NhJMN00w0n6V2nN3yQgdHWZag+LzYPTomIAtT0THVtPGanmb/BbjwLFkvn2IttYGYplKyDzsHh7gdmyAWfh5zVq0Guhg4RAHFUhmfvq3j134aXo8bd+ITnMFOOovU5jbGRoZwNxFn1cxuAIcDW/sZDjA/c4u+BNxOJyxqaenpI3z88gMfPn9Hv98HQZS6RazW6kjExvFi8TGdDSy/W0Emf4LS6R8sv11BmfzSwkPcm74Jo9Ei0GZgmkw8QCOao8OXcaz/5vSZnPdnp3ApqBBLkWJE0Ci7ASzbIhCLLQ1E0iOkBDh9NpUgiUejo8oNuJwyn0YPABtn51UYFFivG3yBGCNZkuDtc/MW+ZQI3OrYpBaARCKufk3B5XIiWyhiL5ODp8+FfFHH+KiKSqWKUL8fC/NznGlPBmz+24dZjKnD0CJDcMoyW0SqXuMtHBFw7rhIAD1ErNUNafxKBNevapwu65NpEQ4FqXIA+RMd6VwBP3cPSERb6gLIFIq61+UqGWaFdcrVt/lmAuWjAi2aiMFwmOYuIJ/N6M28vwIMAMoNDyg4rcU9AAAAAElFTkSuQmCC", "ics": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAhRJREFUeNqEUkFPE0EU/mZ2dra7bLNpi2AxQFKalkJrohICiYkXPagXrx78Df4K48GDBzmQePLMhUODNxQ5ciEkJVqDtJGmMWrCATRbd2ecoS5u3aovmezsvu9973vfPiKlhI4XL7c2r5YL81LIELEghLA3u/udxmHnPmfGW/Wuv+LpwwdneRYBx7PeWK0wOYYhcXxyckGV1fdbnbuMsXcklqPRJQxFMKz4RxDCtVO4s3xlRjWoB0FYjlQPEEBieChwKCRGMx5uLtaKs1P5ei8IKlGa/YkXMXYtlTEDlsnw/mMXhBJcqxSK6vlcpa4PEpCooUyIqs5M6hG1o2CUwqA091cFcYLf/sjzcX75EiQIojI9779CTYR4jwTBf+r7GAwh0AxCiL6JMT/04vQ79u8aI2O/7Jzg69o6Go8ewycUahtBpADhHKLnK/eVbkMdtROWIv80NQ2sPhncA9Htwn+9hZG0rY6DzFwJl+7dhs0ZstUy8rduwPS/wd/ehmi3kwq4zTHiWUgXp+EuL8FvNvFl5Rn4xAS86iyI2kY3n0Mv48ByrOQmancdi8I0Kcj3U5iuA29xAelKCUHrEIayzltagG2E4IwkFaQgSC6lYI09iN0d8It5uNV5nG5sgJdKYC0G8WoTOZvBISFNEBxnsuzD3GX4vfDsszzqAu0jkJQDedCGbB6AWg54pYbPo+NGVPdTgAEAqQq70PytIL0AAAAASUVORK5CYII=", "iso": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjlJREFUeNp0kstrU0EUxr/k5qbJzdPYpGkpsUJoA2q1oLjTdiGiIC5cuXHlxv9BEOrStTvBnQvRrSAIsejCrlqpsURq2hCJNQ+TNLm5uc/x3MmzJh34mDNnvvnNzOE4GGOwx8+t9XQkfn0VE0Y5/7Z+kHm+dvOhtd3P9c/xwNZh7nWaMYtNUmX/Fct/vlN7/8J5aRRgyzm8xzpRDjGE2aVH4VTqdnoUYg/XkEhmy+Cx3DhA5tMzdFolvg5Mx3Fx9SmH0JIg79Zo3j4GADMIokJTKtjbfAKXU4Y/2NvSfyH75TFOxa9Cmr0XnlPFl5ReOQ6wNMDsoFX6AElqQlNV1KsOuNwS/AGFjEUIDhmn5+/DMM16/9igBowAzFKIswPJr6MjlxFP3sV04gaP7RzMPe6xvWM1gNUBM2UKYlBau3QghGphg29J3gDlLLilWNdD3gkvIIDRhD9yGe2mCV0V4HFXuCxT5Dlv8Dz3sIkAs03FalDxBMQSt9BRBMhNncuO7dyU28c9tnf8C/Q0ZtR4GImeQSj8APLRH772BWcgiFODffCv/t8H9tO0v3RjV7VqkeeXLlzDfvYjj88uXhl4JwIsrYxmLY/M1gYclIvGE9jZfNPrSCD3/QgLyeWTADV6wW9AryIcCkB0u1Aq/oCPumlufoF72vIheaLDr4wCLIOqrYnULA14PSoqpSJEAUilZrD77Sv3LK+cI0+Be8cAbbmAOrob0agtD491LYfkoqvnyZLsWRkA/gkwABL4S3L78XYyAAAAAElFTkSuQmCC", "java": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjxJREFUeNp8U01v00AUnNiOEyepQyhQobRBSlVIoRCBEPTAjQsSEneE+An8FM5cuXLNoQduIAE3qopKNJAIIppA2jrOR93aa6/N8yZuUxyxkrXr3ffmzczbTQRBgHC83nj3ca28dD36nx6fvnzrNNrdp4oibyUmey9fPBezEgWVFuYLdyvlPGaMY4fl1aRS+9pqP5ElAkmcnknRwuO+Nyt5u/ETYfyj9WrpZnmpxn2/Ok1Swn/GvtnH5k4TLue4kNfxoFoprRQv1TzOb8cAIu3+ZD7oD/Hm7XuxzqRUNDtdkuLiTmW5tFxceBXlnXgQTAORSMt2oGezUJJJrK9dFWdEH7Ik4dB29LiESeUEJXd7/dAT3L+1ivlCHr8NEzutXTBvbJPPSdO/AH5wysChwM/1HzCGlmAzOrKxu2eCud6Z2Jke2MwThpUXL6Nn2ZAVFTlNw70bK0iRnGAq9qwHtOmTRpsx1NsHyKRVnNPnoMoK9kc2BjbD4vk5JGV5NkBoEPM4FFnCteJFWOS4ntHEfphQyKaFTWFLw704AJ26ZFx/ZEEi3YyY0O1Dmr4EKTUHA8hUnS6siI0DEHLYog+b28RCRuNXR/iQUpPUEQ+NVht6Lodnjx+GXYgDSFRnq97Ed2pXSlXhUSeGhxYc5sKlNXM5DGLR2TMwfZVPAIi+otGNWy1fEZUKeo4qc4ysI+F8VksLIJfYcD9QYgB/DNPMptWBlsnBIS86xmDMTBo/PWd0LB6VZfdEbJT3V4ABAA5HIzlv9dtdAAAAAElFTkSuQmCC", "jpg": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmlJREFUeNpsU8luUlEY/s4dmMpkWxRopGJNNbiwhk1tItbGtXHr0hcwmvgOdWld6Bu4coXumtREE3ZKu8FgOlC1kIoXtC3jPfdc/8PUIpzkBM7wf+f/hsts24YczuerGUc0moBlYTAYA+i8sbdXtAzjITRtq39kr73s/Gr9DTUYPOeamwvYnHdrdR0SnDebuCbswJGqpX+Uf92Hqm7hzFAG/4TgNr1uCwEJ0trcBC8U0Kb1/PQkHt9JxSLnL6TB+Y2zAIMOJBGLXmtsbEAYBsx8HnqCGKVScAX8uHf5EpqmGXv18VO6VDEe0PXsKABN8+AAgiabmYFNNJTDQ2RUFc8+Z9G0OPR4PKYwvKari0MAgiY/OQGCAajhMNR4nDZMaInrKBGl70SPMScck1NQG3X/CAWLE3/dAWV5hRRVIJxOWNksrP19sFgMqqAebUGYHMI6teq0A9oTVAhqu2sfbYYjsL7lCZ3683gA70T3TK7/B4BNoO020GwB9TpwfAz8LgMtWn/NkV8EHgoB81c7nYwCyBZlEVkHcqMTKFnkmehJTOPvEfCnKi0fAyADJKfXC/h83TaZTJjaa5lANLpOFqAXtlEAorAwO9u5syT5UxLfU0e3o1FMu1x4u7ODYq02BKAMAVSrSNLrK1MhLPj8mNF0vFm+C1ZvwKBwXXE4AGn1WAASazESwUW3BzUSMeJ2o1Aq4sPurvQYSRLwlhRR6mSaYyi0WlpAJrFRx3ouh5/lMt5lv8BLwXp0M4lSpYL17e2uK5wP6lj/c2ZPn2RI+YT8fDvqoyegVLyfG5kBKaQQOfvF2pLc+ifAABiQH3PEc1i/AAAAAElFTkSuQmCC", "js": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RUQ5ODY5Q0NGMTE4MTFFMTlDRjlDN0VBQTY3QTk0MTEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RUQ5ODY5Q0RGMTE4MTFFMTlDRjlDN0VBQTY3QTk0MTEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFRDk4NjlDQUYxMTgxMUUxOUNGOUM3RUFBNjdBOTQxMSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFRDk4NjlDQkYxMTgxMUUxOUNGOUM3RUFBNjdBOTQxMSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoT8zQ8AAAJdSURBVHjadFNbTxNREP52t7S0bktbKFAvTUVaw60YqkExUTD6oD74qC/yD/wp/gh885XEEI0RAyYQUiMpIBGMkYR6o23abi+73e2uc04v1LROMtnZPTPffvPNHMGyLDB7sbJ2ciUSli3U35smkK9t7x9v7n2dD/g8KUkUwWqeP3vKz23NxJGzgwOx0RC6mSgIo+WKuvP56MeUzy2nJEk8PWsGJVVTuhWbpgmHw47FB7d98Wg4mVWK52o1sxOg3Va3PmFp+Q2PdUquaFUM9/vw+O6cP3bxwm46Xwh1ALR3/vL1e+hGjcc9koScUsTSq3coVDQsXJ3wzo5HEs3clgZNMTVdx1T0Ep7cn6//QRQwMhzA6uZHLD5cIFEFSKIU+G8LK+tb0KsGZKcTJoEyP08AbpcLy6sbPKdQrigdAGaDwWxsDH1uGbliCYIgcM8WFPg8Mq5Pjzdyu4jYbCE44EepXMHuwXe+A8x3KKYxYsjvbUzmlPGpBmYdgI1oYjSMbL4Ao1YXMkcM2Dd2xnbAamPQAqg1GORLZdycmYTdJqFKk2DPR3fmwI4zBDrg9RADqxPAbPBif2WTSB584/3/TGegEOit+DRcvQ4OZJi1LgwIQKVCg2i6nb1I7H3Br3QWqT9pBAP9uDY5xjdSM3RqxeoUkfVnEOW8UkLykERTNXjkM7h3Iw6NNvHw6JjuhAhVrba0+QeALozcI9nQR0VvNxJc/ZmxCNGvIBQcpDG6udA22kyW29HC72wu8yG579ZoiSYuR/ly2+y9CA4NceWLmo717T1i5ULqJNtapL8CDACskxPFZRxLwQAAAABJRU5ErkJggg==", "key": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlZJREFUeNpsU11PE0EUPbM7u/2AtJUWU6qiiSYYo5EmmPDCD9AH46sx8cEnja/+CB989z+Y+MKPgMiDsYQACcbaWBBogYD92t2Zud7ZlQZsbzKZ3bl3zj3n3IwgItjYeDO3MlWme0bjUth8e8/fO2tHzx3XqUEk50uft+Ndnhdmc3SlfNPkVZT8Cy600DoIISvVfKYtlvfX1p66XmoIYsMZdjJQWvEFbbsC/S5g2QhSkKUK7rx6OzvzqLpsovAhaAxA3DUBQn2TUFsl7KwTfm4Z9DoO5LW7uPXi9Wxpfn7ZKF09vyPxX2iWcNRkKGZz0mQWKoNs8AVB6x1yRY2pYnc2LLofuXTxMgAlmlXIfngCxNxEzM+DPv6NQa2BygLgZyX6JT83ngHTN5GAL0WSoUQkSQnXkyBh/k0GegTAaldM20sTKvet+yyhIZApECamL0jUSe3oFChx3TopM4TeEQP2gc6BgGIwb4KGNXRhCkMGxgg2kJeybRiZM45D8W61qEAknSmpHStBhywu0nFVupSCTAcM4ECwqapv+NQ6LS9JGALoMIIoPYDjZiEL1xHtbyO39AQUDaA7R1AH23DSeSA4hv5RG/VAhxomPYP8sw9A4TaC9iHkjUWmrtGvbyC18BLe3GP0m3WW4I5hEBEnPIStXzyuFIxb4EkMEJ79Qa/xHbKxCdM7xeCwzUZOjgEwnuzt7qLz6T3cySmQP43uzjeIiTJM6io6W19B/NLCKMVGCzkCoLR/0lrfOI2fNy/huKC1FTsK/rbGNeMRC8dHpHByfu+vAAMAL/0jvAVZQl0AAAAASUVORK5CYII=", "less": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RjZERjZENTJGMTE4MTFFMUIwOEVERjQ5MTZEMkVBREUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RjZERjZENTNGMTE4MTFFMUIwOEVERjQ5MTZEMkVBREUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGNkRGNkQ1MEYxMTgxMUUxQjA4RURGNDkxNkQyRUFERSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGNkRGNkQ1MUYxMTgxMUUxQjA4RURGNDkxNkQyRUFERSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pl1w97IAAAJhSURBVHjahJNLbxJRFMf/wPAIMIxMkUI7tS0VYqlGDLGhjdKkqyZ24cJFN925de+XcONHaHRj4k7TND6SGo1VWwmp2kSLhlqMDbQ87gzPYcY7k4GgoJ6bmdw598zvnvM/95pUVYVma+svcovx8yMnFZHAMJPJBJfDzq5vpX6+/vD5qo/z7DOMBdo/d26t6jFMJ3iY51jBz4M+LP6wxEw40Gy23qYzB3HO7fpmpZCOmfEfa7Xb4NxOrC4lvbPToe2yKE3K1PdPwNOtHdx79ESfq4qKkijB5/XgevIyHxEC24USmewDqD2ABxubaLRkfW6zMqjWGlh7/ByyAtxYnOPnL0Q2+gGGmKRaw8zUBJaTiS5QOO1FJnuIAM8hciaIWHgi8NcSNt+loVDY8JBXh2ojJAR1HbTSNFMUpV8Dxcjg0nSYBrtBxdLbqI1iheCUh9XXNGurAwCdEkb9QyBSFam9TDfoPZ1LUg1BH28IiwEARTVAQOzcFKRaHZpLoa9avY6L1Gfs0c32t4PU6W2lWsV8LAorw0Cs1nXftYWE3qZGqwWHzYp2zzlgetuolVFvtiDLbRRKFTAWCxx2G/KlMtXFhWPqOzsWHJwBx7rxKv2R7mwFz3lw9/5DLC/M4Us2RwV0g3U58XJnF7dvrsBOoX0Abbej/DFKRMKI30fTVGC32WA2m5H9cQQvhYi0vE/7Wdgczn6ARA9QPBrBszcp/XvpyqxebzQ0Tlsq6llxLhe9bD4cFMr9XdjLHpLv+SLGBYHAYiVu1kNOpAaRTWbCejgiw0zGhFGSK1aw+zXbvfK/BBgAPwADAs5GpGsAAAAASUVORK5CYII=", "mid": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnhJREFUeNpsU01PE1EUPdOZKWUotKUKFLEWkQ1EASGGxGBi4sIVrt27IixN/Cn+CxfVnQsXJiz8IAoqRBGEaMUUWzofnXkz781436QDkjKTyXuZe96595x3rxJFEeTzaKW6dmdpfIoxjuRRFECGn7/4Utvarj/syWgflU5s891qvGoJePJasfBgeSpnW+yEIJVS4DEBx3FzGT2qfvh0tJxOE4mCU0yy8X3BLdODRQTJZ5oMzYaD0UuDePzkbnnx1mjV9/lMp+izBKEIwQMOzvnJGoYhhBDgFKtMjmBl9XZ54WapSjLnknMnEkQYgflCVhKXLt+/dRMy2d5OHdVnPoxeHUtLV8u2w5/S78UzBJwLMC8gAsosIqy9/ga37WNmvgKVKmEkb7JSwI3pIdRq1kBXBZJAUKkb6wd49fIzbJthdn6cIhE0XUWbyP4cmshmdZAE0eUBD6gCN0DtZwM7Xw+RUlVEJCui7CmyPaS94zC06ZMedREERNA6djBWHsS9+9fRS3p9AraOXbhELMlUQju2G2O7JAQENk0XhpHG3MIVlEZzaDbdOKO8jWy/TraGsMmL4L8KTgnIfcfy4JBWeQNp0j10MQtB4EJOg6qFMI/bEH3pGNtF4LOAjHMxO1dGvW4jXzDi7Iw60TB0jJRyONhv4MdunbDneMA6BMPDA6iMFzExcQH9AxkUiwby+QzevtnF2OU8lBT1i8fOa2UO1/FwdGTHE2STHM/14+vlPOz0RxibKPfn9AHXZHBzYx866ZdTKkuVndhHuqenS1h/v4ffvxqyvbUuAtPizZ0Dp7X1fTs+FA9cMnWd4ZG90NOjomVFzeTcPwEGACDGeYddZX86AAAAAElFTkSuQmCC", "mp3": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnxJREFUeNp0U89PE0EU/ra7XWxpSsFYIbVQf9REFBHkYBRIPJh4wrN3DsZ4MPGP8b/wUCIHEw5EY0w04o9ILcREGmwVgaXbbXdnd2bXNxPahGyczebtzrz3ve99740WRRHkWn5cebu4cH6SMY7e0jRAHr9c3WxsVvcemmbys9yT6+uHJ8oaPefypdPDD5Ymh5w26wMkEho8JtDtuEOZFCrvN/4uJZNGH0T59D58X/C27aFNAL3Xthmsww5GCyN4+uzu+OLtQsUPxPQx6ZMAoQjBAw7O+bEVCMMQgqygs+LFs1h+dGd8bna0QmXO9OL6JYgwAvOFZKKoy3V44CgNfv7Yx8oLH+lUEgvzF8Ydhz+n41snAGRG5gUEwClzhHdvttFxfNyYK0EnJozKK5eGcf1qHo1GOxtjwI+pfvm4g/W1qtJgerYE2SXJSIL9+W0jk0mCShAxDXgQKgbNXxZq35vQKCiKQkSUXdc1+gcch1FHGPmKuIgBCdc66qJQHMG9+1NIpUylxxHtuW6gEiTIu+N4yjdWgty0yTmdNjFzcwKjY0MU7MLt+IjoSad16FoIx3b/A0DZ7FYXnsdpAjUMDOjI5zPgfoBsRodhhGhZHfBBU/nGAGRtxWIOg5lT2NtrI5dL0SB5KJzLodloqXaOEatPGztKq5gG3S5DNjuAK5NjKJfPYKI0okBkSdemCiSgS/rkQNLSePtxBj4LSCwfFtE0krqqX7ZVMnu9XlMXy2l7ME0dzA3iANQyY6vWxC61UY41zTyNcYh6/QCNXQvzi5dR39nHVq1BUyuMGAARsF6tbbe4iKD1r7Om5iFBdmW1SsDflLiuB6sX90+AAQDHAW7dW0YnzgAAAABJRU5ErkJggg==", "mp4": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnBJREFUeNpsk99r01AUx79psrTrujVtbceabnZs4DYRHSoMh6Dgq77rn+AfoA/+If4Bok+C0CfxVRDBh+I2NqZzrpS1DVvbtU3SJPcm8SSlsJlecsn9dT73nO85V/B9H0H78OLdt/LDlQ1uMYybIAgI9n99OWxoe83nkiz9hDDae330JvxL48O51Xxm/enNtKPbVwAh0Ec6kYpXat9Pnl2GBC02HrjM5Y7h4P8+7FtIFVJ49OrxUnl7ucIdfhv+BIDv+fBcj7p/tXMPrs2RXVTw4OX2UnFTrXCbbY7tpMsA13FDSDAOQ4gJEGUJLs0PPh9CkESsPrmxxEz2lra3rnpAt3G6adgdQhBpmeLkFodNmsjpOPoXBrQTDcmFFNS7i3MRDzzPCw/vva8ikU+COQxm14BBhvJcHLGpGPTOAJxxeLbrRgAkYujBdH4G5oWJWXUW19YL4XqunAMFhnq1BqWYgaY1MAHASQOiU96zKzkU76mwehaOvx6h9uMv7KFN3RopL4oTAI4HRh4wSl399xla+00YbR3yrIzM9SzSqgJJnoKcklGrH08CcJjnBtLLCsSEGGpSWJvHtDKNoFippsJ0ulIsDDUCCATMlBQkNuahEyiZTcLsmFBKaQxaOk53TlHeKkM70AjAooCghBOk9sKtIvqtPqS4FBaRnJSRX8tj2DOh3lFB5Qw2ZNFK5LRo6w4sKt2ggAzywidAMN/9uIPSZglBLDO5FF3mRD3wHE9qVRvoHrUpfn+UEQK0/7ShtwboHJ6jdH8RZxSC57hSVETb7e5/2u0FxqPHJow+8iZ4lYY2QGu3idhIxO7Y7p8AAwALCGZKEPBGCgAAAABJRU5ErkJggg==", "mpg": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnxJREFUeNpsU0tPE1EU/ubRdlqmnUBboa0UeUQDiUGCC1+JmrhxoXt/gBvXJi74If4AV0Y3sNKF0YUaICqoIfjgVShEiGF4tDOdO/fOeOaSKtie5GZu7pzz3e/c7ztKGIaI4vn9p+/P3h4e4a6Pv6EoQBDiy7P5rc1P1Xt6XP8M5ejXo6UJ+dWbuemeTGdpvNdiNe9YvQLe4Bi4PmTpRmyq8m71rp74BxKF2twIHvAo+f/l1T2Yp0zceHizfOZa/xRnfBRhG4CQqAYioBWeXDyA8Di6ei1ceXC1XBwrTXHPH2vW6ccBBBMI6BsSUEQzakGL6xB0tvjyBxRNxdCtc2Xf8R9TyaWTDOg2TjfVdw6hqIoE9B2GxkEDWlLH7s4ette2kSp0oDRezrQwCIIA3oGHr0/mKMmE53qo23W4+w5S+Q5ohob9X3tgHgO8ULQACC7gMx9mKQP30EW6mEHpYi8xcJEdzMucjfkKcrTfmqmiFYBxCF/Id+gayKJwoQjHdrA5v4HK7Cq44KjZNWpagaqp7QACks0H9znW365ia24DzoEDozOJbH8eVtGShXHTwNracnsG7q6LzsEuaAlNPm9h7DSSVjLyCMkppDI+GS2StQWA1RlKo0X56n2X+6QHkmkDakxF9WMVqWyK+s/BrthYfvWz1Ug+zUDcjMPMm0h3pxEjFma3CbIuCud7oMc0LL1ZgmElpGJtW3B+15HIGNITrMYIlOH7i0U41NrInREylYbu4R5qQbQBaAh95fVKZCnpQCnb9DrWZyrRERS6NDeUw+yHaXh7rt4C4B8y+9vkwn7kwKNRpDoa9aiFKBYnF+RcREqQ2e1m3R8BBgAy9kz9ysCE6QAAAABJRU5ErkJggg==", "odf": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAi5JREFUeNp0UktrU0EU/mbu3FfE1KRRUpWYheALNBURUVy7cy9UkO6KW/+Lbt0IPsFui4gLBbUqFaUuXETUKCYa0jS5yZ2ZO557b5MmTXpgmDPnfOc7jznMGINYPi0de5UvmpORxpjE/kbNqW005DVu8TWw1H758ZfkFgNgJmtyxSPRjJIj0QTW/RDiYGXGb7Dl32/eXrVsd0gSCx9miqC0ooCdp69g5Q/h6OLN0ty5ynIkwzMwUwh2FwMdcbDiCZQXlkqFCpEoPT/wih1YjLInANcD+/Ua9bu3wJlGvrBZCmet2+S6ME5g4oGlZ9A/I70XCDhhDexPNTFmswJBwcnuXkF86VSNZxVu0ukLSGnBcqlnN4HoCQIaIuIv7LUooMOgQ7q75LAAb59B9gCBHSKgqemRr94mMKmD24CfM8nb7THYGQNLpAkUkcb66JyGBFFEWRVL57gFEH5qj8Lxwca2qS3EZaugmzAw24dR/XQgwtsCSBjPIdWbUoE2UJLBnV8Ac/ciWHsK9/glWLnD6K2vgPszsOdOQdfeQ1c/ThKoTgDn9A3KUED/52d45xchZsvorD6Bf/Z60riV3Q9Z/0bbGU1uopYGkfERSQ3VbsMwl0qlqoIARmSoPYXWy0dor79LfBMEEd8jGs/uQ3Yl7PJFNFbuEXiV2riCf88fovXhBbo/vqP3t02/ZYmJFqTkzY160Go9uEMbFK8hR/NrdXtFuUVmnmySVGgO4v4LMAAjRgmO+SJJiQAAAABJRU5ErkJggg==", "ods": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAetJREFUeNqMUj1IHEEU/i7u7Z23e8tGgneGQPw3hZDkkhQiSuwMQREba4uUgpVlCrvEQhurkCoWqcQQ0oTAaYKNqJygGEwgHCSB6Knn7eXcdX/GmdHVPWYFP3gw78173/vmvYkQQsAwNvckq96UnyIEh7/d4t7uUd/8y+85P+bXSX4grkhI6nJYPW7LrXpBK2YxiSoShhu4Buq1NPofDeqdrZ3Z4cl7D4J3UtA5VyVAlmJoru9Af2ZAp1lcCQ3nqgiuKmbY3l/BH+MnHM9GVLP0Ww3KNA33CQoQQnL834Fj74PUGkANEIkCSSsa8gQqgYTIcB0PVsXB318GInRiCVWCkpRFAs+j5gKlA4t29Ggh4d0t04FKt9PQqF4UFgumSEA8ApeaElilWbYRVy/lsns/N1QBkxtENF4jxPxcgcB1CZVOrvMteK5IQDtJJIGh++PcX9iYwWjXK37+vP0WdYk0Ht99jtX8JywWFkQChw4tc+cZcvlF7rMze+ubbxN40fMalRMDP/6twaiUeK7wlZ0TD0a5hLTWxo2d45KKprqHKJslTsy209s2wnMFBTYNZjc/oLt9gPvLOx+hxVJIKS2YW5pCbSyJTGMK775O8VyBwDJd2LTDl/X5i8v3S7NVw9vJb51tITDEUwEGANCx2/rXEEFFAAAAAElFTkSuQmCC", "odt": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAepJREFUeNqMkz1II1EQx/+7Ca6JkqyYiJ8cKEpAQbBQFDm0sVOsFBS9wt5KOTgEG5twxVlZ+XEnKNiIghYKxx5nwEpIIXaiSAgKGmMi0d23u8+3T7OaZJEMLG9mmPnN/w1vBUopLPNNhRWXHOyDg0nx82TiJtZPlPVoNpftc2cTotcHtxx06kdXpSQ/BvzKESZzIDmAz6y+NojOjpDMZiqRPIgNoFyWM8DrKUV7axO+gcp4g7AzmquAdVNqOgL2z2I4id1B0wgeygOyt/rLL5buLwAIDgA9dY+L+DkuDQOCrkMgBsRglcMOqAGwIstMg8AkGsuZMNUMRMkLqE+QGloglvlA7uIOAKvZajR0qJkUj/XHe0BTIclVKKlrfKsj9qA8gA6wqSJzPaXlr7ky//tdLEUfawsBjExUFGVWbT7AxSa42H2LMfODmvd3wKb7RAMLYwM8nts8xJ/pEe7/3PmP2eGv3D+9usb35W0bINoA7RmjXSHsH0f5Z/mUSZ0Ir2JmsBtD80s8/rGyzWsLFTD5yUQCbfUBHl9d38LvkdDTXIuHVBo0k+bbt06qO+yAPGXwe/cA4wO9PN44jKDG70GougIzi2tQ00ms7/3lpwnBBgjZ37Kkd1Shht5XzBIFl/ufFtniT/lFgAEAU//g6kvdGBMAAAAASUVORK5CYII=", "otp": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAcJJREFUeNqMkssvA1EUxr+ZjkdbrfFKVD12ErYSRELY2fkH+BMsLcQaSwsrSzZi47EjJEQkEhYkFlhYSVtFpdqOqpk717l3jKZmiC+5mZlzv/s795wzCuccQncz3YeRBj4KHz0/RrOZe2NsZPP20o255zQ3EAxzEAC+6uzTw13G4TFQAakA/CWtIYbY0KBOrx7IvwDQqlHV1o3YxKTOvyAUvfQCfqmA3e4ikyS/zRAKvOot7eoSHEgZIHrCfQAfBqBaKQQDKScQAExd8emBANg+2U2CvNMkkgSqBmrCxFB8mujeoJBWwEqARcssKTAJEGrmaGrjqK1zvNknH4BtyxKl2VUpRxmj5W+x73q9AEaZrR/ND1EJluIpS3i9JQiA+a+hSq8HwJjTsLrRaWitPTCOlhEZn5N75sM1qigmlN+dB3u++Qao5W4TtbEXXIsiszGL4PA00itTsu6XnQWo0TjMTAJqfMDx/ryBJcaVzSNSH4fW0Q+rkIf5rsjRiid7yyN7uoXS3Zn0egE0NiORAN9bQ017D1Lri7CLlP2EDr3Rf7C/itzV2bfXA/igLDaRixfngFhSCooH2xVPCWBlwKcAAwBX1suA6te+hAAAAABJRU5ErkJggg==", "ots": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAfZJREFUeNqMUk1rE1EUPS8zmabJdDKB2glEwY9ExJYiBUEQpV25qgtBXfgbpEtXuujKf+AfEKRddOdOGHClbYVCvyKWaijT2mhjphk7Sd7Me76ZONp0EsiBYWbOvfe88+69hHOOAE9f3zTVnDKNHvhlsfqPw/rM0ovyWsRFdXJEpDIyRnSlVz0KSkmvabaJeXSJBEhgAJzTDNybmtUnS5Pmg/lrN07H5NM/f13FoMgpXDSuhiIiK3Qi6LUugX7FAbaPPsJqfIHHKCStqRsXVFPQuZgD9BBxjikSiRq41AAkgCQBzVf0+BWEBX7GBm0xgHHUqk1UbBuEcIydzyCZlOI9YEGuDxwduCCitS3Xh3viCZ4jrcq4PJ6DLHd67tjtuAAXib54dCPVEfQ5XIcik/0/2iDeOYz3ceCxrisMi904y0XiMQFfkB7lg6xFHwFxEqUMV0anUNBLWKm8xd3i4zBWOzmASx0UsiW831mA59Xjm+h7HCOygduXHqJatzA7Poey9QnXjTuoVD/j/sRcmDOWLgqnLC5A2wwST+Pn8T629lahSCo291bwu9XA7vcy3m2+gTaUR14thrk9BXasbdiOjSe3nmPpwys0xSi/HpbDd3bIQC6dx/q3ZbRb/j8BEi3Po5cTJpHI9CBNDEa++GyDBN9/BBgAwfDlCVUQaNAAAAAASUVORK5CYII=", "ott": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdFJREFUeNqMU89r02AYfpJ0iVm7EqhVOxw7dDBEdpiCE1RoEZRddvUgbIex/Rs7eehppyF4LOzQu4MxwYp0HgShIuwwUVSCVtl0s13afl+SzzcpyZYmyF74eN583/s+PO+PSEIIeJZdrtQVI19Cgmk/Ph39bpllXq82g7sgLxVcyKNZpIx8Uj5u5zSjc9Gov8ZihCRC8D+7On4JczevGeTGSEIC4ctKJtB1DTPXi1iCCEkIm1EFlC2Em0iwtWfinXkIzjiO0jljtDC5TtflGIGUQMB+mfja/oPv2Rx9MMjpMdJxOXyXTwkcwIkewfqQ1QtQNB385zcI14FrtQexsSb6SRysZ4Fbf+F6eHwATc9gJGNAm5iCTL5n/LCVRGADNoeaGoHqyaXj5gqQlTODovcwNk5Aj6wXqV8eCo7EDhMonEHpW+dZC7gUG98D3geo7vkb01h9cAvPdt76OGy1xntUd3bjUxAk3+l2sHJ/FgtrT0MUJNfDSm0bjQ/72Hzxxo+NK+h3B7XRNO4UrwymQtMIkdTBU0m+sBOayLsn8Ka78mQDjx/e87HXPkb1+UsfP37+AmZ1fP/suknBb6nefVQXjl06TxMlJfWKNWr+Kv8TYAAkUueexJF47QAAAABJRU5ErkJggg==", "pdf": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmhJREFUeNp0U0trU0EYPTP35qYxaW6TlDapNKWGbgo2FkF8rARB6rboXusf0F/hyq2U4krFqugqSBeuAyL4SERBstHa0iR9JKZJ7mvu+M0tqZGkH3x8987jzDnnm2FSSqh4ns0VU1ybFzj674Wa3uWiWbfsFQb+jrGj8Xvbm0HlvYVRxhJprpmTlGmum+OMm5uNPZNbtjk3l82ey8++8oW4Jv/H/wdA456g2kvH99FyHNiuAz2dwflbN8YW8zMK5Go/CMfQkAhpGsyQgRCtlpE4jIULyC9fHzu7MPPEl/5ib6WOE0JJNRiHHg6j86mMjw/2gG4bkbY4PW4Yj2j64skA5FTHdaEMPiAJszt1sK0d4suJmY4k0+IDDGRfqmh0u5gejQc+fG8eYCIahRQCEfgQnIuhEkgtONE+dGxYxEDj1DhiEycZ+1YXdUpHCqTMJIYyEES5aXXQsi2kYlGEia5GtHVKn+amPBeCutPgfLALPuVu+xDVPw2EQyFEjHDghbpYNm1yKVVnYjTOerepn4E6XQmLGSPkPkOXWATMSDcjQEkAaqOu6+i/rccALtFL53LI3r0Nq1ZD4/MXZJaWYFer+PXiJc6s3IEgY3+uPYZHTAcAHM+DTE8gnM1CSyaCulv+GrRy8uYyElcu4XfhLVpkpNtn/DGA5Uu0abFH36WnzzCayWAkmYJvWeCkfb9SwY+NDbSoOx4bYqJF8rZqVRRXV/HhzWtUSmWwmWl0RmN4v76OUqGASrmMOkntSHF8MOs954dT08W248wzYsJDOujRBAaqqikTpRo/qqd0/dv97c3Lat9fAQYA4z8bX9nTsb8AAAAASUVORK5CYII=", "php": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAhNJREFUeNqMkltrE0EUx//ZbDaXNrvZzdIkbYOXGgxYQlCK2IIY6EufxGdB8Av44AdR8AP44JOPBR+Ego0PClUKTTXQSmkTYtOkmubSJrQ1e3H2yJSEJNIDs3PmP+f89pyZcdm2DcdWvn7LzkxFHmCIra7nm9ulg8yLZ09yXON55Dgjt1PM2iPs0+aW/frdh8bzV2/SvQBnCLiEqcFxLKSSodlrU9leiGPihWePBkgeEZO6ShC2dCAZNuf6ADb+ldQ5PUPx4BCFcgXfdwq4Ph1Dtd5CZi4Nw7SQiMdCXkl6yVIy/QBWgcU+yx/XsLK2cdHndqlK/lZxH/OpJO7fnsWY3z/YAq+g0TmHpoUH2vB5PXi8RD9Fo10aAmDJTgWyIuOupmK38rsPcOvqJO33XWEvwLJsmKxHRVEwf/MKWl/yUMf8mIloWN8rw+sP0D6PHQmYuzGNgCRiMZVA17IQV4OIaTI8buH/AJMFd02Tkp05PO4jnWvc57EDAINt7u1X8Pb9KgI+Lxbv3cFR8xjx6AQ+b+Txs/qL9KePlih2CMBCq92hg2qzt1AoV7H5YxdhdqhHzRbgcpFeqdUplpvQW4FhmAixZ/sws4BoWCM/qmsE5XqE3dDQCrqGAYWdejqZgK6GUD8+IV9VghBFN1RZJv3sT5diBwC15gncggCPJKF0WCPN8dun55jQdVpz3Ynl9leAAQAJhiGatD9AOgAAAABJRU5ErkJggg==", "png": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmtJREFUeNpsU9tOE1EUXXPp0CAUWmJbC04xBANNTF+kKhG8fID6aqL/gPEj9E0lIf6Dj30HL03wxQtVIC0QKrWxNG1Dk9Z2Oj1zxn1m0oIZTnIyZ8/ee+211z5Hsm0bYg29fLGpxWIJWBYGS5IA8ncKhT9Wvf4Yqprtu+w3q85X7f9QxseD/pmZMZsxN9fnc5JNw0ACGGv6tPSvyvEDKEoWZ5Y8OHHObKpucw4B0t3agnl4CJPs2YkQVu4s61ORaBqMJc8CDBiIRhhVM9bXYdVqYAcH8M3NgS0tQQsFcfdKHEbvlr6WyaR/V6uPKPy7B4DT7lUq4MUipMlJ2MPDUKtVfKZ2nn/5BoNbkONxXeb8LYXe/A9AJLNWCxgdhZJagDI9DZg9qIkEytRSkdqTSFQtGILSbgc8LViM+tc0yPfukzIyOJ359k9YR0eQdB2KmBbpwXoM3Dod1SkD+scpEapCI5DdpsJhIJcjajQZagcjI+5oLe4VkeQnyiZgdIH2X6BJ7dSqQLfrggjw0AQwP+/GegCIHppNoFAgEMO1RZKo7BQgRi3yN05cnwdA0BQMAgF3C6pnbuNg92M9AFT1diSCh6kb+FGvo2MxnBB9ocZxp4Mns1cde213B81e7xwAcl4jkaa0IUSjUdLJwkL0Ej6VSvArCt7l81iku6GrKnYEU89VJlSJRmR0Dax+fI9suYxSo4HlWIw6M3FBlnD9YhiXabyOsOeIqG7TzDeIYo6EDGp+ZPb2kKKqH8h+mkxiI5/D1/19J3bwYPvPWXq2skkiJVxesqt0XzghpKM8nRVV2Lv2q9eLIvSfAAMAaacnllcFBmYAAAAASUVORK5CYII=", "ppt": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkhJREFUeNpsU11rE0EUPTM7ySZpmzT9DNamWAtFfSiCigr+AxF9zKtv/hvf/Aki+FEi6ov4ItWHPGiwiBUKoUqqTUJImmR3M7Mz3t0kNe1m4LIwc+65595zlxljEJzdR5uf5nLmsvZx6gSvtd9W9bjhF7jg5dH9nRc/wq8YXaTSJptb0xklx7IZoKUEz1zJ2DUU69/37vFYrDxegJ9U0lC+AoIIVGg9CL+vIObP48KDQn7x0sWiVnJrnEDg7KGk+i/Ac4iUM/R7BsmrSSxtXMfa3X7el8+Kjf3KfUJ+iRJQw4w0Tc8BRyWGRAZY3rBR/VlC+XED2ayDhZyXl03+hNA3TxNQshlGLAnE44zCIL1goXZwiMNvB1i6zbC0KuAsxNITWwgNMYPeLVJiFEO9ArjHAivrAjNzBr4f4vwIgdGD4YUACsZCE8AtYGWT5jCsGQw5wEYJzP/pj5RwYTA1b07eQmfZ8P0sgdaM2FlYwWkMgMpl6NQAO33GKM0wsQWflkh1uqGVmVWblsiDkQyqxwfag35SqcktaEWTUTHYNx4iGU/C29+BvX4Lpu/C7zYgFjegSY63WySsHyXwpYHU00ieu0bAOuJbBTArBkiXKiaAmTzcvRJUV9E8rOgqBwqlY8ASs/AadbRLb8CzeTjVClqft6FdB17tL7yeCbFRBYoLr6vR/PiSEl5BZJaBD0/R2nkOZqfQ2fsKt+0SEQ+GLSIEUvJm+6jbah2+pS2aon+4g/afd4SYJVuA7vvXdC/IHQtSoTnK+yfAAIEaId1m+vudAAAAAElFTkSuQmCC", "psd": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAqxJREFUeNpsU01ME0EYfbtdKKWGtoItRWgJHApCBE2I0YuoiSaaeDJeOJh41YN3TfTixcRwMfEk8eDJGA+Eg0YTTRRMg02KKFooCBbTlkJLS7f7P+u3K9Xo8iWT3Zn55s173/uGM00TVlwZfzJztD92iKO5ouvQGQPHcQDN380vlDPr65fdLj4Oa41i9sFt+ytgN7o7woGOrqgvvpLBaF8vWj1NUAwGTVNRM3mf5vU/zaU+XySQuTqIFXz9hxmGLkoS7r+YxvVnrzGzlgXPDOzUZPT4m3Dt/KlIuH9oUjXYEHZZ/wOgGQZi4TZcGI5hLb+FO++TSOSKcLtcMA0dI0EPrp4+HtnfG5skiUecDGwQE2MjAwiGWlFVNDz+tIyCokJhPKYSX7Gdz2I01hOJdnY9rJ/7UwPGTEiqjtbmJtw4MYx78S/4Wa3h5UoOYwPdIOp2Xi/t18rlFgcDw6o+ydiWVRwOBnCpL0oOAMmNEhLZIgSeoxwGSWcERon/M9DoBknTIdNQNAMnO4PIVGpIFXcwndlA2OtGc4MAxml27p4AIulWSIa9QVadiYSoJxhqBJivKgh5ad3k9gaw6JdlDaqq7q5wINY4F22HaLHSDZQkBW72O9cBYFEviBIURQH7a7MN0uDisUW12ZZcaGlmdq4DwCqeTo1zNtZuW7hUqGIw7MNqSUS2ImNsKEpSdEwt5lGhfQdAkQBEoub3NNrDJfAIeBuRrcrY5xGQ2RFJAjl00I8PCckJUCB9q1URBnk38XEJEuk41tmGwZAf66s1VOh2keqwoUnYpFxHH4iKIixkN3HzVQKP3iQR/5GDKMuYmE3h+fx3MHqh1sMafztHLuiCg0FAk0uFdLqcpGY5QEXbTC/j7mIaVjc18DxufUtBJ/vcggs+3ijVz/0SYABsJHPUtu/OYwAAAABJRU5ErkJggg==", "py": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAlVJREFUeNpsUktvEmEUPTPzTUFmgJK2UqXQFG3pA6OBLrQxamJcaYwuu3Dp0l9iXLvVtRuDpgt3JIYaTVSaxtRHsJq2xEJBHgXmifebMhECXzKZme+ee+65516h2+2Cn2cb2VwyHl12//vP2/zOQaF4uD7GWN69e/LogfNm7kUsPBFaXYwHMeK0OlpQEJApHJTuykzK98dE98O0bLM/UNgr4v32Dj1fwSQRt9dSsfmZcMa0rIv9ODaqYrPVxuPnL1Cu1aEbJu7fvIZUIo4bqeVYRzcyv/8c3SPYpwECt/dmu4ON3Ed4TymI+hQc1ZqoE+F+uQLDsnHlwkKMscJTgl4eJOi9fxZLePNhGx6ZQRRFqH4VjZaGSv0Y6cQcJLpra0ZguIWegqDiw7lYBBZV6xiGk9DQDLzK5bEyF4Hi9VLMsoYI7J6Es5PjeHjnOl5ubqHaaJGBEkzbxplQAKIgDmBHekDTgI+qKKqKLvNApgmEgyquLs1CoFn2Y4cIeLJpkjoCLkWnUSIF3JxISIUsCjAoxhWNJLBIJs3YeXj/08oYZkOKY65HllE/bkMmY504YUd40HUq2JSSyW6iVPmLiXE/ZMYQCU+hXK3h1toqdNN0sEObyKtqtDQ6kXDwcadDS2TBryp4nX2HxXjsJK6bDnZIAZem6Tp5YMMmicn5OC4lztNWtvB9cg+hQABtWjKL2jH/T3GgBcYDXEE6mcDM6SlaJAGMWkivLBC54ZgniZaDHSI4rNSqn7/t1vgkGJPwZXffSeCjk2iUWz9+nSTQN8e6ef8EGAClUi/qoiOc3wAAAABJRU5ErkJggg==", "qt": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnVJREFUeNpsU8tu00AUPU5sp41NkzRxpfSZqi0VIIQqEEJUZYXECvbwCWxYsuBD+ABUFrDrCnWBQEJdIWigBSr6pqRJ1ebhxrE9M7aZmSrQ4o505fHMnXPPPWdGiaIIYrx89GKpNDdxmXkU3aEoCsT+z8W1Sm21+jCpJctQTvaerj+TX7WbnJ+0cpfuX8mQtn8GgJ4AZtIFY2Hz3foDVRcgyt+cRHcS0IARh+D/8G0PpmVi7smd0dLs+AIjwTVEiANEYYQwCHlEZyJgIQKfoX84g9uPZ0cHZ4YWmE9nuufU0wABCSSImMsWEgqSuoqA/39/swZFTWLy7vQo7dDnfPvWWQa8GuOV3IYLJXmyzDzG2/ChZ3pwbHdQ267BKJoYuj7SF2MQhiF8LuDK/Gf0DKTBKINz1IbTbEMzU1ANDW7LAfEIQKIgBsBFlAx6LYOz6MAcvoDCtAVGGPKlAiIu/F55F33FDA6W93EOAOMaMOl7biKPwRtD8Foetj5sYPfTDtxjl1f3Ubo5jkQieQ4ACSUD2iE4XDpAdbUiW9D7UsiN9WNkZgxajwbd0LGzt3keAJPUc1N5SVeENT0Ao2BKV6QzwlZeRBSKAYhe3aYHcZWn7l1EfjyPypcK9LQGa8qCvW9j9+MvaasQOHaRhGWdhsNLR8hwodYWf6B4tYjDjSOovRqq32rSYq/lytw4A77o1V2ERiAtzY5kkUrrsH+3QF2KY87ArTtQuQ6nAf4x6FCV1D001+vYersBM2vA4y1Rm2D7/Rac/TZIw4d/6MrcGAPf9htN0miJh7Lyuoyvr8rQeP9iVJcrSKgJ+TrFcyYebXTP/RFgAFQobmIOBxbsAAAAAElFTkSuQmCC", "rar": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnpJREFUeNpsUktPE1EU/u68OgylZXi0hZACQU1LEKKCMcat7jTRnQsXxsQtv4E/4M74P1iriUaNCw1FgxpjCJQKKAU60+m8mJnrmSll4XCTc8+959zz3e88GOcc8aq9evChOHl/lvMoubvWX/z4+BwTlbvw7bXdg8b7h6LE1gGW+O88CRMt4XTlR6/rYxce5Xv3jlHH19fPkBu+gWy5mlcFb3Wn/umeKOEMJF5C7xCFbtA9dRXjFoYKGiTRAlPGUV1aKU9O3VwNQ74A8DQAIZxqAuAhBPIMFYpQVAVB4CPSZjEzv1weH5tbDQN+JQ2Abu488mnzIbAAA3o/VK2PwDJo7r5Fy7ZRuvi4PFS6+qIXdVYD8Jg6BUcuOD8BozSLlRWyicgVKkTMQWwUlFF0Ooe5FIPk57BD7G0SiywyjD8bCDyHsOkeeeR3SUxEkROmU6BfQYFJMHfhWXV8efkUrb13VPMTsrcTQSzxZ/+n0GVA6EGbSGdgG9vo15fg2nFgbO8k70SRdd+mahDT81vUxTZRlJBRMsjq89C0EXCvSf7TIBZ136YZUJEiE7LgJ2dN01BZuE0dkIhxE7KcQTK1QUj+cwAEyrPZ+IydzRoyah+mLy2isbWBweESJEnB9q+1RM9Ub9GQOWkABg8HjRr2d9Yh0hTlBlRsfn+D4vg0BvUC9rZqECUJuk7Tzr1zahCYlB6HJAREPwfbbMBzLBzsbUKVI0qBgQkc+SxgWUYaIAqOpKwKXJ6bgGlaaDV/YvHaFNrtDsKTfVSrJeqIg/bRNwjclFIALeP3saybhu8SC4VBHwnhBXXIKocYRXD9QzBi4Xgchmkd9+L+CTAAMqwy+ZzluBgAAAAASUVORK5CYII=", "rb": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAixJREFUeNqEUktvElEU/mag5f2yJhXLwxIt0kiqsVEXujP+A925cu1Pce3WtXVtYuJCF7KtTY0NrVQIpRVKeXTkMcO9F8+9ZVooJJ5kcmbmfOe733fO1YbDIWS8+/g1dycVX7W/xyO3vdsuVKqvnE7HZ230783rlyo7bVBicSGyfjsVwozomVbIPe/c+FmsPHfoRKJd1HT7hXHBZjVbA4aA14NnD9bC2VR8gwuxPi5Sx39Cp+M0XUP0ahhP1jLhW7HFD4zze3b93ILtXYyyVKlR8/5hFbnvO9gtlrGSjOF+OpXkYviWyo8mCS4R6bqO4p86vm3v4fC4DrPfw4unj1XN6JvBaQtjChzUXK43sVU4wNFJA43Tv/B73edQwTmfIhAjCVL6UdPAj1IVFSKhCdAcAI9rnjBiAjtBYEu3GEeh1sKJ0YXR68sVIujzIhzwY8DEBHZqiLRKkicQDfvABxaiQTc4Y/C65pCOXwcjcmlvJgHtlwi4epYifiQWgmoLZwPW6HQG07LgcOgKO0UglAKOTt/E+09fwAiUWU7QAE9xUK3jbvomsispZVHMVEDSZdHo9rCZ/4VIMKAu0XGjpU7d2S8hk0pCELHEzrjKnCQOYJoD+Dxu1RyiwUm5LaMDo9NFt2cqDLvY4oQFp/QpfT/MrmI5FkWebt+NpWto0j2QmQkOjZ9hpwhqjXZzM/+7LU+cc7lRrjXh8/lVLRK5ovLWXglOsiOxdt8/AQYAzv8qbmu6vgEAAAAASUVORK5CYII=", "rtf": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAe5JREFUeNqEU01PE0EYfnZmd5FSvgLYFuwWt9EgHyEaox68eDJevHvwJ/hTPHv1N/QgZ2NC4g3kUAQKFKGhjVKqRrvbnRlnht262FHfy+y8877PPM8z71pCCKh4/ebt+rJfXEz26Vjf2mnsN5rPKKWbVpx7+eK5Xu2kyMtNTd5d8MdhiJ9BOO7atFI9ajy1UyAqSPIRMR6ZmoNehNHMMB7fX/UWvEKFMbYKE8DfQnAhwRmmJkbx6M6S5+WmK2Evup2c9yUk2nnKA0XVcSiGXAe1k5beP1i+4RFCXqnPywB/AKVzK34RjHNYlgVKCH50w7EBBogbTa/AVM5SgBdn0gc2AMDjPsbFPz2xye9asweS6n+NTbG8BCCfUtLjff2WoVnVpAH6z6hMUtJE3EykYfpF4vUiL3QNS7FMeSAQRBHW3r1Hq91B+VoBQRji4+ExFsvz6Hz7jm7Yw5OH92AcJKW9G4SoHhzhy/lXbB98Qmm2oCXN5WawsV2TACEoJXqwTKOsb3BtR2ucmZxANpPB8JUhyPnHWDaDpfJ1eZFALzJJ4MKO5MEtv4TSXB7V/br8iQLMz+almRZWbvoo5q9qRlxwewCgeXbe3qrVO5ZkUD/9jJGRLPaOm6COi92TU1DbxYe9umRD0DrrtJO+XwIMABWp9nS+FgaoAAAAAElFTkSuQmCC", "sass": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDNDMTBBM0JGMTE5MTFFMTg3N0NFOTIyMTQ2QzhBNkQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDNDMTBBM0NGMTE5MTFFMTg3N0NFOTIyMTQ2QzhBNkQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowM0MxMEEzOUYxMTkxMUUxODc3Q0U5MjIxNDZDOEE2RCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowM0MxMEEzQUYxMTkxMUUxODc3Q0U5MjIxNDZDOEE2RCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Po72XUcAAAJcSURBVHjahFJdTxNBFD1bykc/ttvdtttWGgI0bYrUgDZoNYqRJ014kMRXHvwB/hQTH/wFhMREJfFBQxBjhMRIFEQSCAlQxKYGggiU3e3HbnfX2bFt1EU9k9m9mblz5p4zlzFNExYmpue/jmTSZw5PZAl1MAwDT0c7O72wvPdudeNakPNtOZ0tsM7cvzdOc5yN5LDAsTFRAJks/kC2PxFRVe39Si6f4byez62EpAEH/gNN18F53Ri/Ocxf7OtdLMpKT42s/ZPg1cISJp/P0tg0TBzLCoK8D7eHh4RkLLJ4cCz12AjMXwgez8yhqtVo3NbqRKlcxcSL16gZwJ2Ry8KVc8kZO0HdTKlURn+8G6PD2SZhLMQj96WAiMAh2RXFYKI78lcJcx9WYBCycICnpNbojUWpD5Y0C4Zh2D0w6hWc70uQZC+IWfQZrXF0IsHvY+meBd08haAhoVMMQFJKWF7PNZM+klhRyogGhbqxOIXAMOtEwGAqDqVcgbVkkE+5UsEAWavf0az2t0ZqvK2qabh6IU3joizDwTgwej1LdVfJXkdbK8mt2QkayO99A0/0trQ46I1lVcX+UREhnsP34yLp1AD1xibBMuntpzU8mJyi3Tc1O4+l9U06n7x8Q/8PHz1DrrALt8tlr0CrkbJMHTop9Sk5sLa1g8L+ARJdnShKClY3tunN69t5iGLYTlCtakjFY7gxNABdN3B37BaqqoYT8pyX0in4ORbRkIA46YlDRbUTbBZ2Jb/Pw4qiKFnapcpPo9pdbrg8DjAOBsFgELJmsGs7eWkkc5bu/xBgAHkWC6UPADTOAAAAAElFTkSuQmCC", "scss": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RkM4QjYyNDVGMTE4MTFFMTlBREZCNDNEM0ExMTk0MUIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RkM4QjYyNDZGMTE4MTFFMTlBREZCNDNEM0ExMTk0MUIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGQzhCNjI0M0YxMTgxMUUxOUFERkI0M0QzQTExOTQxQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGQzhCNjI0NEYxMTgxMUUxOUFERkI0M0QzQTExOTQxQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pkf1yeMAAAJbSURBVHjahFNdTxNBFD0tLULpB91uodVWPmorUIxo0VSiNSExMYYHE33l0Ud/in+C+OSjYgjRGDBRCKJIUkIEWi0WKlja0ul22+5219lJ26gLeiezuXvn7rnnnrlrUFUVms3Mvd2bjIyezRVLBA0zGAzo6jhjm1te+7EU37rFO+w7JlMbtG+ePJ5mOaZmci/nsPl6ONBtw18WDQc9tZq0sp7YjTisXV/NFKRpRvzHpHodDqsF03djzuvDg6vHJWFAprF/Arxe/oins6+YryoqCiUBvNOO+7FrXMjnWc0WyIAOQP0N4Nn8IqqSzPx2swllsYqZl28gK8DDyRvcxKXQvB6gISYpiwgH+jEVi7YAfW4nEqk0PJwDofNejAX7Pae2sPhhHQoF63U5Gai2Bn1epoPWmmaKoug1UBoMrgwHabIVVCx2jdrKFwm67TZ2plldPQGg2cK5HheIUMbaZqKV9In6giDCy3MNYXECgKI2gICxoQAEsQItpNCHWKngMo01arTY/jFIzbutShJuXh1Fm9FImYiM7tTtKOtbO+toN9Nc+fQ5SGUOIVYl7HzPIH2YRZ0y2KZ+sVzBHn2v1mpMGx0DTaR3nzfwfGEJdybGkdo/wEigDyvxLzg4yiESvojZhfd49OAeLJ2degaSLIPOO6vwgiYaaRErTRREEdn8MeJbSVZ5M7nLdNExqFLaQwEfFfACQn1+HBWKSKb3MT4Sgstuh9vVDa+bQ4DORE6o6RlspzMk9TOPfr+fiLJCLFYr3TZSKNcI7+aJwWQmPM+TkqRg49tu65f/JcAAMwMas6WUKd8AAAAASUVORK5CYII=", "sql": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAh5JREFUeNp8kctrE1EUxr+ZyXMkoa1NBROaSkpTBE23PhZ25cql2y5duvAPUdGFS1FxIRRBXZlFQ9GVdDENIhGJxkDsw2mneZnM83ruNZlOmNoDhzlzz3d/9zv3Sowx8Ch/qlYK2XM3cEJsbH0+qjV/rd6/u6aN18b7RMFT+9aosP/Ex+0ae/puw7j36PlKEMAzctKJ3aGFamMHjV0d+wcGitkMrpWWp6hVIciEk2MAOwbUWjosx0UiFoWqJpGMx5DNzODq5aIPoa82AWBg/lyKLMH1PMp/a9XvLXLzG1cuFlBaWpiKxaIPSLY6CaC93ggQjyiQZRkeQSzLRovGaPciWLt5faSWEBoh6KBvOhiaNga0+Y9pwaFxvu7rfp8F5pWDt+qNMp2IijHGwddWCvN+33/CoAOP5nVdT9SdoQ1JkggiQ6Yvr7V60+9z7akA2gfH9cRF8hO5F5Ve4lQAF9uuK+qFsylkzsQxrcaQm04hdWkR83Mzfp9rQ3fAFzu9Ph6+WMfjl6/pGBdb2jbKmx8QlRjWy5vkyhUZBPgOeGNHN9AbDLGUz6He2hVj3Ll9C8/evsdgaMK0HV8bcmDTU0UUBYXcedR+NLGnH0I3jvDk1Rsy46FP4C/1BtrdntCGHNiOAzWZgEKQ5Qt5lIqLojbaXSQTcRy2OwT4SZqk0IYAOgkVWUE+lxX/zb0DpFNpkTzmZmfFtzewhHYcfwUYAMZmVaZQlLFHAAAAAElFTkSuQmCC", "tga": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnxJREFUeNp0U89PE0EU/ra725K22ILRGipb22pMG6JcSEQTbUIwnozxpBcvepeEP0KPogcT/wlNT17kIKbEmChFUYKGVtL0R2gLtNCl3Z1Z3+zSAlonmezOe/O+973vvZEsy4JYnqdPMu6RkSQYQ29JEkB+PZcrslrtPhQl23VZc8/tr9I1yMHg0EA8HrBM04lVFAhoY38fSSDQVN3pfKV8G7KcxZHl6v1xblqU3eLc3p2VFZjr6+gQgwsnhzGTuq6Nhs6kYZqXjwL0GFhEl3U60OfnwWs1GGtrUKNRsKkpeIIBpKIRtI1J7cX7hXRhc/MOhXw5DkCZGG2zXAajzFIoBMvng1ypIKOqmP30GW3OIEcimovzlxRy5RgAFwDEAIODkCcmIMdiQLsNdWwMZdJlg8pzEUt1aBhKq3XinxKYqF9yQbqRIqsMy+0Gyy47bKgUWXSLtDENE5wdtuqQATm50F1VnPbRGeEw8HXZbiV8fsDvI9ldju9vADAyihLEbrWAZhOoVp3z6iqBUiB1A4nEfwCEsbkL/M4TgE5n5jDx+oTEzp1d8m9tC8H6MaAB0imzx0NU/WKUYE+loEyawDBo2ui6TGfT6ANAxrvx87gYCGCxXEKVJvCWFsG3eh1vN/J4OD6Od4UC8o0G3TX7TGLHwI9iEQmvF9X6Fh7F4/iYy+GcLOMSlfEgGsP0qdNOmX0BiGKpVkV1bw/1nW2b/gCpf1PTcI+Y7eg6ps+G4bG4PR99SjAVo9HE4q+fKNE0vl5awuSohjeijbRefVjAtUgEQRK7Yhi9OKn7nKWZxxlSPWl3QwgnaIrW8QMhD542vUbx/W49m7sq4v4IMABOqi3Ej7bAEAAAAABJRU5ErkJggg==", "tgz": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAnhJREFUeNpsU1trE0EYPbMzSTfdtInFtkkpiaXVWou2FRUEn/so6JugL/oH/Af+B1988if40jcFERQURNBSQdDWlLQN2lsue8neZsZvc7FoOrDszM75znfOmVmmtUYyvry++36yfOeS1qqzDtvH2P76ApPlW3Drb2sHex/uccHWAdbZX30kO2+B3siN3zhTnHuQ66+95i423jzFzOVljBdKOZNHazvVT7e5wF+SZBj9iZJ+3J11mbW2kR8T4LwFli5i4fqTUvnczTUp9RLtDhKgJx0q4dEwWAxrREKICHEsoYYXMXvlcWmquLgmY71yCkG/c0AkARgLMZpnMDMpGNzEYe0dGp6HwvmHpbHC1Wf9MnFCkHQOyYEPzSJwQ2B65Tm5NZG3Fshim6wbMNJn4bpHowMKtIqo2COgR2IcAptwjvcgo6i77igjEmVDqbY8xQJ1VwRULhiBI6+G9Zf3cbTziuzIDkmHSNqECTFgQScEcYuc2NA8TcdYwXD+GkK/TYVN+u72WrIudiAD8o6oAR2RRCmQMjis3CIy1iSpPySCXhFTXeyAgh4BR+JVw8pauLi0Cp4yCX9A90FQhnSBYtnF/k+Q+HYam9itfIZB3QvT8zj8XSW5EhNTs9ivbSLwPUzPLNPJBIMEKnaQYg6aB9+RGR5F5VsNgnNKXMI1NdJGG5WfHzFVLJ7k8c8xUngpVodlDSGbFYj8Y4yMpOG09lHf3yIFPzA3fwHZTAQVtU4JUTeFDrdgDdlI8wAz5Qy2KxswReI7QODZcOr0ZH3q2hIDBI7zq16tuk3FNPxAI4wN+pkoccYoE4YJU5EdUtM4Qst26v26PwIMAKj3P/2YUKgYAAAAAElFTkSuQmCC", "tiff": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmRJREFUeNp0UktPE1EU/qYzHWstlrYJNcWUElyUJsaNGh9B0g1Lo0v9Ey78EbrVxBhXuHShm25YGBJRQpAYBDEWpaEPEhksdVpbyjzveO4MfZDCTWbauefc736PIziOA77OPH2yJCcSGdg2uksQAKofFou/7VrtASRpvVNynj13f6XOhjg8HAlMTIQdy/LO+v3uYUPTkAHCTb+cK+0pdyGK6+hbvu4/xiyHbncYAwfR19ZgbG/DoO9LsSgeTd9JXoxfyMG2rvQDdBlwIZauQ5ufh12twioU4E+nYU1NIRCNIDs+Bt28mXzx8VNuZ796j9q/DgAwomwqClilAmF0FE4wCInAlkjO4y+r0JgNX2os6XPYS2q/cQyAcQatFjA0BPH6NYipccAwIGUy2CVJFZInkKlyJAqx3T4/IMGmJkeWIWSz5KgI5pdhb3yDXS5DSCYh8rTID8s0wexeVD0GtMd85KkkefFxUfE47M1NokbJkByEQl6tL+ouAI+MUwbFhnYbaJKc/Sqg0x4H4eDRGDA56fUOABA9/GsCpaIHwr8FOhQ823O5RfW66tUGADhNy3RNRDjcN41HLxdQ8J6jYTsOQLfOJBK4f+s2/uoathoNGKT1MtFeVHZxdWTEZfEq/wMKl3rCJOIzTV6ADs2R5ulYDDNkYjp0DhrF+zCVgkw31+v1UxjQZkNV0SADd2o1MIuc9gmY+/kLxb0/UFoHePd9A1qzeUoKpilx9xcLWzgg+u/zeVfuQqkM9bCN1ysrWKXxdtPgvScwUAm58XZ52W16QyPtifRUzi588GbEi1ztHPsvwAC4uC9qhnsZvwAAAABJRU5ErkJggg==", "txt": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAeJJREFUeNp8UrtOG1EQPfsyXiyzBguIJSyChZBBEFCKpKHLo6egpErNn8CHgH8gkZIiTSIXLhJAWCgkoMgRMSiRBSK29z4y9+I1d/HCrFb3MTPnnjkzlpQSynY+fP70fGF2gQuByCz6lfdd9Uurfvrrjes6762eb3tzQ69uFJwPsqOPC+MBEmxxphi4tlU5OGmsOzaBWLc+O9oIIVhScidkyGZ8vH62nHtSKlaI4cse6TjAfSaFBBcco0EWqyvzubmpyQrj/FXk75cQaSEMeMXU8xykPA/Hjd/6/LRcyjEpt2i7HAe4A2TeLZWKUOJaVLxj27j813EHGKCXaAJExu/4BOdiAED08riQD2riOrexyRoYc3CvsAbLGAAjZga7vgZG23WMCdBvoxKJc36TRBlMiaa2JByjNqqD8qkYc1pjDK7abey+/YhrWlfKswhpiCR96aEU9o5+QE3g2ovVWDm2Sc22bBQm8vrVpbkS9r+doPr1EOWZaQ0yFoxg2PcREosEAI4uvZhJpzFMP+cSXRbq+043RManez+tNWKMI6GN0g0Z04HFR+NoNC/0yx717efZOSbzY3AcR4Op2AGA5p/W31r9e0vNgSrh9OwCrpeCkqvZuqTybnpRqx/r2CjvvwADAJC/7lzAzQmwAAAAAElFTkSuQmCC", "wav": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAApFJREFUeNpsU1tPE0EYPXtpKbX0wqUQKVQMFdIXQBNCQBs06KP+B8ODGh+Mf4b/4IsGE54kxhcMBrkp7YOQgBRvSKG73fvsrt8Otoask0xmd+b7zpxzvm8E3/cRjPkniyulW0NFy2JoDkEAguOlpXJ9p3L8MBqVl4O9YHxae8pXuRlcGO7KPLhfTDVUqwUgigJMy4Whm6lEXHjxYf3XnByRN0QB/2KaH7btMlUxoRJAcyqKhdOaht7+DJ49n+2cvTnwynXcsb+kLwJ4rgfmMDDGWqvneXCZS9ND7mov5h9ND85M9y86Dpto5rUkuJ4Py3YDJpy6QGJPayqB+Njf+43XL220t0cwOZkfrNXsBUqZugDA6CbLdAiAwaek1ZU9LmP8Rh6S78GsGxjOp9FdzKJaVZIhBgGASzK21w/wbrnCk8euX+EMAjaaZuPHdwUdHVFYluuGPGCORwwYjg5rqOwccRk+3Ux0IEvntmsNG4ZmUayL/wAwKHUNfZfTKN0ZRaw9Cof8qJ/pMAyHy5KkAMTksSEJtnMenM7EMVMawbejMzJRh67bXEYiIXEAVTW50SEAhzqwfqrBcXx4VOhYm4RsNgHbsJFOyZTsQ1MN+hcohoUlkFiMT+TQFpMwXOjGpXgE+XwGk1N5pFJtKNCequgYGupCRBbCDOp0KBJc4VoP3dyBONW8uydBgBHUThqQKCk3mEZ/LoUG+RBioJO7VarAwEAntjYPiUUW9Hh4b2R7k9j98hN37xWx8fGAt3eIAdVMLn+uUv+b2KReSCZjZJiB9bV9jIz2ofr1BKvvd7G9dRC80lae0HzOt+cWVnrSKDrMJykifwNBpCgE/UAllEXufmDu8Zlffvvm8XSQ90eAAQA0pF7c08o4PAAAAABJRU5ErkJggg==", "xls": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmxJREFUeNpsU0trFEEQ/mamZ3Y2+0zIC2MmITEkUYgERFQErx5E8KTi1b/h79A/4SW3nCNeYggBYZVEMU/y3N3Z7M7OTD/G6lk2ruw20zRdU/XV91VVG0mSQK/3n1a/jky6d6Xs3G8WXS+Pw5N6LXjLLGuna/78oZKerGsYKtrDE16uJGL1L9gEOOcYd2dL1fNwrbL//aXN7J1efPMmkUqEFAk0A0VZNbFEaQCBscIkXj975y3NLq9xye8PBkAniHOFph+j2eC4rsdoB4LsFubGl/Hq8RtvYWpxTQi52o1jvWiGYaRZL0/auDgOkC/Z8BYL2Pqxidp1FZkhoDxpeaXA/Ujuj/4HoOxKKjiOiek7RUShRNQWaNYFQuMafrYCxiw4ozZKfqbYJ0EvRdl1DQyyTs8XCNTA6UELMwvDyLpZWIZNNlNLlQOK2LMJRJ+5AkuZ1S7CFFzJzk56GnUjQWlYkqCoBWFbonEVYcLLA4dNnB624GQsDBWIgfZJEgxkoChzSFWvn4VpQemDm2VwXQsXJwF1h6c+gxlQ5jgSiEUEt0wdIe7tMES+nEG2aCLiJMOIIWIr9e0DEELAMUrwRuchVAyTKimUwO75Jm6VF3Bv7imOaj+xd7UFKVS/BPJF1b/E4tgTrE49J60O5kceoNqowiuuYKa8ghHXA48U9MT2AQgyRvTThE30bQiaSGa4yLMJNFo+Dq/2cHt4CYlwyFf2S6BHwwrMw/avDbR5C1k7h1YQ4KH3Amf+AcZyEbZPv9CItzQD1l9EbtYOjv74v/d3O9RMPTDrsEwGIWN8q2yk7XNYRs9JrRv3V4ABADSGR6eQ0/NQAAAAAElFTkSuQmCC", "xlsx": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmlJREFUeNpsU8tqFEEUPVXdPY/ueWZIoiYZiSYKYhJc6EbduHOhgijo3t/wH1z6B0JAhOyMILhxo4kJGk1ASTAxwWF0Mpp5dHc9vFUzYwidaoqmq+8959xzbzGtNcx69PTS26ETmQtS9r4Hy/xv7MW7jV+th5yzVcaYPX/++It9u4NAv+CVR6tBUUTqMJsDcRzjZOZM8W9ZLKx+/XDb4e5/kH5In0lpIYWGUaC0YTZnBCAEKoVR3L36oDo7NbsglZwbqD6iQKOXFMcKUVfBkBAoQhlD5xxMDp/HrSv3q1JgYW3z0x0KXzkCYJaRZljru23aHWTzLiamAyytv0O9UYdf5PArqlppBfMUfu4oALErqZBKcUxMFRCHEp0DgW5Lo4N9NIN1dF0XXsVFOUyPJTzo+WBANDidjp8tgHGG3c0DnJ4uIRf4cOCBaW5KjY8xkZL72xpJ9QcFz5bVqHUJGHZL2YtNmKi06YCyiVFb4s/vEKMTAf1p4edOG6mMi1zR6wEpdUwX+vLDtkCzHoK7ptcM6ayLmGajvtex4PliyoIkFRjmUEASelB2rXQRSfjUCT9PlWpmW21iTGzCAyEkUixPRqXhe2V4zKczbdmybgkpJ0cGOuA6Y2MTCsKoi5HsNK7N3MN+uwYaWbxYfoLLkzdxcew6lrYWaZhm8PHHG3zffp1UwJSHz9vvkU8PodbcQYYYS5lxYkxTkGdVDQdV1Js1qPgYD6JIuIE7gsXVefIhIuM05k7dwMbeMmh87a18ufIMaVYyprrJLgje2Nr+1tzYXANnDnr3zRhHj37Vvy2wpXHtNAd5/wQYAD6WMuT2CwoVAAAAAElFTkSuQmCC", "xml": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAilJREFUeNqMks1PE0EYxh+g3W2t1G0sEqyISynUFJsSOShNwCamiYZED3LgIkcuxoN/iCZePZiYGD2aGD+i0F5KMChxlVaakAK2ykcAt+WzdLu7zkxo3WZL4pu8mXfmeeY3885ug67roPFh5nvc62m9hjoR+5LMp7MrkYf370qVtco+VtCUFpbj+jGR+JbWn76OyQ8ePwsZATQb8R/hanZgINgj9IqeuBFCw1Kt9OMBnNWCs24XwkG/QKYUEiGjVAPQof/rq0783pShET3ULQo8xz0iS5FaANmrHQH2DoqY+DSLSz6RzecWlnD9ymU47LYjd4O5BXqDTG4FM3NpTEkpdJ5rw0AowLRMbhUfp58gTOaD/UHmNQPI6YmvKWRX1zESHUJ/oBs2nmPa+Mgw0ZIM3tZyGoJwygzQNB2jNyJIZX7iB0lpPoM70UGmPX8zCU+rG8NDVxHwdiC5mKsPUFUN/gvtLLf39sFzVqaN3YrC6TjBauqhXhNA1TQoqloV7Da+pjZq1FsXUCamF29j6LvYhf3iISamZ3Fv9DZevouhRzzPfOG+3hpA9U9UyioOlTJ7pFeTCQS6RGzIebyf+oz5pSzWtmSW1EO9phvQ00slBRt/8qR3DoWdXbiczUiTzd52D+tdLmyTB14mx1rMAKVcRpEATjrsuElee/HXGmnFRyBOGD30C/nEDjNgs7CDpsYmnHG3YPegBCvHs9oYfm8nG9dJa5X4K8AAQzQX4KSN3wcAAAAASUVORK5CYII=", "yml": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdxJREFUeNqMUl1rE0EUPbM7m5Y0Zptu21AwWwhYpfSDFh+kvvRd8N0Hf4I/xWdf/Q158F0QoQ+CVsFKaLSQpt/dpmvztTOzzky6cetOpWcZZvbO3MO5514SxzEU3r57/3GpWllM/tP4sL3TarROXuSo/SWJvX71Uu80Cfhlr/T4UdWFAVfdnmsTUtvdP35OUyQKVnJgXDBTcj9icAsTeLax7j/052qM81UjwW1QJXEhMF0qYnN90fdnvdogYmvJPU0/VBApD4hcDrWRcyikfB17srzgW7b9Rh1vEvxDlI4tVytaBSEEtmWh0xsUMwpwnWjqAlcxogiHd1wiQyCu87iI/+sJtf6+NXsgpd7FWCMB50KvkYMGMbLdZgLlfj+K9K4+FnFQ2x7WntIs50AbmiGwLILt+k+EvzvSNIHzdigdJ/AmXQRhiHv5POSwYmG+cqPVo0HqDxj8uTK2vn1Hfa+JmdIkvtZ/4fOPXU3WPDpFeNWVyUKryCiIGMN4zsH98gym3CIcOTwT+XHdXrdQQHAZotE8kBPpSqPNHtBOr48HUmLOcXRJT9dWNMGYJFby91pHOAvaykSaITg+bwefdhrteDRTMSwyrFCgI88E056Hy+4Ah2cXQZL3R4ABALUe7fqXWFN6AAAAAElFTkSuQmCC", "zip": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAm9JREFUeNpsk0tv00AUhc+MY6dOmgeFJg1FoVVpUWlFC0s2IFF1jxBbhKj4BSxYdscPYcEmQmIDq0gsERIViy4TpD7VFzF1Ho5je2a4thOqNhlp5Mz4zudzzp0wpRTC8fPrk0/TC6+fDtYicLH97T1Kc2vQDcs+rH3eUAxVznn0fn1DRM8E+iOdv5ct3XmZG6yVlNj6solUbgVTt0q5FGtX6vXqC6VklTE+KAO/OODHSIQPRQpsXC+kkEz2ELA0ystv84tLzyucsbWByisAGf+QAS2CCDRRLMJMmxC+i8C4jdLCm/zM7OOKFGptcO6/BTpJ0yeQB0Y+mfKQuZZG0jQgeRbW8Xdomobs9LN8scc+UPHNy4Dwq8IljotIIQEm59/RoSyM1CKkXKZNBm7kIVgyM6wgAnSgRK9vqQfHPiMFDHqyFVsLR9Cm0o4YzoAASrSjCelQfRPb1Vc4qn0EY5L2W9GEaBLcxQgFHpGbkMIDJ69e+wjJ8VXqRgKid0r7ftQdxkRs9SqA2kgAm14SSIQh9uhuLGPMnKJs/5KquL1x0N0RCsizigoDaLqBdHoMiyvrlBsHVx1wphD4BCewoqxGKKDwAgtOy8JufYuk+5golGGaGZwc1sIGoDz3AOPZSVLaHgVwydoJDM1H4DbQODughB3YpOD44HfoHgnu4e7So0uAi0stHLJ3Aud8B9bpHu6vPoSu9TtDl6tUuoFiIYOgu0+158MKmOxomtyD3Qi/3MTR7i8K0EDG1GHO5DE3X4DvNahZlJOwEkOATvdPc2//hx3mXJ5lFJaF8K8bStd0YGfnOJbMGex21x6c+yfAAOlIPDJzr7cLAAAAAElFTkSuQmCC" } http-party-http-server-af0ac3e/lib/core/show-dir/index.js000066400000000000000000000135211424550403000235510ustar00rootroot00000000000000'use strict'; const styles = require('./styles'); const lastModifiedToString = require('./last-modified-to-string'); const permsToString = require('./perms-to-string'); const sizeToString = require('./size-to-string'); const sortFiles = require('./sort-files'); const fs = require('fs'); const path = require('path'); const he = require('he'); const etag = require('../etag'); const url = require('url'); const status = require('../status-handlers'); const supportedIcons = styles.icons; const css = styles.css; module.exports = (opts) => { // opts are parsed by opts.js, defaults already applied const cache = opts.cache; const root = path.resolve(opts.root); const baseDir = opts.baseDir; const humanReadable = opts.humanReadable; const hidePermissions = opts.hidePermissions; const handleError = opts.handleError; const showDotfiles = opts.showDotfiles; const si = opts.si; const weakEtags = opts.weakEtags; return function middleware(req, res, next) { // Figure out the path for the file from the given url const parsed = url.parse(req.url); const pathname = decodeURIComponent(parsed.pathname); const dir = path.normalize( path.join( root, path.relative( path.join('/', baseDir), pathname ) ) ); fs.stat(dir, (statErr, stat) => { if (statErr) { if (handleError) { status[500](res, next, { error: statErr }); } else { next(); } return; } // files are the listing of dir fs.readdir(dir, (readErr, _files) => { let files = _files; if (readErr) { if (handleError) { status[500](res, next, { error: readErr }); } else { next(); } return; } // Optionally exclude dotfiles from directory listing. if (!showDotfiles) { files = files.filter(filename => filename.slice(0, 1) !== '.'); } res.setHeader('content-type', 'text/html'); res.setHeader('etag', etag(stat, weakEtags)); res.setHeader('last-modified', (new Date(stat.mtime)).toUTCString()); res.setHeader('cache-control', cache); function render(dirs, renderFiles, lolwuts) { // each entry in the array is a [name, stat] tuple let html = `${[ '', '', ' ', ' ', ' ', ` Index of ${he.encode(pathname)}`, ` `, ' ', ' ', `

Index of ${he.encode(pathname)}

`, ].join('\n')}\n`; html += ''; const failed = false; const writeRow = (file) => { // render a row given a [name, stat] tuple const isDir = file[1].isDirectory && file[1].isDirectory(); let href = `./${encodeURIComponent(file[0])}`; // append trailing slash and query for dir entry if (isDir) { href += `/${he.encode((parsed.search) ? parsed.search : '')}`; } const displayName = he.encode(file[0]) + ((isDir) ? '/' : ''); const ext = file[0].split('.').pop(); const classForNonDir = supportedIcons[ext] ? ext : '_page'; const iconClass = `icon-${isDir ? '_blank' : classForNonDir}`; // TODO: use stylessheets? html += `${'' + '`; if (!hidePermissions) { html += ``; } html += `` + `` + `` + '\n'; }; dirs.sort((a, b) => a[0].toString().localeCompare(b[0].toString())).forEach(writeRow); renderFiles.sort((a, b) => a.toString().localeCompare(b.toString())).forEach(writeRow); lolwuts.sort((a, b) => a[0].toString().localeCompare(b[0].toString())).forEach(writeRow); html += '
(${permsToString(file[1])})${lastModifiedToString(file[1])}${sizeToString(file[1], humanReadable, si)}${displayName}
\n'; html += `
Node.js ${ process.version }/ http-server ` + `server running @ ${ he.encode(req.headers.host || '')}
\n` + '' ; if (!failed) { res.writeHead(200, { 'Content-Type': 'text/html' }); res.end(html); } } sortFiles(dir, files, (lolwuts, dirs, sortedFiles) => { // 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) { fs.stat(path.join(dir, '..'), (err, s) => { if (err) { if (handleError) { status[500](res, next, { error: err }); } else { next(); } return; } dirs.unshift(['..', s]); render(dirs, sortedFiles, lolwuts); }); } else { render(dirs, sortedFiles, lolwuts); } }); }); }); }; }; http-party-http-server-af0ac3e/lib/core/show-dir/last-modified-to-string.js000066400000000000000000000005371424550403000271120ustar00rootroot00000000000000'use strict'; module.exports = function lastModifiedToString(stat) { const t = new Date(stat.mtime); return (('0' + (t.getDate())).slice(-2) + '-' + t.toLocaleString('default', { month: 'short' }) + '-' + t.getFullYear() + ' ' + ('0' + t.getHours()).slice(-2) + ':' + ('0' + t.getMinutes()).slice(-2)); }; http-party-http-server-af0ac3e/lib/core/show-dir/perms-to-string.js000066400000000000000000000006101424550403000255070ustar00rootroot00000000000000'use strict'; module.exports = function permsToString(stat) { if (!stat.isDirectory || !stat.mode) { return '???!!!???'; } const dir = stat.isDirectory() ? 'd' : '-'; const mode = stat.mode.toString(8); return dir + mode.slice(-3).split('').map(n => [ '---', '--x', '-w-', '-wx', 'r--', 'r-x', 'rw-', 'rwx', ][parseInt(n, 10)]).join(''); }; http-party-http-server-af0ac3e/lib/core/show-dir/size-to-string.js000066400000000000000000000013731424550403000253420ustar00rootroot00000000000000'use strict'; // 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 module.exports = function sizeToString(stat, humanReadable, si) { if (stat.isDirectory && stat.isDirectory()) { return ''; } let bytes = stat.size; const threshold = si ? 1000 : 1024; if (!humanReadable || bytes < threshold) { return `${bytes}B`; } const units = ['k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y']; let u = -1; do { bytes /= threshold; u += 1; } while (bytes >= threshold); let b = bytes.toFixed(1); if (isNaN(b)) b = '??'; return b + units[u]; }; http-party-http-server-af0ac3e/lib/core/show-dir/sort-files.js000066400000000000000000000014001424550403000245220ustar00rootroot00000000000000'use strict'; const fs = require('fs'); const path = require('path'); module.exports = function sortByIsDirectory(dir, paths, cb) { // take the listing file names in `dir` // returns directory and file array, each entry is // of the array a [name, stat] tuple let pending = paths.length; const errs = []; const dirs = []; const files = []; if (!pending) { cb(errs, dirs, files); return; } paths.forEach((file) => { fs.stat(path.join(dir, file), (err, s) => { if (err) { errs.push([file, err]); } else if (s.isDirectory()) { dirs.push([file, s]); } else { files.push([file, s]); } pending -= 1; if (pending === 0) { cb(errs, dirs, files); } }); }); }; http-party-http-server-af0ac3e/lib/core/show-dir/styles.js000066400000000000000000000010641424550403000237640ustar00rootroot00000000000000'use strict'; const icons = require('./icons.json'); const IMG_SIZE = 16; let css = `i.icon { display: block; height: ${IMG_SIZE}px; width: ${IMG_SIZE}px; }\n`; css += 'table tr { white-space: nowrap; }\n'; css += 'td.perms {}\n'; css += 'td.file-size { text-align: right; padding-left: 1em; }\n'; css += 'td.display-name { padding-left: 1em; }\n'; Object.keys(icons).forEach((key) => { css += `i.icon-${key} {\n`; css += ` background-image: url("data:image/png;base64,${icons[key]}");\n`; css += '}\n\n'; }); exports.icons = icons; exports.css = css; http-party-http-server-af0ac3e/lib/core/status-handlers.js000066400000000000000000000041321424550403000240250ustar00rootroot00000000000000'use strict'; const he = require('he'); // not modified exports['304'] = (res) => { res.statusCode = 304; res.end(); }; // access denied exports['403'] = (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'] = (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'] = (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'] = (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'] = (res, next, opts) => { res.statusCode = 500; res.setHeader('content-type', 'text/html'); const error = String(opts.error.stack || opts.error || 'No specified error'); const html = `${[ '', '', ' ', ' ', ' 500 Internal Server Error', ' ', ' ', '

', ` ${he.encode(error)}`, '

', ' ', '', ].join('\n')}\n`; res.end(html); }; // bad request exports['400'] = (res, next, opts) => { res.statusCode = 400; res.setHeader('content-type', 'text/html'); const error = opts && opts.error ? String(opts.error) : 'Malformed request.'; const html = `${[ '', '', ' ', ' ', ' 400 Bad Request', ' ', ' ', '

', ` ${he.encode(error)}`, '

', ' ', '', ].join('\n')}\n`; res.end(html); }; http-party-http-server-af0ac3e/lib/http-server.js000066400000000000000000000125131424550403000222410ustar00rootroot00000000000000'use strict'; var fs = require('fs'), union = require('union'), httpServerCore = require('./core'), auth = require('basic-auth'), httpProxy = require('http-proxy'), corser = require('corser'), secureCompare = require('secure-compare'); // // 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 * which 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 { // eslint-disable-next-line no-sync fs.lstatSync('./public'); this.root = './public'; } catch (err) { this.root = './'; } } this.headers = options.headers || {}; this.headers['Accept-Ranges'] = 'bytes'; this.cache = ( // eslint-disable-next-line no-nested-ternary options.cache === undefined ? 3600 : // -1 is a special case to turn off caching. // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#Preventing_caching options.cache === -1 ? 'no-cache, no-store, must-revalidate' : options.cache // in seconds. ); this.showDir = options.showDir !== 'false'; this.autoIndex = options.autoIndex !== 'false'; this.showDotfiles = options.showDotfiles; this.gzip = options.gzip === true; this.brotli = options.brotli === true; if (options.ext) { this.ext = options.ext === true ? 'html' : options.ext; } this.contentType = options.contentType || this.ext === 'html' ? 'text/html' : 'application/octet-stream'; var before = options.before ? options.before.slice() : []; if (options.logFn) { before.push(function (req, res) { options.logFn(req, res); res.emit('next'); }); } if (options.username || options.password) { before.push(function (req, res) { var credentials = auth(req); // We perform these outside the if to avoid short-circuiting and giving // an attacker knowledge of whether the username is correct via a timing // attack. if (credentials) { // if credentials is defined, name and pass are guaranteed to be string // type var usernameEqual = secureCompare(options.username.toString(), credentials.name); var passwordEqual = secureCompare(options.password.toString(), credentials.pass); if (usernameEqual && passwordEqual) { return res.emit('next'); } } res.statusCode = 401; res.setHeader('WWW-Authenticate', 'Basic realm=""'); res.end('Access denied'); }); } if (options.cors) { this.headers['Access-Control-Allow-Origin'] = '*'; this.headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Range'; if (options.corsHeaders) { options.corsHeaders.split(/\s*,\s*/) .forEach(function (h) { this.headers['Access-Control-Allow-Headers'] += ', ' + h; }, this); } before.push(corser.create(options.corsHeaders ? { requestHeaders: this.headers['Access-Control-Allow-Headers'].split(/\s*,\s*/) } : null)); } 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(httpServerCore({ root: this.root, cache: this.cache, showDir: this.showDir, showDotfiles: this.showDotfiles, autoIndex: this.autoIndex, defaultExt: this.ext, gzip: this.gzip, brotli: this.brotli, contentType: this.contentType, mimetypes: options.mimetypes, handleError: typeof options.proxy !== 'string' })); if (typeof options.proxy === 'string') { var proxyOptions = options.proxyOptions || {}; var proxy = httpProxy.createProxyServer(proxyOptions); before.push(function (req, res) { proxy.web(req, res, { target: options.proxy, changeOrigin: true }, function (err, req, res) { if (options.logFn) { options.logFn(req, res, { message: err.message, status: res.statusCode }); } res.emit('next'); }); }); } 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 = serverOptions.https && serverOptions.https.passphrase // if passphrase is set, shim must be used as union does not support ? require('./shims/https-server-shim')(serverOptions) : union.createServer(serverOptions); if (options.timeout !== undefined) { this.server.setTimeout(options.timeout); } } HttpServer.prototype.listen = function () { this.server.listen.apply(this.server, arguments); }; HttpServer.prototype.close = function () { return this.server.close(); }; http-party-http-server-af0ac3e/lib/shims/000077500000000000000000000000001424550403000205415ustar00rootroot00000000000000http-party-http-server-af0ac3e/lib/shims/https-server-shim.js000066400000000000000000000032451424550403000245070ustar00rootroot00000000000000/* eslint-disable no-process-env */ /* eslint-disable no-sync */ var https = require('https'); var fs = require('fs'); var core = require('union/lib/core'); var RoutingStream = require('union/lib/routing-stream'); module.exports = function (options) { var isArray = Array.isArray(options.after); var 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, 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); } var serverOptions; serverOptions = options.https; if (!serverOptions.key || !serverOptions.cert) { throw new Error( 'Both options key and cert are required.' ); } credentials = { key: fs.readFileSync(serverOptions.key), cert: fs.readFileSync(serverOptions.cert), passphrase: process.env.NODE_HTTP_SERVER_SSL_PASSPHRASE }; if (serverOptions.ca) { serverOptions.ca = !Array.isArray(serverOptions.ca) ? [serverOptions.ca] : serverOptions.ca; credentials.ca = serverOptions.ca.map(function (ca) { return fs.readFileSync(ca); }); } return https.createServer(credentials, requestHandler); }; http-party-http-server-af0ac3e/package-lock.json000066400000000000000000013644641424550403000221060ustar00rootroot00000000000000{ "name": "http-server", "version": "14.1.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "http-server", "version": "14.1.1", "license": "MIT", "dependencies": { "basic-auth": "^2.0.1", "chalk": "^4.1.2", "corser": "^2.0.1", "he": "^1.2.0", "html-encoding-sniffer": "^3.0.0", "http-proxy": "^1.18.1", "mime": "^1.6.0", "minimist": "^1.2.6", "opener": "^1.5.1", "portfinder": "^1.0.28", "secure-compare": "3.0.1", "union": "~0.5.0", "url-join": "^4.0.1" }, "bin": { "http-server": "bin/http-server" }, "devDependencies": { "eol": "^0.9.1", "eslint": "^4.19.1", "eslint-config-populist": "^4.2.0", "express": "^4.17.1", "request": "^2.88.2", "tap": "^14.11.0" }, "engines": { "node": ">=12" } }, "node_modules/@babel/code-frame": { "version": "7.14.5", "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "dependencies": { "@babel/highlight": "^7.14.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/generator": { "version": "7.15.4", "integrity": "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==", "dev": true, "dependencies": { "@babel/types": "^7.15.4", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/generator/node_modules/jsesc": { "version": "2.5.2", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, "bin": { "jsesc": "bin/jsesc" }, "engines": { "node": ">=4" } }, "node_modules/@babel/helper-function-name": { "version": "7.15.4", "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", "dev": true, "dependencies": { "@babel/helper-get-function-arity": "^7.15.4", "@babel/template": "^7.15.4", "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-get-function-arity": { "version": "7.15.4", "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", "dev": true, "dependencies": { "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { "version": "7.15.4", "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", "dev": true, "dependencies": { "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.15.4", "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", "dev": true, "dependencies": { "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { "version": "7.15.7", "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { "version": "7.14.5", "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight/node_modules/ansi-styles": { "version": "3.2.1", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { "color-convert": "^1.9.0" }, "engines": { "node": ">=4" } }, "node_modules/@babel/highlight/node_modules/chalk": { "version": "2.4.2", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" }, "engines": { "node": ">=4" } }, "node_modules/@babel/highlight/node_modules/color-convert": { "version": "1.9.3", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "dependencies": { "color-name": "1.1.3" } }, "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "node_modules/@babel/highlight/node_modules/js-tokens": { "version": "4.0.0", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "node_modules/@babel/highlight/node_modules/supports-color": { "version": "5.5.0", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "dependencies": { "has-flag": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/@babel/parser": { "version": "7.15.7", "integrity": "sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g==", "dev": true, "bin": { "parser": "bin/babel-parser.js" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/template": { "version": "7.15.4", "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.14.5", "@babel/parser": "^7.15.4", "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { "version": "7.15.4", "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", "dev": true, "dependencies": { "@babel/code-frame": "^7.14.5", "@babel/generator": "^7.15.4", "@babel/helper-function-name": "^7.15.4", "@babel/helper-hoist-variables": "^7.15.4", "@babel/helper-split-export-declaration": "^7.15.4", "@babel/parser": "^7.15.4", "@babel/types": "^7.15.4", "debug": "^4.1.0", "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse/node_modules/debug": { "version": "4.3.2", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/@babel/traverse/node_modules/globals": { "version": "11.12.0", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/@babel/traverse/node_modules/ms": { "version": "2.1.2", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "node_modules/@babel/types": { "version": "7.15.6", "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types/node_modules/to-fast-properties": { "version": "2.0.0", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/@eslint/eslintrc": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.1.1", "espree": "^7.3.0", "globals": "^12.1.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", "lodash": "^4.17.19", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, "engines": { "node": "^10.12.0 || >=12.0.0" } }, "node_modules/@eslint/eslintrc/node_modules/acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, "bin": { "acorn": "bin/acorn" }, "engines": { "node": ">=0.4.0" } }, "node_modules/@eslint/eslintrc/node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/@eslint/eslintrc/node_modules/debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/@eslint/eslintrc/node_modules/espree": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "dependencies": { "acorn": "^7.4.0", "acorn-jsx": "^5.3.1", "eslint-visitor-keys": "^1.3.0" }, "engines": { "node": "^10.12.0 || >=12.0.0" } }, "node_modules/@eslint/eslintrc/node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" }, "engines": { "node": ">=4" } }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "12.4.0", "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", "dev": true, "dependencies": { "type-fest": "^0.8.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@eslint/eslintrc/node_modules/ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true, "engines": { "node": ">= 4" } }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/@eslint/eslintrc/node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "node_modules/@eslint/eslintrc/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/accepts": { "version": "1.3.7", "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, "dependencies": { "mime-types": "~2.1.24", "negotiator": "0.6.2" }, "engines": { "node": ">= 0.6" } }, "node_modules/acorn": { "version": "5.7.4", "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", "dev": true, "bin": { "acorn": "bin/acorn" }, "engines": { "node": ">=0.4.0" } }, "node_modules/acorn-jsx": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, "dependencies": { "acorn": "^3.0.4" } }, "node_modules/acorn-jsx/node_modules/acorn": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", "dev": true, "bin": { "acorn": "bin/acorn" }, "engines": { "node": ">=0.4.0" } }, "node_modules/ajv": { "version": "6.12.6", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/ansi-escapes": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/ansi-regex": { "version": "2.1.1", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/anymatch": { "version": "3.1.2", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" }, "engines": { "node": ">= 8" } }, "node_modules/append-transform": { "version": "1.0.0", "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", "dev": true, "dependencies": { "default-require-extensions": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/archy": { "version": "1.0.0", "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, "node_modules/arg": { "version": "4.1.3", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, "node_modules/argparse": { "version": "1.0.10", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/array-flatten": { "version": "1.1.1", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", "dev": true }, "node_modules/asn1": { "version": "0.2.4", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, "dependencies": { "safer-buffer": "~2.1.0" } }, "node_modules/assert-plus": { "version": "1.0.0", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true, "engines": { "node": ">=0.8" } }, "node_modules/async-hook-domain": { "version": "1.1.3", "integrity": "sha512-ZovMxSbADV3+biB7oR1GL5lGyptI24alp0LWHlmz1OFc5oL47pz3EiIF6nXOkDW7yLqih4NtsiYduzdDW0i+Wg==", "dev": true, "dependencies": { "source-map-support": "^0.5.11" } }, "node_modules/async-hook-domain/node_modules/source-map": { "version": "0.6.1", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/async-hook-domain/node_modules/source-map-support": { "version": "0.5.20", "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "node_modules/asynckit": { "version": "0.4.0", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, "node_modules/aws-sign2": { "version": "0.7.0", "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "dev": true, "engines": { "node": "*" } }, "node_modules/aws4": { "version": "1.11.0", "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, "node_modules/babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "dependencies": { "chalk": "^1.1.3", "esutils": "^2.0.2", "js-tokens": "^3.0.2" } }, "node_modules/babel-code-frame/node_modules/chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/babel-code-frame/node_modules/js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", "dev": true }, "node_modules/balanced-match": { "version": "1.0.2", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "node_modules/basic-auth": { "version": "2.0.1", "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", "dependencies": { "safe-buffer": "5.1.2" }, "engines": { "node": ">= 0.8" } }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, "dependencies": { "tweetnacl": "^0.14.3" } }, "node_modules/binary-extensions": { "version": "2.2.0", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/bind-obj-methods": { "version": "2.0.2", "integrity": "sha512-bUkRdEOppT1Xg/jG0+bp0JSjUD9U0r7skxb/42WeBUjfBpW6COQTIgQmKX5J2Z3aMXcORKgN2N+d7IQwTK3pag==", "dev": true }, "node_modules/body-parser": { "version": "1.19.0", "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dev": true, "dependencies": { "bytes": "3.1.0", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", "http-errors": "1.7.2", "iconv-lite": "0.4.24", "on-finished": "~2.3.0", "qs": "6.7.0", "raw-body": "2.4.0", "type-is": "~1.6.17" }, "engines": { "node": ">= 0.8" } }, "node_modules/brace-expansion": { "version": "1.1.11", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { "version": "3.0.2", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "dependencies": { "fill-range": "^7.0.1" }, "engines": { "node": ">=8" } }, "node_modules/browser-process-hrtime": { "version": "1.0.0", "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, "node_modules/buffer-from": { "version": "1.1.2", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "node_modules/bytes": { "version": "3.1.0", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/caching-transform": { "version": "3.0.2", "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", "dev": true, "dependencies": { "hasha": "^3.0.0", "make-dir": "^2.0.0", "package-hash": "^3.0.0", "write-file-atomic": "^2.4.2" }, "engines": { "node": ">=6" } }, "node_modules/caching-transform/node_modules/write-file-atomic": { "version": "2.4.3", "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, "dependencies": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", "signal-exit": "^3.0.2" } }, "node_modules/caller-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "dev": true, "dependencies": { "callsites": "^0.2.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/caller-path/node_modules/callsites": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/caseless": { "version": "0.12.0", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/chalk/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/chalk/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/chalk/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/chardet": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", "dev": true }, "node_modules/chokidar": { "version": "3.5.2", "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "dev": true, "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "engines": { "node": ">= 8.10.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "node_modules/circular-json": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", "deprecated": "CircularJSON is in maintenance only, flatted is its successor.", "dev": true }, "node_modules/cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "dependencies": { "restore-cursor": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/cli-width": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", "dev": true }, "node_modules/cliui": { "version": "4.1.0", "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "dependencies": { "string-width": "^2.1.1", "strip-ansi": "^4.0.0", "wrap-ansi": "^2.0.0" } }, "node_modules/cliui/node_modules/ansi-regex": { "version": "3.0.0", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/cliui/node_modules/strip-ansi": { "version": "4.0.0", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "dependencies": { "ansi-regex": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true, "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" } }, "node_modules/code-point-at": { "version": "1.1.0", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/color-support": { "version": "1.1.3", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true, "bin": { "color-support": "bin.js" } }, "node_modules/combined-stream": { "version": "1.0.8", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "dependencies": { "delayed-stream": "~1.0.0" }, "engines": { "node": ">= 0.8" } }, "node_modules/commondir": { "version": "1.0.1", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, "node_modules/concat-map": { "version": "0.0.1", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "node_modules/concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "engines": [ "node >= 0.8" ], "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" } }, "node_modules/concat-stream/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "node_modules/concat-stream/node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "node_modules/concat-stream/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/content-disposition": { "version": "0.5.3", "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "dev": true, "dependencies": { "safe-buffer": "5.1.2" }, "engines": { "node": ">= 0.6" } }, "node_modules/content-type": { "version": "1.0.4", "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/convert-source-map": { "version": "1.8.0", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "dependencies": { "safe-buffer": "~5.1.1" } }, "node_modules/cookie": { "version": "0.4.0", "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { "version": "1.0.6", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", "dev": true }, "node_modules/core-util-is": { "version": "1.0.3", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "node_modules/corser": { "version": "2.0.1", "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=", "engines": { "node": ">= 0.4.0" } }, "node_modules/coveralls": { "version": "3.1.1", "integrity": "sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==", "dev": true, "dependencies": { "js-yaml": "^3.13.1", "lcov-parse": "^1.0.0", "log-driver": "^1.2.7", "minimist": "^1.2.5", "request": "^2.88.2" }, "bin": { "coveralls": "bin/coveralls.js" }, "engines": { "node": ">=6" } }, "node_modules/coveralls/node_modules/esprima": { "version": "4.0.1", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" }, "engines": { "node": ">=4" } }, "node_modules/coveralls/node_modules/js-yaml": { "version": "3.14.1", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/cp-file": { "version": "6.2.0", "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "make-dir": "^2.0.0", "nested-error-stacks": "^2.0.0", "pify": "^4.0.1", "safe-buffer": "^5.0.1" }, "engines": { "node": ">=6" } }, "node_modules/cross-spawn": { "version": "4.0.2", "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", "dev": true, "dependencies": { "lru-cache": "^4.0.1", "which": "^1.2.9" } }, "node_modules/cross-spawn/node_modules/which": { "version": "1.3.1", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { "which": "bin/which" } }, "node_modules/dashdash": { "version": "1.14.1", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "dependencies": { "assert-plus": "^1.0.0" }, "engines": { "node": ">=0.10" } }, "node_modules/debug": { "version": "2.6.9", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { "ms": "2.0.0" } }, "node_modules/decamelize": { "version": "1.2.0", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "node_modules/default-require-extensions": { "version": "2.0.0", "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", "dev": true, "dependencies": { "strip-bom": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/default-require-extensions/node_modules/strip-bom": { "version": "3.0.0", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/delayed-stream": { "version": "1.0.0", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true, "engines": { "node": ">=0.4.0" } }, "node_modules/depd": { "version": "1.1.2", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/destroy": { "version": "1.0.4", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", "dev": true }, "node_modules/diff": { "version": "4.0.2", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "engines": { "node": ">=0.3.1" } }, "node_modules/diff-frag": { "version": "1.1.1", "integrity": "sha512-y0YLhUGviNXaypPimkzmOCaZf8ruocRb+dpOL/lfoicxBua2gkExddlbWxIP56Z5BpSg4gL5sAWhBN2iQm4HVQ==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { "node": ">=0.10.0" } }, "node_modules/ecc-jsbn": { "version": "0.1.2", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, "node_modules/ee-first": { "version": "1.1.1", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, "node_modules/emoji-regex": { "version": "7.0.3", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, "node_modules/encodeurl": { "version": "1.0.2", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/eol": { "version": "0.9.1", "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==", "dev": true }, "node_modules/error-ex": { "version": "1.3.2", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es6-error": { "version": "4.1.1", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, "node_modules/escape-html": { "version": "1.0.3", "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", "dev": true }, "node_modules/escape-string-regexp": { "version": "1.0.5", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, "engines": { "node": ">=0.8.0" } }, "node_modules/eslint": { "version": "4.19.1", "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", "dev": true, "dependencies": { "ajv": "^5.3.0", "babel-code-frame": "^6.22.0", "chalk": "^2.1.0", "concat-stream": "^1.6.0", "cross-spawn": "^5.1.0", "debug": "^3.1.0", "doctrine": "^2.1.0", "eslint-scope": "^3.7.1", "eslint-visitor-keys": "^1.0.0", "espree": "^3.5.4", "esquery": "^1.0.0", "esutils": "^2.0.2", "file-entry-cache": "^2.0.0", "functional-red-black-tree": "^1.0.1", "glob": "^7.1.2", "globals": "^11.0.1", "ignore": "^3.3.3", "imurmurhash": "^0.1.4", "inquirer": "^3.0.6", "is-resolvable": "^1.0.0", "js-yaml": "^3.9.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", "lodash": "^4.17.4", "minimatch": "^3.0.2", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", "optionator": "^0.8.2", "path-is-inside": "^1.0.2", "pluralize": "^7.0.0", "progress": "^2.0.0", "regexpp": "^1.0.1", "require-uncached": "^1.0.3", "semver": "^5.3.0", "strip-ansi": "^4.0.0", "strip-json-comments": "~2.0.1", "table": "4.0.2", "text-table": "~0.2.0" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { "node": ">=4" } }, "node_modules/eslint-config-populist": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/eslint-config-populist/-/eslint-config-populist-4.2.0.tgz", "integrity": "sha512-9+FuXyMjVHrJKr50gjLdCou3L/i08sOjoF8eB/Mhzt9Nxz6ulTjkRpvD9Btg8q3d1KfuGGULC2lOJG9cXwRqoQ==", "dev": true, "dependencies": { "eslint": "^4.3.0", "eslint-find-rules": "^3.1.1", "eslint-plugin-json": "^1.2.0", "eslint-plugin-mocha": "^4.8.0" }, "bin": { "populist": "bin/eslint-autofix.js" } }, "node_modules/eslint-find-rules": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/eslint-find-rules/-/eslint-find-rules-3.6.1.tgz", "integrity": "sha512-GvXdZwdjvgeBXfW3rw8pcUNdGlay8hqTo0SgYi2siY+o+dOppgejSEwYezk2B8s+nZFaaOAzZVlmn8l6wkmhUA==", "dev": true, "dependencies": { "@eslint/eslintrc": "^0.1.3", "cliui": "^3.2.0", "eslint-rule-documentation": "^1.0.23", "glob": "^7.1.6", "path-is-absolute": "^1.0.1", "which": "^1.3.1", "window-size": "^0.3.0", "yargs": "^8.0.2" }, "bin": { "eslint-diff-rules": "dist/bin/diff.js", "eslint-find-rules": "dist/bin/find.js" }, "peerDependencies": { "eslint": "^3.12.0 || ^4 || ^5 || ^6 || ^7" } }, "node_modules/eslint-find-rules/node_modules/camelcase": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/eslint-find-rules/node_modules/cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, "dependencies": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1", "wrap-ansi": "^2.0.0" } }, "node_modules/eslint-find-rules/node_modules/cliui/node_modules/string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "dependencies": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/eslint-find-rules/node_modules/find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "dependencies": { "locate-path": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/eslint-find-rules/node_modules/get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, "node_modules/eslint-find-rules/node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/eslint-find-rules/node_modules/is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "dependencies": { "number-is-nan": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/eslint-find-rules/node_modules/load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", "pify": "^2.0.0", "strip-bom": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/eslint-find-rules/node_modules/locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/eslint-find-rules/node_modules/os-locale": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "dependencies": { "execa": "^0.7.0", "lcid": "^1.0.0", "mem": "^1.1.0" }, "engines": { "node": ">=4" } }, "node_modules/eslint-find-rules/node_modules/p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "dependencies": { "p-try": "^1.0.0" }, "engines": { "node": ">=4" } }, "node_modules/eslint-find-rules/node_modules/p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "dependencies": { "p-limit": "^1.1.0" }, "engines": { "node": ">=4" } }, "node_modules/eslint-find-rules/node_modules/p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/eslint-find-rules/node_modules/parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "dependencies": { "error-ex": "^1.2.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/eslint-find-rules/node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/eslint-find-rules/node_modules/path-type": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, "dependencies": { "pify": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/eslint-find-rules/node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/eslint-find-rules/node_modules/read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, "dependencies": { "load-json-file": "^2.0.0", "normalize-package-data": "^2.3.2", "path-type": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/eslint-find-rules/node_modules/read-pkg-up": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, "dependencies": { "find-up": "^2.0.0", "read-pkg": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/eslint-find-rules/node_modules/require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", "dev": true }, "node_modules/eslint-find-rules/node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/eslint-find-rules/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { "which": "bin/which" } }, "node_modules/eslint-find-rules/node_modules/window-size": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.3.0.tgz", "integrity": "sha1-uPC2bjJdIhYHUeSWM35EtFtydUY=", "dev": true, "bin": { "window-size": "cli.js" }, "engines": { "node": ">= 0.10.0" } }, "node_modules/eslint-find-rules/node_modules/yargs": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", "dev": true, "dependencies": { "camelcase": "^4.1.0", "cliui": "^3.2.0", "decamelize": "^1.1.1", "get-caller-file": "^1.0.1", "os-locale": "^2.0.0", "read-pkg-up": "^2.0.0", "require-directory": "^2.1.1", "require-main-filename": "^1.0.1", "set-blocking": "^2.0.0", "string-width": "^2.0.0", "which-module": "^2.0.0", "y18n": "^3.2.1", "yargs-parser": "^7.0.0" } }, "node_modules/eslint-find-rules/node_modules/yargs-parser": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", "dev": true, "dependencies": { "camelcase": "^4.1.0" } }, "node_modules/eslint-plugin-json": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-1.4.0.tgz", "integrity": "sha512-CECvgRAWtUzuepdlPWd+VA7fhyF9HT183pZnl8wQw5x699Mk/MbME/q8xtULBfooi3LUbj6fToieNmsvUcDxWA==", "dev": true, "dependencies": { "vscode-json-languageservice": "^3.2.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/eslint-plugin-mocha": { "version": "4.12.1", "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-4.12.1.tgz", "integrity": "sha512-hxWtYHvLA0p/PKymRfDYh9Mxt5dYkg2Goy1vZDarTEEYfELP9ksga7kKG1NUKSQy27C8Qjc7YrSWTLUhOEOksA==", "dev": true, "dependencies": { "ramda": "^0.25.0" }, "peerDependencies": { "eslint": "^2.0.0 || ^3.0.0 || ^4.0.0" } }, "node_modules/eslint-rule-documentation": { "version": "1.0.23", "resolved": "https://registry.npmjs.org/eslint-rule-documentation/-/eslint-rule-documentation-1.0.23.tgz", "integrity": "sha512-pWReu3fkohwyvztx/oQWWgld2iad25TfUdi6wvhhaDPIQjHU/pyvlKgXFw1kX31SQK2Nq9MH+vRDWB0ZLy8fYw==", "dev": true, "engines": { "node": ">=4.0.0" } }, "node_modules/eslint-scope": { "version": "3.7.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", "dev": true, "dependencies": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" }, "engines": { "node": ">=4.0.0" } }, "node_modules/eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/eslint/node_modules/ajv": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "dependencies": { "co": "^4.6.0", "fast-deep-equal": "^1.0.0", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.3.0" } }, "node_modules/eslint/node_modules/ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/eslint/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { "color-convert": "^1.9.0" }, "engines": { "node": ">=4" } }, "node_modules/eslint/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" }, "engines": { "node": ">=4" } }, "node_modules/eslint/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "dependencies": { "color-name": "1.1.3" } }, "node_modules/eslint/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "node_modules/eslint/node_modules/cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "dependencies": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", "which": "^1.2.9" } }, "node_modules/eslint/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint/node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" }, "engines": { "node": ">=4" } }, "node_modules/eslint/node_modules/fast-deep-equal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", "dev": true }, "node_modules/eslint/node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/eslint/node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/eslint/node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", "dev": true }, "node_modules/eslint/node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "node_modules/eslint/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "node_modules/eslint/node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, "node_modules/eslint/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "bin": { "semver": "bin/semver" } }, "node_modules/eslint/node_modules/strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "dependencies": { "ansi-regex": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/eslint/node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/eslint/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "dependencies": { "has-flag": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/eslint/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { "which": "bin/which" } }, "node_modules/esm": { "version": "3.2.25", "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/espree": { "version": "3.5.4", "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", "dev": true, "dependencies": { "acorn": "^5.5.0", "acorn-jsx": "^3.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/esquery": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "dependencies": { "estraverse": "^5.1.0" }, "engines": { "node": ">=0.10" } }, "node_modules/esquery/node_modules/estraverse": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true, "engines": { "node": ">=4.0" } }, "node_modules/esrecurse": { "version": "4.3.0", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "dependencies": { "estraverse": "^5.2.0" }, "engines": { "node": ">=4.0" } }, "node_modules/esrecurse/node_modules/estraverse": { "version": "5.2.0", "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true, "engines": { "node": ">=4.0" } }, "node_modules/estraverse": { "version": "4.3.0", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, "engines": { "node": ">=4.0" } }, "node_modules/esutils": { "version": "2.0.3", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/etag": { "version": "1.8.1", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/eventemitter3": { "version": "4.0.7", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "node_modules/events-to-array": { "version": "1.1.2", "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", "dev": true }, "node_modules/execa": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "dependencies": { "cross-spawn": "^5.0.1", "get-stream": "^3.0.0", "is-stream": "^1.1.0", "npm-run-path": "^2.0.0", "p-finally": "^1.0.0", "signal-exit": "^3.0.0", "strip-eof": "^1.0.0" }, "engines": { "node": ">=4" } }, "node_modules/execa/node_modules/cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "dependencies": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", "which": "^1.2.9" } }, "node_modules/execa/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { "which": "bin/which" } }, "node_modules/express": { "version": "4.17.1", "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "dev": true, "dependencies": { "accepts": "~1.3.7", "array-flatten": "1.1.1", "body-parser": "1.19.0", "content-disposition": "0.5.3", "content-type": "~1.0.4", "cookie": "0.4.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "finalhandler": "~1.1.2", "fresh": "0.5.2", "merge-descriptors": "1.0.1", "methods": "~1.1.2", "on-finished": "~2.3.0", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.5", "qs": "6.7.0", "range-parser": "~1.2.1", "safe-buffer": "5.1.2", "send": "0.17.1", "serve-static": "1.14.1", "setprototypeof": "1.1.1", "statuses": "~1.5.0", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, "engines": { "node": ">= 0.10.0" } }, "node_modules/extend": { "version": "3.0.2", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, "node_modules/external-editor": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "dev": true, "dependencies": { "chardet": "^0.4.0", "iconv-lite": "^0.4.17", "tmp": "^0.0.33" }, "engines": { "node": ">=0.12" } }, "node_modules/extsprintf": { "version": "1.3.0", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true, "engines": [ "node >=0.6.0" ] }, "node_modules/fast-deep-equal": { "version": "3.1.3", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, "node_modules/figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "dependencies": { "escape-string-regexp": "^1.0.5" }, "engines": { "node": ">=4" } }, "node_modules/file-entry-cache": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true, "dependencies": { "flat-cache": "^1.2.1", "object-assign": "^4.0.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/fill-range": { "version": "7.0.1", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/finalhandler": { "version": "1.1.2", "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "~2.3.0", "parseurl": "~1.3.3", "statuses": "~1.5.0", "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" } }, "node_modules/find-cache-dir": { "version": "2.1.0", "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, "dependencies": { "commondir": "^1.0.1", "make-dir": "^2.0.0", "pkg-dir": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/find-up": { "version": "3.0.0", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "dependencies": { "locate-path": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/findit": { "version": "2.0.0", "integrity": "sha1-ZQnwEmr0wXhVHPqZOU4DLhOk1W4=", "dev": true }, "node_modules/flat-cache": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", "dev": true, "dependencies": { "circular-json": "^0.3.1", "graceful-fs": "^4.1.2", "rimraf": "~2.6.2", "write": "^0.2.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/flat-cache/node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/flat-cache/node_modules/rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "node_modules/flow-parser": { "version": "0.161.0", "integrity": "sha512-QRGREwIVspAeffxidkelrU6yPnEF/US4iYoGuf73+y4ZEXgCJUFje4jYfgE4g59TbSLHntdWfM69wiN9Y9swKw==", "dev": true, "engines": { "node": ">=0.4.0" } }, "node_modules/flow-remove-types": { "version": "2.161.0", "integrity": "sha512-5HZYVgldoQWQfMXMwRb/vsbA0G0OmUE3fIGFGVarMYPoLXPzXj0qxeOzOF0/Iyw2+yVWMSQnj1VeEUalf4GBxw==", "dev": true, "dependencies": { "flow-parser": "^0.161.0", "pirates": "^3.0.2", "vlq": "^0.2.1" }, "bin": { "flow-node": "flow-node", "flow-remove-types": "flow-remove-types" }, "engines": { "node": ">=4" } }, "node_modules/follow-redirects": { "version": "1.14.8", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], "engines": { "node": ">=4.0" }, "peerDependenciesMeta": { "debug": { "optional": true } } }, "node_modules/foreground-child": { "version": "1.5.6", "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", "dev": true, "dependencies": { "cross-spawn": "^4", "signal-exit": "^3.0.0" } }, "node_modules/forever-agent": { "version": "0.6.1", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true, "engines": { "node": "*" } }, "node_modules/form-data": { "version": "2.3.3", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", "mime-types": "^2.1.12" }, "engines": { "node": ">= 0.12" } }, "node_modules/forwarded": { "version": "0.2.0", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/fresh": { "version": "0.5.2", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/fs-exists-cached": { "version": "1.0.0", "integrity": "sha1-zyVVTKBQ3EmuZla0HeQiWJidy84=", "dev": true }, "node_modules/fs.realpath": { "version": "1.0.0", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "node_modules/function-bind": { "version": "1.1.1", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "node_modules/function-loop": { "version": "1.0.2", "integrity": "sha512-Iw4MzMfS3udk/rqxTiDDCllhGwlOrsr50zViTOO/W6lS/9y6B1J0BD2VZzrnWUYBJsl3aeqjgR5v7bWWhZSYbA==", "dev": true }, "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, "node_modules/get-caller-file": { "version": "2.0.5", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/getpass": { "version": "0.1.7", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "dependencies": { "assert-plus": "^1.0.0" } }, "node_modules/glob-parent": { "version": "5.1.2", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { "is-glob": "^4.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/graceful-fs": { "version": "4.2.8", "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, "node_modules/har-schema": { "version": "2.0.0", "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/har-validator": { "version": "5.1.5", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "deprecated": "this library is no longer supported", "dev": true, "dependencies": { "ajv": "^6.12.3", "har-schema": "^2.0.0" }, "engines": { "node": ">=6" } }, "node_modules/has": { "version": "1.0.3", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "dependencies": { "function-bind": "^1.1.1" }, "engines": { "node": ">= 0.4.0" } }, "node_modules/has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "dependencies": { "ansi-regex": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/has-flag": { "version": "3.0.0", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/hasha": { "version": "3.0.0", "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", "dev": true, "dependencies": { "is-stream": "^1.0.1" }, "engines": { "node": ">=4" } }, "node_modules/he": { "version": "1.2.0", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "bin": { "he": "bin/he" } }, "node_modules/hosted-git-info": { "version": "2.8.9", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "dependencies": { "whatwg-encoding": "^2.0.0" }, "engines": { "node": ">=12" } }, "node_modules/html-escaper": { "version": "2.0.2", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "node_modules/http-errors": { "version": "1.7.2", "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dev": true, "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.1", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.0" }, "engines": { "node": ">= 0.6" } }, "node_modules/http-proxy": { "version": "1.18.1", "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/http-signature": { "version": "1.2.0", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", "sshpk": "^1.7.0" }, "engines": { "node": ">=0.8", "npm": ">=1.3.7" } }, "node_modules/iconv-lite": { "version": "0.4.24", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, "engines": { "node": ">=0.10.0" } }, "node_modules/ignore": { "version": "3.3.10", "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", "dev": true }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/imurmurhash": { "version": "0.1.4", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true, "engines": { "node": ">=0.8.19" } }, "node_modules/inflight": { "version": "1.0.6", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "node_modules/inherits": { "version": "2.0.3", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, "node_modules/inquirer": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "dev": true, "dependencies": { "ansi-escapes": "^3.0.0", "chalk": "^2.0.0", "cli-cursor": "^2.1.0", "cli-width": "^2.0.0", "external-editor": "^2.0.4", "figures": "^2.0.0", "lodash": "^4.3.0", "mute-stream": "0.0.7", "run-async": "^2.2.0", "rx-lite": "^4.0.8", "rx-lite-aggregates": "^4.0.8", "string-width": "^2.1.0", "strip-ansi": "^4.0.0", "through": "^2.3.6" } }, "node_modules/inquirer/node_modules/ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/inquirer/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { "color-convert": "^1.9.0" }, "engines": { "node": ">=4" } }, "node_modules/inquirer/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" }, "engines": { "node": ">=4" } }, "node_modules/inquirer/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "dependencies": { "color-name": "1.1.3" } }, "node_modules/inquirer/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "node_modules/inquirer/node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "node_modules/inquirer/node_modules/mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, "node_modules/inquirer/node_modules/strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "dependencies": { "ansi-regex": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/inquirer/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "dependencies": { "has-flag": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/invert-kv": { "version": "1.0.0", "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/ipaddr.js": { "version": "1.9.1", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, "engines": { "node": ">= 0.10" } }, "node_modules/is-arrayish": { "version": "0.2.1", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, "node_modules/is-binary-path": { "version": "2.1.0", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, "engines": { "node": ">=8" } }, "node_modules/is-core-module": { "version": "2.7.0", "integrity": "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==", "dev": true, "dependencies": { "has": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-extglob": { "version": "2.1.1", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/is-fullwidth-code-point": { "version": "2.0.0", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/is-glob": { "version": "4.0.3", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-number": { "version": "7.0.0", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "engines": { "node": ">=0.12.0" } }, "node_modules/is-resolvable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", "dev": true }, "node_modules/is-stream": { "version": "1.1.0", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/is-typedarray": { "version": "1.0.0", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, "node_modules/isexe": { "version": "2.0.0", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "node_modules/isstream": { "version": "0.1.2", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, "node_modules/istanbul-lib-coverage": { "version": "2.0.5", "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/istanbul-lib-hook": { "version": "2.0.7", "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", "dev": true, "dependencies": { "append-transform": "^1.0.0" }, "engines": { "node": ">=6" } }, "node_modules/istanbul-lib-instrument": { "version": "3.3.0", "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", "dev": true, "dependencies": { "@babel/generator": "^7.4.0", "@babel/parser": "^7.4.3", "@babel/template": "^7.4.0", "@babel/traverse": "^7.4.3", "@babel/types": "^7.4.0", "istanbul-lib-coverage": "^2.0.5", "semver": "^6.0.0" }, "engines": { "node": ">=6" } }, "node_modules/istanbul-lib-processinfo": { "version": "1.0.0", "integrity": "sha512-FY0cPmWa4WoQNlvB8VOcafiRoB5nB+l2Pz2xGuXHRSy1KM8QFOYfz/rN+bGMCAeejrY3mrpF5oJHcN0s/garCg==", "dev": true, "dependencies": { "archy": "^1.0.0", "cross-spawn": "^6.0.5", "istanbul-lib-coverage": "^2.0.3", "rimraf": "^2.6.3", "uuid": "^3.3.2" } }, "node_modules/istanbul-lib-processinfo/node_modules/cross-spawn": { "version": "6.0.5", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" }, "engines": { "node": ">=4.8" } }, "node_modules/istanbul-lib-processinfo/node_modules/semver": { "version": "5.7.1", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "bin": { "semver": "bin/semver" } }, "node_modules/istanbul-lib-processinfo/node_modules/which": { "version": "1.3.1", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { "which": "bin/which" } }, "node_modules/istanbul-lib-report": { "version": "2.0.8", "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", "dev": true, "dependencies": { "istanbul-lib-coverage": "^2.0.5", "make-dir": "^2.1.0", "supports-color": "^6.1.0" }, "engines": { "node": ">=6" } }, "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "6.1.0", "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "dependencies": { "has-flag": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/istanbul-lib-source-maps": { "version": "3.0.6", "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", "dev": true, "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^2.0.5", "make-dir": "^2.1.0", "rimraf": "^2.6.3", "source-map": "^0.6.1" }, "engines": { "node": ">=6" } }, "node_modules/istanbul-lib-source-maps/node_modules/debug": { "version": "4.3.2", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/istanbul-lib-source-maps/node_modules/ms": { "version": "2.1.2", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "node_modules/istanbul-lib-source-maps/node_modules/source-map": { "version": "0.6.1", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/istanbul-reports": { "version": "2.2.7", "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", "dev": true, "dependencies": { "html-escaper": "^2.0.0" }, "engines": { "node": ">=6" } }, "node_modules/jackspeak": { "version": "1.4.0", "integrity": "sha512-VDcSunT+wcccoG46FtzuBAyQKlzhHjli4q31e1fIHGOsRspqNUFjVzGb+7eIFDlTvqLygxapDHPHS0ouT2o/tw==", "dev": true, "dependencies": { "cliui": "^4.1.0" }, "engines": { "node": ">=8" } }, "node_modules/jsbn": { "version": "0.1.1", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "node_modules/json-schema": { "version": "0.2.3", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "dev": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, "node_modules/json-stringify-safe": { "version": "5.0.1", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, "node_modules/jsonc-parser": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", "dev": true }, "node_modules/jsprim": { "version": "1.4.1", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, "engines": [ "node >=0.6.0" ], "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", "json-schema": "0.2.3", "verror": "1.10.0" } }, "node_modules/lcid": { "version": "1.0.0", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "dependencies": { "invert-kv": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/lcov-parse": { "version": "1.0.0", "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", "dev": true, "bin": { "lcov-parse": "bin/cli.js" } }, "node_modules/levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/load-json-file": { "version": "4.0.0", "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", "pify": "^3.0.0", "strip-bom": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/load-json-file/node_modules/pify": { "version": "3.0.0", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/load-json-file/node_modules/strip-bom": { "version": "3.0.0", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/locate-path": { "version": "3.0.0", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/locate-path/node_modules/path-exists": { "version": "3.0.0", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/lodash.flattendeep": { "version": "4.4.0", "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, "node_modules/log-driver": { "version": "1.2.7", "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", "dev": true, "engines": { "node": ">=0.8.6" } }, "node_modules/loose-envify": { "version": "1.4.0", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "node_modules/loose-envify/node_modules/js-tokens": { "version": "4.0.0", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "node_modules/lru-cache": { "version": "4.1.5", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "dependencies": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" } }, "node_modules/make-dir": { "version": "2.1.0", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "dependencies": { "pify": "^4.0.1", "semver": "^5.6.0" }, "engines": { "node": ">=6" } }, "node_modules/make-dir/node_modules/semver": { "version": "5.7.1", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "bin": { "semver": "bin/semver" } }, "node_modules/make-error": { "version": "1.3.6", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, "node_modules/media-typer": { "version": "0.3.0", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mem": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "dependencies": { "mimic-fn": "^1.0.0" }, "engines": { "node": ">=4" } }, "node_modules/merge-descriptors": { "version": "1.0.1", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, "node_modules/merge-source-map": { "version": "1.1.0", "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", "dev": true, "dependencies": { "source-map": "^0.6.1" } }, "node_modules/merge-source-map/node_modules/source-map": { "version": "0.6.1", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/methods": { "version": "1.1.2", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime": { "version": "1.6.0", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "bin": { "mime": "cli.js" }, "engines": { "node": ">=4" } }, "node_modules/mime-db": { "version": "1.50.0", "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.33", "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", "dev": true, "dependencies": { "mime-db": "1.50.0" }, "engines": { "node": ">= 0.6" } }, "node_modules/mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/minimatch": { "version": "3.0.4", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, "engines": { "node": "*" } }, "node_modules/minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "node_modules/minipass": { "version": "3.1.5", "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", "dev": true, "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/minipass/node_modules/yallist": { "version": "4.0.0", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/mkdirp": { "version": "0.5.5", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dependencies": { "minimist": "^1.2.5" }, "bin": { "mkdirp": "bin/cmd.js" } }, "node_modules/ms": { "version": "2.0.0", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "node_modules/negotiator": { "version": "0.6.2", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/nested-error-stacks": { "version": "2.1.0", "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", "dev": true }, "node_modules/nice-try": { "version": "1.0.5", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, "node_modules/node-modules-regexp": { "version": "1.0.0", "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-package-data": { "version": "2.5.0", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } }, "node_modules/normalize-package-data/node_modules/semver": { "version": "5.7.1", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "bin": { "semver": "bin/semver" } }, "node_modules/normalize-path": { "version": "3.0.0", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "dependencies": { "path-key": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/number-is-nan": { "version": "1.0.1", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/nyc": { "version": "14.1.1", "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==", "dev": true, "dependencies": { "archy": "^1.0.0", "caching-transform": "^3.0.2", "convert-source-map": "^1.6.0", "cp-file": "^6.2.0", "find-cache-dir": "^2.1.0", "find-up": "^3.0.0", "foreground-child": "^1.5.6", "glob": "^7.1.3", "istanbul-lib-coverage": "^2.0.5", "istanbul-lib-hook": "^2.0.7", "istanbul-lib-instrument": "^3.3.0", "istanbul-lib-report": "^2.0.8", "istanbul-lib-source-maps": "^3.0.6", "istanbul-reports": "^2.2.4", "js-yaml": "^3.13.1", "make-dir": "^2.1.0", "merge-source-map": "^1.1.0", "resolve-from": "^4.0.0", "rimraf": "^2.6.3", "signal-exit": "^3.0.2", "spawn-wrap": "^1.4.2", "test-exclude": "^5.2.3", "uuid": "^3.3.2", "yargs": "^13.2.2", "yargs-parser": "^13.0.0" }, "bin": { "nyc": "bin/nyc.js" }, "engines": { "node": ">=6" } }, "node_modules/nyc/node_modules/ansi-regex": { "version": "4.1.0", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/nyc/node_modules/ansi-styles": { "version": "3.2.1", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { "color-convert": "^1.9.0" }, "engines": { "node": ">=4" } }, "node_modules/nyc/node_modules/cliui": { "version": "5.0.0", "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "dependencies": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", "wrap-ansi": "^5.1.0" } }, "node_modules/nyc/node_modules/color-convert": { "version": "1.9.3", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "dependencies": { "color-name": "1.1.3" } }, "node_modules/nyc/node_modules/color-name": { "version": "1.1.3", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "node_modules/nyc/node_modules/esprima": { "version": "4.0.1", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" }, "engines": { "node": ">=4" } }, "node_modules/nyc/node_modules/glob": { "version": "7.2.0", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/nyc/node_modules/js-yaml": { "version": "3.14.1", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/nyc/node_modules/string-width": { "version": "3.1.0", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "dependencies": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" }, "engines": { "node": ">=6" } }, "node_modules/nyc/node_modules/strip-ansi": { "version": "5.2.0", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "dependencies": { "ansi-regex": "^4.1.0" }, "engines": { "node": ">=6" } }, "node_modules/nyc/node_modules/wrap-ansi": { "version": "5.1.0", "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "dependencies": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", "strip-ansi": "^5.0.0" }, "engines": { "node": ">=6" } }, "node_modules/nyc/node_modules/y18n": { "version": "4.0.3", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "node_modules/nyc/node_modules/yargs": { "version": "13.3.2", "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "dependencies": { "cliui": "^5.0.0", "find-up": "^3.0.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^3.0.0", "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^13.1.2" } }, "node_modules/oauth-sign": { "version": "0.9.0", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true, "engines": { "node": "*" } }, "node_modules/object-assign": { "version": "4.1.1", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/on-finished": { "version": "2.3.0", "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "dev": true, "dependencies": { "ee-first": "1.1.1" }, "engines": { "node": ">= 0.8" } }, "node_modules/once": { "version": "1.4.0", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "dependencies": { "mimic-fn": "^1.0.0" }, "engines": { "node": ">=4" } }, "node_modules/opener": { "version": "1.5.2", "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "bin": { "opener": "bin/opener-bin.js" } }, "node_modules/optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "dependencies": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", "levn": "~0.3.0", "prelude-ls": "~1.1.2", "type-check": "~0.3.2", "word-wrap": "~1.2.3" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/os-homedir": { "version": "1.0.2", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/os-tmpdir": { "version": "1.0.2", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/own-or": { "version": "1.0.0", "integrity": "sha1-Tod/vtqaLsgAD7wLyuOWRe6L+Nw=", "dev": true }, "node_modules/own-or-env": { "version": "1.0.2", "integrity": "sha512-NQ7v0fliWtK7Lkb+WdFqe6ky9XAzYmlkXthQrBbzlYbmFKoAYbDDcwmOm6q8kOuwSRXW8bdL5ORksploUJmWgw==", "dev": true, "dependencies": { "own-or": "^1.0.0" } }, "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/p-limit": { "version": "2.3.0", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { "p-try": "^2.0.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { "version": "3.0.0", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "dependencies": { "p-limit": "^2.0.0" }, "engines": { "node": ">=6" } }, "node_modules/p-try": { "version": "2.2.0", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/package-hash": { "version": "3.0.0", "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", "dev": true, "dependencies": { "graceful-fs": "^4.1.15", "hasha": "^3.0.0", "lodash.flattendeep": "^4.4.0", "release-zalgo": "^1.0.0" }, "engines": { "node": ">=6" } }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "dependencies": { "callsites": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/parse-json": { "version": "4.0.0", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" }, "engines": { "node": ">=4" } }, "node_modules/parseurl": { "version": "1.3.3", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/path-is-inside": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", "dev": true }, "node_modules/path-key": { "version": "2.0.1", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/path-parse": { "version": "1.0.7", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "node_modules/path-to-regexp": { "version": "0.1.7", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", "dev": true }, "node_modules/path-type": { "version": "3.0.0", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "dependencies": { "pify": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/path-type/node_modules/pify": { "version": "3.0.0", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/performance-now": { "version": "2.1.0", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, "node_modules/picomatch": { "version": "2.3.0", "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true, "engines": { "node": ">=8.6" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/pify": { "version": "4.0.1", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/pirates": { "version": "3.0.2", "integrity": "sha512-c5CgUJq6H2k6MJz72Ak1F5sN9n9wlSlJyEnwvpm9/y3WB4E3pHBDT2c6PEiS1vyJvq2bUxUAIu0EGf8Cx4Ic7Q==", "dev": true, "dependencies": { "node-modules-regexp": "^1.0.0" }, "engines": { "node": ">= 4" } }, "node_modules/pkg-dir": { "version": "3.0.0", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "dependencies": { "find-up": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/pluralize": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/portfinder": { "version": "1.0.28", "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "dependencies": { "async": "^2.6.2", "debug": "^3.1.1", "mkdirp": "^0.5.5" }, "engines": { "node": ">= 0.12.0" } }, "node_modules/portfinder/node_modules/async": { "version": "2.6.3", "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "dependencies": { "lodash": "^4.17.14" } }, "node_modules/portfinder/node_modules/debug": { "version": "3.2.7", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dependencies": { "ms": "^2.1.1" } }, "node_modules/portfinder/node_modules/lodash": { "version": "4.17.21", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/portfinder/node_modules/ms": { "version": "2.1.3", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/process-nextick-args": { "version": "2.0.1", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, "engines": { "node": ">=0.4.0" } }, "node_modules/prop-types": { "version": "15.7.2", "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", "dev": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.8.1" } }, "node_modules/proxy-addr": { "version": "2.0.7", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" }, "engines": { "node": ">= 0.10" } }, "node_modules/pseudomap": { "version": "1.0.2", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, "node_modules/psl": { "version": "1.8.0", "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", "dev": true }, "node_modules/punycode": { "version": "2.1.1", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/qs": { "version": "6.7.0", "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "engines": { "node": ">=0.6" } }, "node_modules/ramda": { "version": "0.25.0", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.25.0.tgz", "integrity": "sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ==", "dev": true }, "node_modules/range-parser": { "version": "1.2.1", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { "version": "2.4.0", "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "dev": true, "dependencies": { "bytes": "3.1.0", "http-errors": "1.7.2", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, "engines": { "node": ">= 0.8" } }, "node_modules/react": { "version": "16.14.0", "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", "dev": true, "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2" }, "engines": { "node": ">=0.10.0" } }, "node_modules/react-is": { "version": "16.13.1", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true }, "node_modules/read-pkg": { "version": "3.0.0", "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", "path-type": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/read-pkg-up": { "version": "4.0.0", "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", "dev": true, "dependencies": { "find-up": "^3.0.0", "read-pkg": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/readdirp": { "version": "3.6.0", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "dependencies": { "picomatch": "^2.2.1" }, "engines": { "node": ">=8.10.0" } }, "node_modules/regexpp": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", "dev": true, "engines": { "node": ">=4.0.0" } }, "node_modules/release-zalgo": { "version": "1.0.0", "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", "dev": true, "dependencies": { "es6-error": "^4.0.1" }, "engines": { "node": ">=4" } }, "node_modules/request": { "version": "2.88.2", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", "dev": true, "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", "caseless": "~0.12.0", "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~2.3.2", "har-validator": "~5.1.3", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "oauth-sign": "~0.9.0", "performance-now": "^2.1.0", "qs": "~6.5.2", "safe-buffer": "^5.1.2", "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" }, "engines": { "node": ">= 6" } }, "node_modules/request/node_modules/qs": { "version": "6.5.2", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true, "engines": { "node": ">=0.6" } }, "node_modules/require-directory": { "version": "2.1.1", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/require-main-filename": { "version": "2.0.0", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "node_modules/require-uncached": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "dev": true, "dependencies": { "caller-path": "^0.1.0", "resolve-from": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/require-uncached/node_modules/resolve-from": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/requires-port": { "version": "1.0.0", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "node_modules/resolve": { "version": "1.20.0", "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "dependencies": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-from": { "version": "4.0.0", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, "dependencies": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" }, "engines": { "node": ">=4" } }, "node_modules/rimraf": { "version": "2.7.1", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "node_modules/rimraf/node_modules/glob": { "version": "7.2.0", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, "engines": { "node": ">=0.12.0" } }, "node_modules/rx-lite": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", "dev": true }, "node_modules/rx-lite-aggregates": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", "dev": true, "dependencies": { "rx-lite": "*" } }, "node_modules/safe-buffer": { "version": "5.1.2", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/safer-buffer": { "version": "2.1.2", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/secure-compare": { "version": "3.0.1", "integrity": "sha1-8aAymzCLIh+uN7mXTz1XjQypmeM=" }, "node_modules/semver": { "version": "6.3.0", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/send": { "version": "0.17.1", "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "dev": true, "dependencies": { "debug": "2.6.9", "depd": "~1.1.2", "destroy": "~1.0.4", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", "http-errors": "~1.7.2", "mime": "1.6.0", "ms": "2.1.1", "on-finished": "~2.3.0", "range-parser": "~1.2.1", "statuses": "~1.5.0" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/send/node_modules/ms": { "version": "2.1.1", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, "node_modules/serve-static": { "version": "1.14.1", "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "dev": true, "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", "send": "0.17.1" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/set-blocking": { "version": "2.0.0", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, "node_modules/setprototypeof": { "version": "1.1.1", "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, "node_modules/shebang-command": { "version": "1.2.0", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "dependencies": { "shebang-regex": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/shebang-regex": { "version": "1.0.0", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/signal-exit": { "version": "3.0.5", "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", "dev": true }, "node_modules/slice-ansi": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", "dev": true, "dependencies": { "is-fullwidth-code-point": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/source-map": { "version": "0.5.7", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/spawn-wrap": { "version": "1.4.3", "integrity": "sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==", "dev": true, "dependencies": { "foreground-child": "^1.5.6", "mkdirp": "^0.5.0", "os-homedir": "^1.0.1", "rimraf": "^2.6.2", "signal-exit": "^3.0.2", "which": "^1.3.0" } }, "node_modules/spawn-wrap/node_modules/which": { "version": "1.3.1", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { "which": "bin/which" } }, "node_modules/spdx-correct": { "version": "3.1.1", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-exceptions": { "version": "2.3.0", "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-license-ids": { "version": "3.0.10", "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", "dev": true }, "node_modules/sprintf-js": { "version": "1.0.3", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, "node_modules/sshpk": { "version": "1.16.1", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", "bcrypt-pbkdf": "^1.0.0", "dashdash": "^1.12.0", "ecc-jsbn": "~0.1.1", "getpass": "^0.1.1", "jsbn": "~0.1.0", "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" }, "bin": { "sshpk-conv": "bin/sshpk-conv", "sshpk-sign": "bin/sshpk-sign", "sshpk-verify": "bin/sshpk-verify" }, "engines": { "node": ">=0.10.0" } }, "node_modules/stack-utils": { "version": "1.0.5", "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", "dev": true, "dependencies": { "escape-string-regexp": "^2.0.0" }, "engines": { "node": ">=8" } }, "node_modules/stack-utils/node_modules/escape-string-regexp": { "version": "2.0.0", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/statuses": { "version": "1.5.0", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/string-width": { "version": "2.1.1", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" }, "engines": { "node": ">=4" } }, "node_modules/string-width/node_modules/ansi-regex": { "version": "3.0.0", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/string-width/node_modules/strip-ansi": { "version": "4.0.0", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "dependencies": { "ansi-regex": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/strip-ansi": { "version": "3.0.1", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "dependencies": { "ansi-regex": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true, "engines": { "node": ">=0.8.0" } }, "node_modules/table": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", "dev": true, "dependencies": { "ajv": "^5.2.3", "ajv-keywords": "^2.1.0", "chalk": "^2.1.0", "lodash": "^4.17.4", "slice-ansi": "1.0.0", "string-width": "^2.1.1" } }, "node_modules/table/node_modules/ajv": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "dependencies": { "co": "^4.6.0", "fast-deep-equal": "^1.0.0", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.3.0" } }, "node_modules/table/node_modules/ajv-keywords": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", "dev": true, "peerDependencies": { "ajv": "^5.0.0" } }, "node_modules/table/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { "color-convert": "^1.9.0" }, "engines": { "node": ">=4" } }, "node_modules/table/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" }, "engines": { "node": ">=4" } }, "node_modules/table/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "dependencies": { "color-name": "1.1.3" } }, "node_modules/table/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "node_modules/table/node_modules/fast-deep-equal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", "dev": true }, "node_modules/table/node_modules/json-schema-traverse": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", "dev": true }, "node_modules/table/node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "node_modules/table/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "dependencies": { "has-flag": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/tap": { "version": "14.11.0", "integrity": "sha512-z8qnNFVyIjLh/bNoTLFRkEk09XZUDAZbCkz/BjvHHly3ao5H+y60gPnedALfheEjA6dA4tpp/mrKq2NWlMuq0A==", "bundleDependencies": [ "ink", "treport", "@types/react", "import-jsx", "minipass", "signal-exit", "tap-parser", "tap-yaml", "yaml" ], "dev": true, "dependencies": { "@types/react": "^16.9.16", "async-hook-domain": "^1.1.3", "bind-obj-methods": "^2.0.0", "browser-process-hrtime": "^1.0.0", "chokidar": "^3.3.0", "color-support": "^1.1.0", "coveralls": "^3.0.11", "diff": "^4.0.1", "esm": "^3.2.25", "findit": "^2.0.0", "flow-remove-types": "^2.112.0", "foreground-child": "^1.3.3", "fs-exists-cached": "^1.0.0", "function-loop": "^1.0.2", "glob": "^7.1.6", "import-jsx": "^3.1.0", "ink": "^2.6.0", "isexe": "^2.0.0", "istanbul-lib-processinfo": "^1.0.0", "jackspeak": "^1.4.0", "minipass": "^3.1.1", "mkdirp": "^0.5.4", "nyc": "^14.1.1", "opener": "^1.5.1", "own-or": "^1.0.0", "own-or-env": "^1.0.1", "react": "^16.12.0", "rimraf": "^2.7.1", "signal-exit": "^3.0.0", "source-map-support": "^0.5.16", "stack-utils": "^1.0.3", "tap-mocha-reporter": "^5.0.0", "tap-parser": "^10.0.1", "tap-yaml": "^1.0.0", "tcompare": "^3.0.0", "treport": "^1.0.2", "trivial-deferred": "^1.0.1", "ts-node": "^8.5.2", "typescript": "^3.7.2", "which": "^2.0.2", "write-file-atomic": "^3.0.1", "yaml": "^1.7.2", "yapool": "^1.0.0" }, "bin": { "tap": "bin/run.js" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/tap-mocha-reporter": { "version": "5.0.1", "integrity": "sha512-1knFWOwd4khx/7uSEnUeaP9IPW3w+sqTgJMhrwah6t46nZ8P25atOKAjSvVDsT67lOPu0nfdOqUwoyKn+3E5pA==", "dev": true, "dependencies": { "color-support": "^1.1.0", "debug": "^4.1.1", "diff": "^4.0.1", "escape-string-regexp": "^2.0.0", "glob": "^7.0.5", "tap-parser": "^10.0.0", "tap-yaml": "^1.0.0", "unicode-length": "^2.0.2" }, "bin": { "tap-mocha-reporter": "index.js" }, "engines": { "node": ">= 8" } }, "node_modules/tap-mocha-reporter/node_modules/debug": { "version": "4.3.2", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/tap-mocha-reporter/node_modules/escape-string-regexp": { "version": "2.0.0", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/tap-mocha-reporter/node_modules/glob": { "version": "7.2.0", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/tap-mocha-reporter/node_modules/ms": { "version": "2.1.2", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "node_modules/tap-parser": { "version": "10.1.0", "integrity": "sha512-FujQeciDaOiOvaIVGS1Rpb0v4R6XkOjvWCWowlz5oKuhPkEJ8U6pxgqt38xuzYhPt8dWEnfHn2jqpZdJEkW7pA==", "dev": true, "dependencies": { "events-to-array": "^1.0.1", "minipass": "^3.0.0", "tap-yaml": "^1.0.0" }, "bin": { "tap-parser": "bin/cmd.js" }, "engines": { "node": ">= 8" } }, "node_modules/tap-yaml": { "version": "1.0.0", "integrity": "sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ==", "dev": true, "dependencies": { "yaml": "^1.5.0" } }, "node_modules/tap/node_modules/@babel/code-frame": { "version": "7.10.4", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/highlight": "^7.10.4" } }, "node_modules/tap/node_modules/@babel/core": { "version": "7.10.5", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/generator": "^7.10.5", "@babel/helper-module-transforms": "^7.10.5", "@babel/helpers": "^7.10.4", "@babel/parser": "^7.10.5", "@babel/template": "^7.10.4", "@babel/traverse": "^7.10.5", "@babel/types": "^7.10.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", "json5": "^2.1.2", "lodash": "^4.17.19", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" }, "engines": { "node": ">=6.9.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/babel" } }, "node_modules/tap/node_modules/@babel/core/node_modules/source-map": { "version": "0.5.7", "dev": true, "inBundle": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/tap/node_modules/@babel/generator": { "version": "7.10.5", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/types": "^7.10.5", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, "node_modules/tap/node_modules/@babel/generator/node_modules/source-map": { "version": "0.5.7", "dev": true, "inBundle": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/tap/node_modules/@babel/helper-annotate-as-pure": { "version": "7.10.4", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/types": "^7.10.4" } }, "node_modules/tap/node_modules/@babel/helper-builder-react-jsx": { "version": "7.10.4", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/types": "^7.10.4" } }, "node_modules/tap/node_modules/@babel/helper-builder-react-jsx-experimental": { "version": "7.10.5", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-module-imports": "^7.10.4", "@babel/types": "^7.10.5" } }, "node_modules/tap/node_modules/@babel/helper-function-name": { "version": "7.10.4", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/helper-get-function-arity": "^7.10.4", "@babel/template": "^7.10.4", "@babel/types": "^7.10.4" } }, "node_modules/tap/node_modules/@babel/helper-get-function-arity": { "version": "7.10.4", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/types": "^7.10.4" } }, "node_modules/tap/node_modules/@babel/helper-member-expression-to-functions": { "version": "7.10.5", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/types": "^7.10.5" } }, "node_modules/tap/node_modules/@babel/helper-module-imports": { "version": "7.10.4", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/types": "^7.10.4" } }, "node_modules/tap/node_modules/@babel/helper-module-transforms": { "version": "7.10.5", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.10.4", "@babel/helper-replace-supers": "^7.10.4", "@babel/helper-simple-access": "^7.10.4", "@babel/helper-split-export-declaration": "^7.10.4", "@babel/template": "^7.10.4", "@babel/types": "^7.10.5", "lodash": "^4.17.19" } }, "node_modules/tap/node_modules/@babel/helper-optimise-call-expression": { "version": "7.10.4", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/types": "^7.10.4" } }, "node_modules/tap/node_modules/@babel/helper-plugin-utils": { "version": "7.10.4", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/tap/node_modules/@babel/helper-replace-supers": { "version": "7.10.4", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/helper-member-expression-to-functions": "^7.10.4", "@babel/helper-optimise-call-expression": "^7.10.4", "@babel/traverse": "^7.10.4", "@babel/types": "^7.10.4" } }, "node_modules/tap/node_modules/@babel/helper-simple-access": { "version": "7.10.4", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/template": "^7.10.4", "@babel/types": "^7.10.4" } }, "node_modules/tap/node_modules/@babel/helper-split-export-declaration": { "version": "7.10.4", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/types": "^7.10.4" } }, "node_modules/tap/node_modules/@babel/helper-validator-identifier": { "version": "7.10.4", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/tap/node_modules/@babel/helpers": { "version": "7.10.4", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/template": "^7.10.4", "@babel/traverse": "^7.10.4", "@babel/types": "^7.10.4" } }, "node_modules/tap/node_modules/@babel/highlight": { "version": "7.10.4", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "node_modules/tap/node_modules/@babel/parser": { "version": "7.10.5", "dev": true, "inBundle": true, "license": "MIT", "bin": { "parser": "bin/babel-parser.js" }, "engines": { "node": ">=6.0.0" } }, "node_modules/tap/node_modules/@babel/plugin-proposal-object-rest-spread": { "version": "7.10.4", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-transform-parameters": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/tap/node_modules/@babel/plugin-syntax-jsx": { "version": "7.10.4", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/tap/node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/tap/node_modules/@babel/plugin-transform-destructuring": { "version": "7.10.4", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/tap/node_modules/@babel/plugin-transform-parameters": { "version": "7.10.5", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/helper-get-function-arity": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/tap/node_modules/@babel/plugin-transform-react-jsx": { "version": "7.10.4", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/helper-builder-react-jsx": "^7.10.4", "@babel/helper-builder-react-jsx-experimental": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-jsx": "^7.10.4" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/tap/node_modules/@babel/template": { "version": "7.10.4", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/parser": "^7.10.4", "@babel/types": "^7.10.4" } }, "node_modules/tap/node_modules/@babel/traverse": { "version": "7.10.5", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/generator": "^7.10.5", "@babel/helper-function-name": "^7.10.4", "@babel/helper-split-export-declaration": "^7.10.4", "@babel/parser": "^7.10.5", "@babel/types": "^7.10.5", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.19" } }, "node_modules/tap/node_modules/@babel/types": { "version": "7.10.5", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } }, "node_modules/tap/node_modules/@types/color-name": { "version": "1.1.1", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/tap/node_modules/@types/prop-types": { "version": "15.7.3", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/tap/node_modules/@types/react": { "version": "16.9.43", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@types/prop-types": "*", "csstype": "^2.2.0" } }, "node_modules/tap/node_modules/@types/yoga-layout": { "version": "1.9.2", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/tap/node_modules/ansi-escapes": { "version": "4.3.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "type-fest": "^0.11.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/tap/node_modules/ansi-regex": { "version": "5.0.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/tap/node_modules/ansi-styles": { "version": "3.2.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, "engines": { "node": ">=4" } }, "node_modules/tap/node_modules/ansicolors": { "version": "0.3.2", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/tap/node_modules/arrify": { "version": "2.0.1", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/tap/node_modules/astral-regex": { "version": "2.0.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/tap/node_modules/auto-bind": { "version": "4.0.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/tap/node_modules/caller-callsite": { "version": "2.0.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "callsites": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/tap/node_modules/caller-path": { "version": "2.0.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "caller-callsite": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/tap/node_modules/callsites": { "version": "2.0.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/tap/node_modules/cardinal": { "version": "2.1.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "ansicolors": "~0.3.2", "redeyed": "~2.1.0" }, "bin": { "cdl": "bin/cdl.js" } }, "node_modules/tap/node_modules/chalk": { "version": "2.4.2", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" }, "engines": { "node": ">=4" } }, "node_modules/tap/node_modules/ci-info": { "version": "2.0.0", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/tap/node_modules/cli-cursor": { "version": "3.1.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, "engines": { "node": ">=8" } }, "node_modules/tap/node_modules/cli-truncate": { "version": "2.1.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/tap/node_modules/color-convert": { "version": "1.9.3", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/tap/node_modules/color-name": { "version": "1.1.3", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/tap/node_modules/convert-source-map": { "version": "1.7.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.1.1" } }, "node_modules/tap/node_modules/convert-source-map/node_modules/safe-buffer": { "version": "5.1.2", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/tap/node_modules/csstype": { "version": "2.6.11", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/tap/node_modules/debug": { "version": "4.1.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/tap/node_modules/emoji-regex": { "version": "8.0.0", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/tap/node_modules/escape-string-regexp": { "version": "1.0.5", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/tap/node_modules/esprima": { "version": "4.0.1", "dev": true, "inBundle": true, "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" }, "engines": { "node": ">=4" } }, "node_modules/tap/node_modules/events-to-array": { "version": "1.1.2", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/tap/node_modules/gensync": { "version": "1.0.0-beta.1", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/tap/node_modules/glob": { "version": "7.2.0", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/tap/node_modules/globals": { "version": "11.12.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/tap/node_modules/has-flag": { "version": "3.0.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/tap/node_modules/import-jsx": { "version": "3.1.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@babel/core": "^7.5.5", "@babel/plugin-proposal-object-rest-spread": "^7.5.5", "@babel/plugin-transform-destructuring": "^7.5.0", "@babel/plugin-transform-react-jsx": "^7.3.0", "caller-path": "^2.0.0", "resolve-from": "^3.0.0" }, "engines": { "node": ">= 4" } }, "node_modules/tap/node_modules/ink": { "version": "2.7.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "ansi-escapes": "^4.2.1", "arrify": "^2.0.1", "auto-bind": "^4.0.0", "chalk": "^3.0.0", "cli-cursor": "^3.1.0", "cli-truncate": "^2.1.0", "is-ci": "^2.0.0", "lodash.throttle": "^4.1.1", "log-update": "^3.0.0", "prop-types": "^15.6.2", "react-reconciler": "^0.24.0", "scheduler": "^0.18.0", "signal-exit": "^3.0.2", "slice-ansi": "^3.0.0", "string-length": "^3.1.0", "widest-line": "^3.1.0", "wrap-ansi": "^6.2.0", "yoga-layout-prebuilt": "^1.9.3" }, "engines": { "node": ">=8" }, "peerDependencies": { "@types/react": ">=16.8.0", "react": ">=16.8.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/tap/node_modules/ink/node_modules/ansi-styles": { "version": "4.2.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/tap/node_modules/ink/node_modules/chalk": { "version": "3.0.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=8" } }, "node_modules/tap/node_modules/ink/node_modules/color-convert": { "version": "2.0.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/tap/node_modules/ink/node_modules/color-name": { "version": "1.1.4", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/tap/node_modules/ink/node_modules/has-flag": { "version": "4.0.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/tap/node_modules/ink/node_modules/supports-color": { "version": "7.1.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/tap/node_modules/is-ci": { "version": "2.0.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "ci-info": "^2.0.0" }, "bin": { "is-ci": "bin.js" } }, "node_modules/tap/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/tap/node_modules/js-tokens": { "version": "4.0.0", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/tap/node_modules/jsesc": { "version": "2.5.2", "dev": true, "inBundle": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { "node": ">=4" } }, "node_modules/tap/node_modules/json5": { "version": "2.1.3", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "minimist": "^1.2.5" }, "bin": { "json5": "lib/cli.js" }, "engines": { "node": ">=6" } }, "node_modules/tap/node_modules/lodash": { "version": "4.17.19", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/tap/node_modules/lodash.throttle": { "version": "4.1.1", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/tap/node_modules/log-update": { "version": "3.4.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "ansi-escapes": "^3.2.0", "cli-cursor": "^2.1.0", "wrap-ansi": "^5.0.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/tap/node_modules/log-update/node_modules/ansi-escapes": { "version": "3.2.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/tap/node_modules/log-update/node_modules/ansi-regex": { "version": "4.1.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/tap/node_modules/log-update/node_modules/cli-cursor": { "version": "2.1.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "restore-cursor": "^2.0.0" }, "engines": { "node": ">=4" } }, "node_modules/tap/node_modules/log-update/node_modules/emoji-regex": { "version": "7.0.3", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/tap/node_modules/log-update/node_modules/is-fullwidth-code-point": { "version": "2.0.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/tap/node_modules/log-update/node_modules/mimic-fn": { "version": "1.2.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/tap/node_modules/log-update/node_modules/onetime": { "version": "2.0.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "mimic-fn": "^1.0.0" }, "engines": { "node": ">=4" } }, "node_modules/tap/node_modules/log-update/node_modules/restore-cursor": { "version": "2.0.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" }, "engines": { "node": ">=4" } }, "node_modules/tap/node_modules/log-update/node_modules/string-width": { "version": "3.1.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" }, "engines": { "node": ">=6" } }, "node_modules/tap/node_modules/log-update/node_modules/strip-ansi": { "version": "5.2.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "ansi-regex": "^4.1.0" }, "engines": { "node": ">=6" } }, "node_modules/tap/node_modules/log-update/node_modules/wrap-ansi": { "version": "5.1.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", "strip-ansi": "^5.0.0" }, "engines": { "node": ">=6" } }, "node_modules/tap/node_modules/loose-envify": { "version": "1.4.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "node_modules/tap/node_modules/mimic-fn": { "version": "2.1.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/tap/node_modules/minimist": { "version": "1.2.5", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/tap/node_modules/minipass": { "version": "3.1.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/tap/node_modules/minipass/node_modules/yallist": { "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/tap/node_modules/ms": { "version": "2.1.2", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/tap/node_modules/object-assign": { "version": "4.1.1", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/tap/node_modules/onetime": { "version": "5.1.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, "engines": { "node": ">=6" } }, "node_modules/tap/node_modules/path-parse": { "version": "1.0.6", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/tap/node_modules/prop-types": { "version": "15.7.2", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.8.1" } }, "node_modules/tap/node_modules/punycode": { "version": "2.1.1", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/tap/node_modules/react-is": { "version": "16.13.1", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/tap/node_modules/react-reconciler": { "version": "0.24.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", "scheduler": "^0.18.0" }, "engines": { "node": ">=0.10.0" }, "peerDependencies": { "react": "^16.0.0" } }, "node_modules/tap/node_modules/redeyed": { "version": "2.1.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "esprima": "~4.0.0" } }, "node_modules/tap/node_modules/resolve": { "version": "1.17.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "path-parse": "^1.0.6" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/tap/node_modules/resolve-from": { "version": "3.0.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/tap/node_modules/restore-cursor": { "version": "3.1.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" }, "engines": { "node": ">=8" } }, "node_modules/tap/node_modules/scheduler": { "version": "0.18.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } }, "node_modules/tap/node_modules/semver": { "version": "5.7.1", "dev": true, "inBundle": true, "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/tap/node_modules/signal-exit": { "version": "3.0.3", "dev": true, "inBundle": true, "license": "ISC" }, "node_modules/tap/node_modules/slice-ansi": { "version": "3.0.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/tap/node_modules/slice-ansi/node_modules/ansi-styles": { "version": "4.2.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/tap/node_modules/slice-ansi/node_modules/color-convert": { "version": "2.0.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/tap/node_modules/slice-ansi/node_modules/color-name": { "version": "1.1.4", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/tap/node_modules/source-map": { "version": "0.6.1", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/tap/node_modules/source-map-support": { "version": "0.5.20", "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "node_modules/tap/node_modules/string-length": { "version": "3.1.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "astral-regex": "^1.0.0", "strip-ansi": "^5.2.0" }, "engines": { "node": ">=8" } }, "node_modules/tap/node_modules/string-length/node_modules/ansi-regex": { "version": "4.1.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/tap/node_modules/string-length/node_modules/astral-regex": { "version": "1.0.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/tap/node_modules/string-length/node_modules/strip-ansi": { "version": "5.2.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "ansi-regex": "^4.1.0" }, "engines": { "node": ">=6" } }, "node_modules/tap/node_modules/string-width": { "version": "4.2.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=8" } }, "node_modules/tap/node_modules/strip-ansi": { "version": "6.0.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.0" }, "engines": { "node": ">=8" } }, "node_modules/tap/node_modules/supports-color": { "version": "5.5.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/tap/node_modules/tap-parser": { "version": "10.0.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "events-to-array": "^1.0.1", "minipass": "^3.0.0", "tap-yaml": "^1.0.0" }, "bin": { "tap-parser": "bin/cmd.js" }, "engines": { "node": ">= 8" } }, "node_modules/tap/node_modules/tap-yaml": { "version": "1.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "yaml": "^1.5.0" } }, "node_modules/tap/node_modules/to-fast-properties": { "version": "2.0.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/tap/node_modules/treport": { "version": "1.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "cardinal": "^2.1.1", "chalk": "^3.0.0", "import-jsx": "^3.1.0", "ink": "^2.6.0", "ms": "^2.1.2", "string-length": "^3.1.0", "tap-parser": "^10.0.1", "unicode-length": "^2.0.2" }, "peerDependencies": { "react": "^16.8.6" } }, "node_modules/tap/node_modules/treport/node_modules/ansi-styles": { "version": "4.2.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/tap/node_modules/treport/node_modules/chalk": { "version": "3.0.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=8" } }, "node_modules/tap/node_modules/treport/node_modules/color-convert": { "version": "2.0.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/tap/node_modules/treport/node_modules/color-name": { "version": "1.1.4", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/tap/node_modules/treport/node_modules/has-flag": { "version": "4.0.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/tap/node_modules/treport/node_modules/supports-color": { "version": "7.1.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/tap/node_modules/type-fest": { "version": "0.11.0", "dev": true, "inBundle": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/tap/node_modules/unicode-length": { "version": "2.0.2", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "punycode": "^2.0.0", "strip-ansi": "^3.0.1" } }, "node_modules/tap/node_modules/unicode-length/node_modules/ansi-regex": { "version": "2.1.1", "dev": true, "inBundle": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/tap/node_modules/unicode-length/node_modules/strip-ansi": { "version": "3.0.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "ansi-regex": "^2.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/tap/node_modules/widest-line": { "version": "3.1.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "string-width": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/tap/node_modules/wrap-ansi": { "version": "6.2.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "engines": { "node": ">=8" } }, "node_modules/tap/node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.2.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/tap/node_modules/wrap-ansi/node_modules/color-convert": { "version": "2.0.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/tap/node_modules/wrap-ansi/node_modules/color-name": { "version": "1.1.4", "dev": true, "inBundle": true, "license": "MIT" }, "node_modules/tap/node_modules/yaml": { "version": "1.10.0", "dev": true, "inBundle": true, "license": "ISC", "engines": { "node": ">= 6" } }, "node_modules/tap/node_modules/yoga-layout-prebuilt": { "version": "1.9.6", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "@types/yoga-layout": "1.9.2" }, "engines": { "node": ">=8" } }, "node_modules/tcompare": { "version": "3.0.5", "integrity": "sha512-+tmloQj1buaShBX+LP1i1NF5riJm110Yr0flIJAEoKf01tFVoMZvW2jq1JLqaW8fspOUVPm5NKKW5qLwT0ETDQ==", "dev": true, "dependencies": { "diff-frag": "^1.0.1" } }, "node_modules/test-exclude": { "version": "5.2.3", "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", "dev": true, "dependencies": { "glob": "^7.1.3", "minimatch": "^3.0.4", "read-pkg-up": "^4.0.0", "require-main-filename": "^2.0.0" }, "engines": { "node": ">=6" } }, "node_modules/test-exclude/node_modules/glob": { "version": "7.2.0", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, "node_modules/through": { "version": "2.3.8", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "dependencies": { "os-tmpdir": "~1.0.2" }, "engines": { "node": ">=0.6.0" } }, "node_modules/to-regex-range": { "version": "5.0.1", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "dependencies": { "is-number": "^7.0.0" }, "engines": { "node": ">=8.0" } }, "node_modules/toidentifier": { "version": "1.0.0", "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "dev": true, "engines": { "node": ">=0.6" } }, "node_modules/tough-cookie": { "version": "2.5.0", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" }, "engines": { "node": ">=0.8" } }, "node_modules/trivial-deferred": { "version": "1.0.1", "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM=", "dev": true }, "node_modules/ts-node": { "version": "8.10.2", "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", "dev": true, "dependencies": { "arg": "^4.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "source-map-support": "^0.5.17", "yn": "3.1.1" }, "bin": { "ts-node": "dist/bin.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js", "ts-script": "dist/bin-script-deprecated.js" }, "engines": { "node": ">=6.0.0" }, "peerDependencies": { "typescript": ">=2.7" } }, "node_modules/ts-node/node_modules/source-map": { "version": "0.6.1", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/ts-node/node_modules/source-map-support": { "version": "0.5.20", "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "node_modules/tunnel-agent": { "version": "0.6.0", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "dependencies": { "safe-buffer": "^5.0.1" }, "engines": { "node": "*" } }, "node_modules/tweetnacl": { "version": "0.14.5", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, "node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "dependencies": { "prelude-ls": "~1.1.2" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/type-is": { "version": "1.6.18", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" }, "engines": { "node": ">= 0.6" } }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "dependencies": { "is-typedarray": "^1.0.0" } }, "node_modules/typescript": { "version": "3.9.10", "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { "node": ">=4.2.0" } }, "node_modules/unicode-length": { "version": "2.0.2", "integrity": "sha512-Ph/j1VbS3/r77nhoY2WU0GWGjVYOHL3xpKp0y/Eq2e5r0mT/6b649vm7KFO6RdAdrZkYLdxphYVgvODxPB+Ebg==", "dev": true, "dependencies": { "punycode": "^2.0.0", "strip-ansi": "^3.0.1" } }, "node_modules/union": { "version": "0.5.0", "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", "dependencies": { "qs": "^6.4.0" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/unpipe": { "version": "1.0.0", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/uri-js": { "version": "4.4.1", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "dependencies": { "punycode": "^2.1.0" } }, "node_modules/url-join": { "version": "4.0.1", "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" }, "node_modules/util-deprecate": { "version": "1.0.2", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, "node_modules/utils-merge": { "version": "1.0.1", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", "dev": true, "engines": { "node": ">= 0.4.0" } }, "node_modules/uuid": { "version": "3.4.0", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, "bin": { "uuid": "bin/uuid" } }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "node_modules/vary": { "version": "1.1.2", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/verror": { "version": "1.10.0", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "engines": [ "node >=0.6.0" ], "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, "node_modules/verror/node_modules/core-util-is": { "version": "1.0.2", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, "node_modules/vlq": { "version": "0.2.3", "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", "dev": true }, "node_modules/vscode-json-languageservice": { "version": "3.11.0", "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-3.11.0.tgz", "integrity": "sha512-QxI+qV97uD7HHOCjh3MrM1TfbdwmTXrMckri5Tus1/FQiG3baDZb2C9Y0y8QThs7PwHYBIQXcAc59ZveCRZKPA==", "dev": true, "dependencies": { "jsonc-parser": "^3.0.0", "vscode-languageserver-textdocument": "^1.0.1", "vscode-languageserver-types": "3.16.0-next.2", "vscode-nls": "^5.0.0", "vscode-uri": "^2.1.2" } }, "node_modules/vscode-languageserver-textdocument": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.2.tgz", "integrity": "sha512-T7uPC18+f8mYE4lbVZwb3OSmvwTZm3cuFhrdx9Bn2l11lmp3SvSuSVjy2JtvrghzjAo4G6Trqny2m9XGnFnWVA==", "dev": true }, "node_modules/vscode-languageserver-types": { "version": "3.16.0-next.2", "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0-next.2.tgz", "integrity": "sha512-QjXB7CKIfFzKbiCJC4OWC8xUncLsxo19FzGVp/ADFvvi87PlmBSCAtZI5xwGjF5qE0xkLf0jjKUn3DzmpDP52Q==", "dev": true }, "node_modules/vscode-nls": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.0.0.tgz", "integrity": "sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==", "dev": true }, "node_modules/vscode-uri": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz", "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==", "dev": true }, "node_modules/whatwg-encoding": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", "dependencies": { "iconv-lite": "0.6.3" }, "engines": { "node": ">=12" } }, "node_modules/whatwg-encoding/node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/which": { "version": "2.0.2", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" }, "engines": { "node": ">= 8" } }, "node_modules/which-module": { "version": "2.0.0", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/wrap-ansi": { "version": "2.1.0", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "dependencies": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { "version": "1.0.0", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "dependencies": { "number-is-nan": "^1.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/wrap-ansi/node_modules/string-width": { "version": "1.0.2", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "dependencies": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/wrappy": { "version": "1.0.2", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "node_modules/write": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "dev": true, "dependencies": { "mkdirp": "^0.5.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/write-file-atomic": { "version": "3.0.3", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, "node_modules/y18n": { "version": "3.2.2", "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", "dev": true }, "node_modules/yallist": { "version": "2.1.2", "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true }, "node_modules/yaml": { "version": "1.10.2", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, "engines": { "node": ">= 6" } }, "node_modules/yapool": { "version": "1.0.0", "integrity": "sha1-9pPymjFbUNmp2iZGp6ZkXJaYW2o=", "dev": true }, "node_modules/yargs-parser": { "version": "13.1.2", "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "node_modules/yargs-parser/node_modules/camelcase": { "version": "5.3.1", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/yn": { "version": "3.1.1", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, "engines": { "node": ">=6" } } }, "dependencies": { "@babel/code-frame": { "version": "7.14.5", "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "requires": { "@babel/highlight": "^7.14.5" } }, "@babel/generator": { "version": "7.15.4", "integrity": "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==", "dev": true, "requires": { "@babel/types": "^7.15.4", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, "dependencies": { "jsesc": { "version": "2.5.2", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true } } }, "@babel/helper-function-name": { "version": "7.15.4", "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", "dev": true, "requires": { "@babel/helper-get-function-arity": "^7.15.4", "@babel/template": "^7.15.4", "@babel/types": "^7.15.4" } }, "@babel/helper-get-function-arity": { "version": "7.15.4", "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", "dev": true, "requires": { "@babel/types": "^7.15.4" } }, "@babel/helper-hoist-variables": { "version": "7.15.4", "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", "dev": true, "requires": { "@babel/types": "^7.15.4" } }, "@babel/helper-split-export-declaration": { "version": "7.15.4", "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", "dev": true, "requires": { "@babel/types": "^7.15.4" } }, "@babel/helper-validator-identifier": { "version": "7.15.7", "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", "dev": true }, "@babel/highlight": { "version": "7.14.5", "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, "dependencies": { "ansi-styles": { "version": "3.2.1", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "chalk": { "version": "2.4.2", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "color-convert": { "version": "1.9.3", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" } }, "color-name": { "version": "1.1.3", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "js-tokens": { "version": "4.0.0", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "supports-color": { "version": "5.5.0", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" } } } }, "@babel/parser": { "version": "7.15.7", "integrity": "sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g==", "dev": true }, "@babel/template": { "version": "7.15.4", "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", "dev": true, "requires": { "@babel/code-frame": "^7.14.5", "@babel/parser": "^7.15.4", "@babel/types": "^7.15.4" } }, "@babel/traverse": { "version": "7.15.4", "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", "dev": true, "requires": { "@babel/code-frame": "^7.14.5", "@babel/generator": "^7.15.4", "@babel/helper-function-name": "^7.15.4", "@babel/helper-hoist-variables": "^7.15.4", "@babel/helper-split-export-declaration": "^7.15.4", "@babel/parser": "^7.15.4", "@babel/types": "^7.15.4", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { "debug": { "version": "4.3.2", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" } }, "globals": { "version": "11.12.0", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, "ms": { "version": "2.1.2", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } }, "@babel/types": { "version": "7.15.6", "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" }, "dependencies": { "to-fast-properties": { "version": "2.0.0", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true } } }, "@eslint/eslintrc": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.1.1", "espree": "^7.3.0", "globals": "^12.1.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", "lodash": "^4.17.19", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, "dependencies": { "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "requires": {} }, "debug": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" } }, "espree": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "requires": { "acorn": "^7.4.0", "acorn-jsx": "^5.3.1", "eslint-visitor-keys": "^1.3.0" } }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "globals": { "version": "12.4.0", "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", "dev": true, "requires": { "type-fest": "^0.8.1" } }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, "js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true } } }, "accepts": { "version": "1.3.7", "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, "requires": { "mime-types": "~2.1.24", "negotiator": "0.6.2" } }, "acorn": { "version": "5.7.4", "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", "dev": true }, "acorn-jsx": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, "requires": { "acorn": "^3.0.4" }, "dependencies": { "acorn": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", "dev": true } } }, "ajv": { "version": "6.12.6", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "ansi-escapes": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", "dev": true }, "ansi-regex": { "version": "2.1.1", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, "anymatch": { "version": "3.1.2", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "append-transform": { "version": "1.0.0", "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", "dev": true, "requires": { "default-require-extensions": "^2.0.0" } }, "archy": { "version": "1.0.0", "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, "arg": { "version": "4.1.3", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, "argparse": { "version": "1.0.10", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "~1.0.2" } }, "array-flatten": { "version": "1.1.1", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", "dev": true }, "asn1": { "version": "0.2.4", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, "requires": { "safer-buffer": "~2.1.0" } }, "assert-plus": { "version": "1.0.0", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, "async-hook-domain": { "version": "1.1.3", "integrity": "sha512-ZovMxSbADV3+biB7oR1GL5lGyptI24alp0LWHlmz1OFc5oL47pz3EiIF6nXOkDW7yLqih4NtsiYduzdDW0i+Wg==", "dev": true, "requires": { "source-map-support": "^0.5.11" }, "dependencies": { "source-map": { "version": "0.6.1", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "source-map-support": { "version": "0.5.20", "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } } } }, "asynckit": { "version": "0.4.0", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, "aws-sign2": { "version": "0.7.0", "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "dev": true }, "aws4": { "version": "1.11.0", "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { "chalk": "^1.1.3", "esutils": "^2.0.2", "js-tokens": "^3.0.2" }, "dependencies": { "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" } }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", "dev": true } } }, "balanced-match": { "version": "1.0.2", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "basic-auth": { "version": "2.0.1", "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", "requires": { "safe-buffer": "5.1.2" } }, "bcrypt-pbkdf": { "version": "1.0.2", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, "requires": { "tweetnacl": "^0.14.3" } }, "binary-extensions": { "version": "2.2.0", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, "bind-obj-methods": { "version": "2.0.2", "integrity": "sha512-bUkRdEOppT1Xg/jG0+bp0JSjUD9U0r7skxb/42WeBUjfBpW6COQTIgQmKX5J2Z3aMXcORKgN2N+d7IQwTK3pag==", "dev": true }, "body-parser": { "version": "1.19.0", "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dev": true, "requires": { "bytes": "3.1.0", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", "http-errors": "1.7.2", "iconv-lite": "0.4.24", "on-finished": "~2.3.0", "qs": "6.7.0", "raw-body": "2.4.0", "type-is": "~1.6.17" } }, "brace-expansion": { "version": "1.1.11", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "braces": { "version": "3.0.2", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { "fill-range": "^7.0.1" } }, "browser-process-hrtime": { "version": "1.0.0", "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, "buffer-from": { "version": "1.1.2", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "bytes": { "version": "3.1.0", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true }, "caching-transform": { "version": "3.0.2", "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", "dev": true, "requires": { "hasha": "^3.0.0", "make-dir": "^2.0.0", "package-hash": "^3.0.0", "write-file-atomic": "^2.4.2" }, "dependencies": { "write-file-atomic": { "version": "2.4.3", "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, "requires": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", "signal-exit": "^3.0.2" } } } }, "caller-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "dev": true, "requires": { "callsites": "^0.2.0" }, "dependencies": { "callsites": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", "dev": true } } }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, "caseless": { "version": "0.12.0", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "dependencies": { "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" } } } }, "chardet": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", "dev": true }, "chokidar": { "version": "3.5.2", "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "dev": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", "fsevents": "~2.3.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" } }, "circular-json": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", "dev": true }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { "restore-cursor": "^2.0.0" } }, "cli-width": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", "dev": true }, "cliui": { "version": "4.1.0", "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { "string-width": "^2.1.1", "strip-ansi": "^4.0.0", "wrap-ansi": "^2.0.0" }, "dependencies": { "ansi-regex": { "version": "3.0.0", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, "strip-ansi": { "version": "4.0.0", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { "ansi-regex": "^3.0.0" } } } }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, "code-point-at": { "version": "1.1.0", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "color-support": { "version": "1.1.3", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true }, "combined-stream": { "version": "1.0.8", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { "delayed-stream": "~1.0.0" } }, "commondir": { "version": "1.0.1", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, "concat-map": { "version": "0.0.1", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" }, "dependencies": { "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" } } } }, "content-disposition": { "version": "0.5.3", "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "dev": true, "requires": { "safe-buffer": "5.1.2" } }, "content-type": { "version": "1.0.4", "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true }, "convert-source-map": { "version": "1.8.0", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" } }, "cookie": { "version": "0.4.0", "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", "dev": true }, "cookie-signature": { "version": "1.0.6", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", "dev": true }, "core-util-is": { "version": "1.0.3", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "corser": { "version": "2.0.1", "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=" }, "coveralls": { "version": "3.1.1", "integrity": "sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==", "dev": true, "requires": { "js-yaml": "^3.13.1", "lcov-parse": "^1.0.0", "log-driver": "^1.2.7", "minimist": "^1.2.5", "request": "^2.88.2" }, "dependencies": { "esprima": { "version": "4.0.1", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "js-yaml": { "version": "3.14.1", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } } } }, "cp-file": { "version": "6.2.0", "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", "dev": true, "requires": { "graceful-fs": "^4.1.2", "make-dir": "^2.0.0", "nested-error-stacks": "^2.0.0", "pify": "^4.0.1", "safe-buffer": "^5.0.1" } }, "cross-spawn": { "version": "4.0.2", "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", "dev": true, "requires": { "lru-cache": "^4.0.1", "which": "^1.2.9" }, "dependencies": { "which": { "version": "1.3.1", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" } } } }, "dashdash": { "version": "1.14.1", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { "assert-plus": "^1.0.0" } }, "debug": { "version": "2.6.9", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" } }, "decamelize": { "version": "1.2.0", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "default-require-extensions": { "version": "2.0.0", "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", "dev": true, "requires": { "strip-bom": "^3.0.0" }, "dependencies": { "strip-bom": { "version": "3.0.0", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true } } }, "delayed-stream": { "version": "1.0.0", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, "depd": { "version": "1.1.2", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, "destroy": { "version": "1.0.4", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", "dev": true }, "diff": { "version": "4.0.2", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, "diff-frag": { "version": "1.1.1", "integrity": "sha512-y0YLhUGviNXaypPimkzmOCaZf8ruocRb+dpOL/lfoicxBua2gkExddlbWxIP56Z5BpSg4gL5sAWhBN2iQm4HVQ==", "dev": true }, "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { "esutils": "^2.0.2" } }, "ecc-jsbn": { "version": "0.1.2", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, "ee-first": { "version": "1.1.1", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, "emoji-regex": { "version": "7.0.3", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, "encodeurl": { "version": "1.0.2", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, "eol": { "version": "0.9.1", "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==", "dev": true }, "error-ex": { "version": "1.3.2", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { "is-arrayish": "^0.2.1" } }, "es6-error": { "version": "4.1.1", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, "escape-html": { "version": "1.0.3", "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", "dev": true }, "escape-string-regexp": { "version": "1.0.5", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "eslint": { "version": "4.19.1", "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", "dev": true, "requires": { "ajv": "^5.3.0", "babel-code-frame": "^6.22.0", "chalk": "^2.1.0", "concat-stream": "^1.6.0", "cross-spawn": "^5.1.0", "debug": "^3.1.0", "doctrine": "^2.1.0", "eslint-scope": "^3.7.1", "eslint-visitor-keys": "^1.0.0", "espree": "^3.5.4", "esquery": "^1.0.0", "esutils": "^2.0.2", "file-entry-cache": "^2.0.0", "functional-red-black-tree": "^1.0.1", "glob": "^7.1.2", "globals": "^11.0.1", "ignore": "^3.3.3", "imurmurhash": "^0.1.4", "inquirer": "^3.0.6", "is-resolvable": "^1.0.0", "js-yaml": "^3.9.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", "lodash": "^4.17.4", "minimatch": "^3.0.2", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", "optionator": "^0.8.2", "path-is-inside": "^1.0.2", "pluralize": "^7.0.0", "progress": "^2.0.0", "regexpp": "^1.0.1", "require-uncached": "^1.0.3", "semver": "^5.3.0", "strip-ansi": "^4.0.0", "strip-json-comments": "~2.0.1", "table": "4.0.2", "text-table": "~0.2.0" }, "dependencies": { "ajv": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { "co": "^4.6.0", "fast-deep-equal": "^1.0.0", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.3.0" } }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" } }, "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", "which": "^1.2.9" } }, "debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" } }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "fast-deep-equal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", "dev": true }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, "js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, "json-schema-traverse": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", "dev": true }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { "ansi-regex": "^3.0.0" } }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" } }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" } } } }, "eslint-config-populist": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/eslint-config-populist/-/eslint-config-populist-4.2.0.tgz", "integrity": "sha512-9+FuXyMjVHrJKr50gjLdCou3L/i08sOjoF8eB/Mhzt9Nxz6ulTjkRpvD9Btg8q3d1KfuGGULC2lOJG9cXwRqoQ==", "dev": true, "requires": { "eslint": "^4.3.0", "eslint-find-rules": "^3.1.1", "eslint-plugin-json": "^1.2.0", "eslint-plugin-mocha": "^4.8.0" } }, "eslint-find-rules": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/eslint-find-rules/-/eslint-find-rules-3.6.1.tgz", "integrity": "sha512-GvXdZwdjvgeBXfW3rw8pcUNdGlay8hqTo0SgYi2siY+o+dOppgejSEwYezk2B8s+nZFaaOAzZVlmn8l6wkmhUA==", "dev": true, "requires": { "@eslint/eslintrc": "^0.1.3", "cliui": "^3.2.0", "eslint-rule-documentation": "^1.0.23", "glob": "^7.1.6", "path-is-absolute": "^1.0.1", "which": "^1.3.1", "window-size": "^0.3.0", "yargs": "^8.0.2" }, "dependencies": { "camelcase": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true }, "cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1", "wrap-ansi": "^2.0.0" }, "dependencies": { "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" } } } }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { "locate-path": "^2.0.0" } }, "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { "number-is-nan": "^1.0.0" } }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", "pify": "^2.0.0", "strip-bom": "^3.0.0" } }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" } }, "os-locale": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "requires": { "execa": "^0.7.0", "lcid": "^1.0.0", "mem": "^1.1.0" } }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { "p-try": "^1.0.0" } }, "p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { "p-limit": "^1.1.0" } }, "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { "error-ex": "^1.2.0" } }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, "path-type": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, "requires": { "pify": "^2.0.0" } }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, "requires": { "load-json-file": "^2.0.0", "normalize-package-data": "^2.3.2", "path-type": "^2.0.0" } }, "read-pkg-up": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, "requires": { "find-up": "^2.0.0", "read-pkg": "^2.0.0" } }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", "dev": true }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" } }, "window-size": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.3.0.tgz", "integrity": "sha1-uPC2bjJdIhYHUeSWM35EtFtydUY=", "dev": true }, "yargs": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", "dev": true, "requires": { "camelcase": "^4.1.0", "cliui": "^3.2.0", "decamelize": "^1.1.1", "get-caller-file": "^1.0.1", "os-locale": "^2.0.0", "read-pkg-up": "^2.0.0", "require-directory": "^2.1.1", "require-main-filename": "^1.0.1", "set-blocking": "^2.0.0", "string-width": "^2.0.0", "which-module": "^2.0.0", "y18n": "^3.2.1", "yargs-parser": "^7.0.0" } }, "yargs-parser": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", "dev": true, "requires": { "camelcase": "^4.1.0" } } } }, "eslint-plugin-json": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/eslint-plugin-json/-/eslint-plugin-json-1.4.0.tgz", "integrity": "sha512-CECvgRAWtUzuepdlPWd+VA7fhyF9HT183pZnl8wQw5x699Mk/MbME/q8xtULBfooi3LUbj6fToieNmsvUcDxWA==", "dev": true, "requires": { "vscode-json-languageservice": "^3.2.1" } }, "eslint-plugin-mocha": { "version": "4.12.1", "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-4.12.1.tgz", "integrity": "sha512-hxWtYHvLA0p/PKymRfDYh9Mxt5dYkg2Goy1vZDarTEEYfELP9ksga7kKG1NUKSQy27C8Qjc7YrSWTLUhOEOksA==", "dev": true, "requires": { "ramda": "^0.25.0" } }, "eslint-rule-documentation": { "version": "1.0.23", "resolved": "https://registry.npmjs.org/eslint-rule-documentation/-/eslint-rule-documentation-1.0.23.tgz", "integrity": "sha512-pWReu3fkohwyvztx/oQWWgld2iad25TfUdi6wvhhaDPIQjHU/pyvlKgXFw1kX31SQK2Nq9MH+vRDWB0ZLy8fYw==", "dev": true }, "eslint-scope": { "version": "3.7.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", "dev": true, "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" } }, "eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true }, "esm": { "version": "3.2.25", "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", "dev": true }, "espree": { "version": "3.5.4", "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", "dev": true, "requires": { "acorn": "^5.5.0", "acorn-jsx": "^3.0.0" } }, "esquery": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { "estraverse": "^5.1.0" }, "dependencies": { "estraverse": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true } } }, "esrecurse": { "version": "4.3.0", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { "estraverse": "^5.2.0" }, "dependencies": { "estraverse": { "version": "5.2.0", "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true } } }, "estraverse": { "version": "4.3.0", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { "version": "2.0.3", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "etag": { "version": "1.8.1", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "dev": true }, "eventemitter3": { "version": "4.0.7", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "events-to-array": { "version": "1.1.2", "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", "dev": true }, "execa": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { "cross-spawn": "^5.0.1", "get-stream": "^3.0.0", "is-stream": "^1.1.0", "npm-run-path": "^2.0.0", "p-finally": "^1.0.0", "signal-exit": "^3.0.0", "strip-eof": "^1.0.0" }, "dependencies": { "cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", "which": "^1.2.9" } }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" } } } }, "express": { "version": "4.17.1", "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "dev": true, "requires": { "accepts": "~1.3.7", "array-flatten": "1.1.1", "body-parser": "1.19.0", "content-disposition": "0.5.3", "content-type": "~1.0.4", "cookie": "0.4.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "finalhandler": "~1.1.2", "fresh": "0.5.2", "merge-descriptors": "1.0.1", "methods": "~1.1.2", "on-finished": "~2.3.0", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.5", "qs": "6.7.0", "range-parser": "~1.2.1", "safe-buffer": "5.1.2", "send": "0.17.1", "serve-static": "1.14.1", "setprototypeof": "1.1.1", "statuses": "~1.5.0", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" } }, "extend": { "version": "3.0.2", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, "external-editor": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "dev": true, "requires": { "chardet": "^0.4.0", "iconv-lite": "^0.4.17", "tmp": "^0.0.33" } }, "extsprintf": { "version": "1.3.0", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, "fast-deep-equal": { "version": "3.1.3", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-json-stable-stringify": { "version": "2.1.0", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, "figures": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { "escape-string-regexp": "^1.0.5" } }, "file-entry-cache": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true, "requires": { "flat-cache": "^1.2.1", "object-assign": "^4.0.1" } }, "fill-range": { "version": "7.0.1", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { "to-regex-range": "^5.0.1" } }, "finalhandler": { "version": "1.1.2", "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "~2.3.0", "parseurl": "~1.3.3", "statuses": "~1.5.0", "unpipe": "~1.0.0" } }, "find-cache-dir": { "version": "2.1.0", "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, "requires": { "commondir": "^1.0.1", "make-dir": "^2.0.0", "pkg-dir": "^3.0.0" } }, "find-up": { "version": "3.0.0", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { "locate-path": "^3.0.0" } }, "findit": { "version": "2.0.0", "integrity": "sha1-ZQnwEmr0wXhVHPqZOU4DLhOk1W4=", "dev": true }, "flat-cache": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", "dev": true, "requires": { "circular-json": "^0.3.1", "graceful-fs": "^4.1.2", "rimraf": "~2.6.2", "write": "^0.2.1" }, "dependencies": { "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "requires": { "glob": "^7.1.3" } } } }, "flow-parser": { "version": "0.161.0", "integrity": "sha512-QRGREwIVspAeffxidkelrU6yPnEF/US4iYoGuf73+y4ZEXgCJUFje4jYfgE4g59TbSLHntdWfM69wiN9Y9swKw==", "dev": true }, "flow-remove-types": { "version": "2.161.0", "integrity": "sha512-5HZYVgldoQWQfMXMwRb/vsbA0G0OmUE3fIGFGVarMYPoLXPzXj0qxeOzOF0/Iyw2+yVWMSQnj1VeEUalf4GBxw==", "dev": true, "requires": { "flow-parser": "^0.161.0", "pirates": "^3.0.2", "vlq": "^0.2.1" } }, "follow-redirects": { "version": "1.14.8", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==" }, "foreground-child": { "version": "1.5.6", "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", "dev": true, "requires": { "cross-spawn": "^4", "signal-exit": "^3.0.0" } }, "forever-agent": { "version": "0.6.1", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true }, "form-data": { "version": "2.3.3", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", "mime-types": "^2.1.12" } }, "forwarded": { "version": "0.2.0", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true }, "fresh": { "version": "0.5.2", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "dev": true }, "fs-exists-cached": { "version": "1.0.0", "integrity": "sha1-zyVVTKBQ3EmuZla0HeQiWJidy84=", "dev": true }, "fs.realpath": { "version": "1.0.0", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "function-bind": { "version": "1.1.1", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "function-loop": { "version": "1.0.2", "integrity": "sha512-Iw4MzMfS3udk/rqxTiDDCllhGwlOrsr50zViTOO/W6lS/9y6B1J0BD2VZzrnWUYBJsl3aeqjgR5v7bWWhZSYbA==", "dev": true }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, "get-caller-file": { "version": "2.0.5", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, "getpass": { "version": "0.1.7", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { "assert-plus": "^1.0.0" } }, "glob-parent": { "version": "5.1.2", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" } }, "graceful-fs": { "version": "4.2.8", "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, "har-schema": { "version": "2.0.0", "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", "dev": true }, "har-validator": { "version": "5.1.5", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "dev": true, "requires": { "ajv": "^6.12.3", "har-schema": "^2.0.0" } }, "has": { "version": "1.0.3", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { "function-bind": "^1.1.1" } }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { "ansi-regex": "^2.0.0" } }, "has-flag": { "version": "3.0.0", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "hasha": { "version": "3.0.0", "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", "dev": true, "requires": { "is-stream": "^1.0.1" } }, "he": { "version": "1.2.0", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, "hosted-git-info": { "version": "2.8.9", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "requires": { "whatwg-encoding": "^2.0.0" } }, "html-escaper": { "version": "2.0.2", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "http-errors": { "version": "1.7.2", "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dev": true, "requires": { "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.1", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.0" } }, "http-proxy": { "version": "1.18.1", "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "requires": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" } }, "http-signature": { "version": "1.2.0", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", "sshpk": "^1.7.0" } }, "iconv-lite": { "version": "0.4.24", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, "ignore": { "version": "3.3.10", "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", "dev": true }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "imurmurhash": { "version": "0.1.4", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, "inflight": { "version": "1.0.6", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" } }, "inherits": { "version": "2.0.3", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, "inquirer": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "dev": true, "requires": { "ansi-escapes": "^3.0.0", "chalk": "^2.0.0", "cli-cursor": "^2.1.0", "cli-width": "^2.0.0", "external-editor": "^2.0.4", "figures": "^2.0.0", "lodash": "^4.3.0", "mute-stream": "0.0.7", "run-async": "^2.2.0", "rx-lite": "^4.0.8", "rx-lite-aggregates": "^4.0.8", "string-width": "^2.1.0", "strip-ansi": "^4.0.0", "through": "^2.3.6" }, "dependencies": { "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" } }, "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { "ansi-regex": "^3.0.0" } }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" } } } }, "invert-kv": { "version": "1.0.0", "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, "ipaddr.js": { "version": "1.9.1", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true }, "is-arrayish": { "version": "0.2.1", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, "is-binary-path": { "version": "2.1.0", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { "binary-extensions": "^2.0.0" } }, "is-core-module": { "version": "2.7.0", "integrity": "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==", "dev": true, "requires": { "has": "^1.0.3" } }, "is-extglob": { "version": "2.1.1", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, "is-glob": { "version": "4.0.3", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" } }, "is-number": { "version": "7.0.0", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, "is-resolvable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", "dev": true }, "is-stream": { "version": "1.1.0", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, "is-typedarray": { "version": "1.0.0", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, "isexe": { "version": "2.0.0", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "isstream": { "version": "0.1.2", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, "istanbul-lib-coverage": { "version": "2.0.5", "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true }, "istanbul-lib-hook": { "version": "2.0.7", "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", "dev": true, "requires": { "append-transform": "^1.0.0" } }, "istanbul-lib-instrument": { "version": "3.3.0", "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", "dev": true, "requires": { "@babel/generator": "^7.4.0", "@babel/parser": "^7.4.3", "@babel/template": "^7.4.0", "@babel/traverse": "^7.4.3", "@babel/types": "^7.4.0", "istanbul-lib-coverage": "^2.0.5", "semver": "^6.0.0" } }, "istanbul-lib-processinfo": { "version": "1.0.0", "integrity": "sha512-FY0cPmWa4WoQNlvB8VOcafiRoB5nB+l2Pz2xGuXHRSy1KM8QFOYfz/rN+bGMCAeejrY3mrpF5oJHcN0s/garCg==", "dev": true, "requires": { "archy": "^1.0.0", "cross-spawn": "^6.0.5", "istanbul-lib-coverage": "^2.0.3", "rimraf": "^2.6.3", "uuid": "^3.3.2" }, "dependencies": { "cross-spawn": { "version": "6.0.5", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" } }, "semver": { "version": "5.7.1", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "which": { "version": "1.3.1", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" } } } }, "istanbul-lib-report": { "version": "2.0.8", "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", "dev": true, "requires": { "istanbul-lib-coverage": "^2.0.5", "make-dir": "^2.1.0", "supports-color": "^6.1.0" }, "dependencies": { "supports-color": { "version": "6.1.0", "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { "has-flag": "^3.0.0" } } } }, "istanbul-lib-source-maps": { "version": "3.0.6", "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", "dev": true, "requires": { "debug": "^4.1.1", "istanbul-lib-coverage": "^2.0.5", "make-dir": "^2.1.0", "rimraf": "^2.6.3", "source-map": "^0.6.1" }, "dependencies": { "debug": { "version": "4.3.2", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" } }, "ms": { "version": "2.1.2", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "source-map": { "version": "0.6.1", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "istanbul-reports": { "version": "2.2.7", "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", "dev": true, "requires": { "html-escaper": "^2.0.0" } }, "jackspeak": { "version": "1.4.0", "integrity": "sha512-VDcSunT+wcccoG46FtzuBAyQKlzhHjli4q31e1fIHGOsRspqNUFjVzGb+7eIFDlTvqLygxapDHPHS0ouT2o/tw==", "dev": true, "requires": { "cliui": "^4.1.0" } }, "jsbn": { "version": "0.1.1", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true }, "json-parse-better-errors": { "version": "1.0.2", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "json-schema": { "version": "0.2.3", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "dev": true }, "json-schema-traverse": { "version": "0.4.1", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, "json-stringify-safe": { "version": "5.0.1", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, "jsonc-parser": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", "dev": true }, "jsprim": { "version": "1.4.1", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", "json-schema": "0.2.3", "verror": "1.10.0" } }, "lcid": { "version": "1.0.0", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { "invert-kv": "^1.0.0" } }, "lcov-parse": { "version": "1.0.0", "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", "dev": true }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" } }, "load-json-file": { "version": "4.0.0", "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", "pify": "^3.0.0", "strip-bom": "^3.0.0" }, "dependencies": { "pify": { "version": "3.0.0", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, "strip-bom": { "version": "3.0.0", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true } } }, "locate-path": { "version": "3.0.0", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" }, "dependencies": { "path-exists": { "version": "3.0.0", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true } } }, "lodash.flattendeep": { "version": "4.4.0", "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, "log-driver": { "version": "1.2.7", "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", "dev": true }, "loose-envify": { "version": "1.4.0", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { "js-tokens": "^3.0.0 || ^4.0.0" }, "dependencies": { "js-tokens": { "version": "4.0.0", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true } } }, "lru-cache": { "version": "4.1.5", "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" } }, "make-dir": { "version": "2.1.0", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { "pify": "^4.0.1", "semver": "^5.6.0" }, "dependencies": { "semver": { "version": "5.7.1", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, "make-error": { "version": "1.3.6", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, "media-typer": { "version": "0.3.0", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, "mem": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { "mimic-fn": "^1.0.0" } }, "merge-descriptors": { "version": "1.0.1", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, "merge-source-map": { "version": "1.1.0", "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", "dev": true, "requires": { "source-map": "^0.6.1" }, "dependencies": { "source-map": { "version": "0.6.1", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "methods": { "version": "1.1.2", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", "dev": true }, "mime": { "version": "1.6.0", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { "version": "1.50.0", "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", "dev": true }, "mime-types": { "version": "2.1.33", "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", "dev": true, "requires": { "mime-db": "1.50.0" } }, "mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, "minimatch": { "version": "3.0.4", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, "minipass": { "version": "3.1.5", "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==", "dev": true, "requires": { "yallist": "^4.0.0" }, "dependencies": { "yallist": { "version": "4.0.0", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } }, "mkdirp": { "version": "0.5.5", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "requires": { "minimist": "^1.2.5" } }, "ms": { "version": "2.0.0", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "negotiator": { "version": "0.6.2", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true }, "nested-error-stacks": { "version": "2.1.0", "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", "dev": true }, "nice-try": { "version": "1.0.5", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, "node-modules-regexp": { "version": "1.0.0", "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", "dev": true }, "normalize-package-data": { "version": "2.5.0", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" }, "dependencies": { "semver": { "version": "5.7.1", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, "normalize-path": { "version": "3.0.0", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { "path-key": "^2.0.0" } }, "number-is-nan": { "version": "1.0.1", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, "nyc": { "version": "14.1.1", "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==", "dev": true, "requires": { "archy": "^1.0.0", "caching-transform": "^3.0.2", "convert-source-map": "^1.6.0", "cp-file": "^6.2.0", "find-cache-dir": "^2.1.0", "find-up": "^3.0.0", "foreground-child": "^1.5.6", "glob": "^7.1.3", "istanbul-lib-coverage": "^2.0.5", "istanbul-lib-hook": "^2.0.7", "istanbul-lib-instrument": "^3.3.0", "istanbul-lib-report": "^2.0.8", "istanbul-lib-source-maps": "^3.0.6", "istanbul-reports": "^2.2.4", "js-yaml": "^3.13.1", "make-dir": "^2.1.0", "merge-source-map": "^1.1.0", "resolve-from": "^4.0.0", "rimraf": "^2.6.3", "signal-exit": "^3.0.2", "spawn-wrap": "^1.4.2", "test-exclude": "^5.2.3", "uuid": "^3.3.2", "yargs": "^13.2.2", "yargs-parser": "^13.0.0" }, "dependencies": { "ansi-regex": { "version": "4.1.0", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "ansi-styles": { "version": "3.2.1", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "cliui": { "version": "5.0.0", "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", "wrap-ansi": "^5.1.0" } }, "color-convert": { "version": "1.9.3", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" } }, "color-name": { "version": "1.1.3", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "esprima": { "version": "4.0.1", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "glob": { "version": "7.2.0", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "js-yaml": { "version": "3.14.1", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, "string-width": { "version": "3.1.0", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } }, "strip-ansi": { "version": "5.2.0", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { "ansi-regex": "^4.1.0" } }, "wrap-ansi": { "version": "5.1.0", "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "requires": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", "strip-ansi": "^5.0.0" } }, "y18n": { "version": "4.0.3", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yargs": { "version": "13.3.2", "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "requires": { "cliui": "^5.0.0", "find-up": "^3.0.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^3.0.0", "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^13.1.2" } } } }, "oauth-sign": { "version": "0.9.0", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true }, "object-assign": { "version": "4.1.1", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, "on-finished": { "version": "2.3.0", "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "dev": true, "requires": { "ee-first": "1.1.1" } }, "once": { "version": "1.4.0", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { "wrappy": "1" } }, "onetime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "requires": { "mimic-fn": "^1.0.0" } }, "opener": { "version": "1.5.2", "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==" }, "optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", "levn": "~0.3.0", "prelude-ls": "~1.1.2", "type-check": "~0.3.2", "word-wrap": "~1.2.3" } }, "os-homedir": { "version": "1.0.2", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, "os-tmpdir": { "version": "1.0.2", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, "own-or": { "version": "1.0.0", "integrity": "sha1-Tod/vtqaLsgAD7wLyuOWRe6L+Nw=", "dev": true }, "own-or-env": { "version": "1.0.2", "integrity": "sha512-NQ7v0fliWtK7Lkb+WdFqe6ky9XAzYmlkXthQrBbzlYbmFKoAYbDDcwmOm6q8kOuwSRXW8bdL5ORksploUJmWgw==", "dev": true, "requires": { "own-or": "^1.0.0" } }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, "p-limit": { "version": "2.3.0", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" } }, "p-locate": { "version": "3.0.0", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { "p-limit": "^2.0.0" } }, "p-try": { "version": "2.2.0", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "package-hash": { "version": "3.0.0", "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", "dev": true, "requires": { "graceful-fs": "^4.1.15", "hasha": "^3.0.0", "lodash.flattendeep": "^4.4.0", "release-zalgo": "^1.0.0" } }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { "callsites": "^3.0.0" } }, "parse-json": { "version": "4.0.0", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } }, "parseurl": { "version": "1.3.3", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, "path-is-absolute": { "version": "1.0.1", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, "path-is-inside": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", "dev": true }, "path-key": { "version": "2.0.1", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, "path-parse": { "version": "1.0.7", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-to-regexp": { "version": "0.1.7", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", "dev": true }, "path-type": { "version": "3.0.0", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { "pify": "^3.0.0" }, "dependencies": { "pify": { "version": "3.0.0", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true } } }, "performance-now": { "version": "2.1.0", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, "picomatch": { "version": "2.3.0", "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true }, "pify": { "version": "4.0.1", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "pirates": { "version": "3.0.2", "integrity": "sha512-c5CgUJq6H2k6MJz72Ak1F5sN9n9wlSlJyEnwvpm9/y3WB4E3pHBDT2c6PEiS1vyJvq2bUxUAIu0EGf8Cx4Ic7Q==", "dev": true, "requires": { "node-modules-regexp": "^1.0.0" } }, "pkg-dir": { "version": "3.0.0", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { "find-up": "^3.0.0" } }, "pluralize": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", "dev": true }, "portfinder": { "version": "1.0.28", "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "requires": { "async": "^2.6.2", "debug": "^3.1.1", "mkdirp": "^0.5.5" }, "dependencies": { "async": { "version": "2.6.3", "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "requires": { "lodash": "^4.17.14" } }, "debug": { "version": "3.2.7", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "requires": { "ms": "^2.1.1" } }, "lodash": { "version": "4.17.21", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "ms": { "version": "2.1.3", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" } } }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, "process-nextick-args": { "version": "2.0.1", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, "prop-types": { "version": "15.7.2", "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", "dev": true, "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.8.1" } }, "proxy-addr": { "version": "2.0.7", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "requires": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "pseudomap": { "version": "1.0.2", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, "psl": { "version": "1.8.0", "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", "dev": true }, "punycode": { "version": "2.1.1", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, "qs": { "version": "6.7.0", "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" }, "ramda": { "version": "0.25.0", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.25.0.tgz", "integrity": "sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ==", "dev": true }, "range-parser": { "version": "1.2.1", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true }, "raw-body": { "version": "2.4.0", "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "dev": true, "requires": { "bytes": "3.1.0", "http-errors": "1.7.2", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } }, "react": { "version": "16.14.0", "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2" } }, "react-is": { "version": "16.13.1", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true }, "read-pkg": { "version": "3.0.0", "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", "path-type": "^3.0.0" } }, "read-pkg-up": { "version": "4.0.0", "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", "dev": true, "requires": { "find-up": "^3.0.0", "read-pkg": "^3.0.0" } }, "readdirp": { "version": "3.6.0", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { "picomatch": "^2.2.1" } }, "regexpp": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", "dev": true }, "release-zalgo": { "version": "1.0.0", "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", "dev": true, "requires": { "es6-error": "^4.0.1" } }, "request": { "version": "2.88.2", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "dev": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", "caseless": "~0.12.0", "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~2.3.2", "har-validator": "~5.1.3", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "oauth-sign": "~0.9.0", "performance-now": "^2.1.0", "qs": "~6.5.2", "safe-buffer": "^5.1.2", "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" }, "dependencies": { "qs": { "version": "6.5.2", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true } } }, "require-directory": { "version": "2.1.1", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, "require-main-filename": { "version": "2.0.0", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "require-uncached": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "dev": true, "requires": { "caller-path": "^0.1.0", "resolve-from": "^1.0.0" }, "dependencies": { "resolve-from": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", "dev": true } } }, "requires-port": { "version": "1.0.0", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "resolve": { "version": "1.20.0", "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } }, "resolve-from": { "version": "4.0.0", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, "requires": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" } }, "rimraf": { "version": "2.7.1", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { "glob": "^7.1.3" }, "dependencies": { "glob": { "version": "7.2.0", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } } } }, "run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true }, "rx-lite": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", "dev": true }, "rx-lite-aggregates": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", "dev": true, "requires": { "rx-lite": "*" } }, "safe-buffer": { "version": "5.1.2", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safer-buffer": { "version": "2.1.2", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "secure-compare": { "version": "3.0.1", "integrity": "sha1-8aAymzCLIh+uN7mXTz1XjQypmeM=" }, "semver": { "version": "6.3.0", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, "send": { "version": "0.17.1", "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "dev": true, "requires": { "debug": "2.6.9", "depd": "~1.1.2", "destroy": "~1.0.4", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", "http-errors": "~1.7.2", "mime": "1.6.0", "ms": "2.1.1", "on-finished": "~2.3.0", "range-parser": "~1.2.1", "statuses": "~1.5.0" }, "dependencies": { "ms": { "version": "2.1.1", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true } } }, "serve-static": { "version": "1.14.1", "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "dev": true, "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", "send": "0.17.1" } }, "set-blocking": { "version": "2.0.0", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, "setprototypeof": { "version": "1.1.1", "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, "shebang-command": { "version": "1.2.0", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { "shebang-regex": "^1.0.0" } }, "shebang-regex": { "version": "1.0.0", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, "signal-exit": { "version": "3.0.5", "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", "dev": true }, "slice-ansi": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0" } }, "source-map": { "version": "0.5.7", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, "spawn-wrap": { "version": "1.4.3", "integrity": "sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==", "dev": true, "requires": { "foreground-child": "^1.5.6", "mkdirp": "^0.5.0", "os-homedir": "^1.0.1", "rimraf": "^2.6.2", "signal-exit": "^3.0.2", "which": "^1.3.0" }, "dependencies": { "which": { "version": "1.3.1", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" } } } }, "spdx-correct": { "version": "3.1.1", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { "version": "2.3.0", "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, "spdx-expression-parse": { "version": "3.0.1", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { "version": "3.0.10", "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", "dev": true }, "sprintf-js": { "version": "1.0.3", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, "sshpk": { "version": "1.16.1", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", "bcrypt-pbkdf": "^1.0.0", "dashdash": "^1.12.0", "ecc-jsbn": "~0.1.1", "getpass": "^0.1.1", "jsbn": "~0.1.0", "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" } }, "stack-utils": { "version": "1.0.5", "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", "dev": true, "requires": { "escape-string-regexp": "^2.0.0" }, "dependencies": { "escape-string-regexp": { "version": "2.0.0", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true } } }, "statuses": { "version": "1.5.0", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, "string-width": { "version": "2.1.1", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { "version": "3.0.0", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, "strip-ansi": { "version": "4.0.0", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { "ansi-regex": "^3.0.0" } } } }, "strip-ansi": { "version": "3.0.1", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { "ansi-regex": "^2.0.0" } }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true }, "table": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", "dev": true, "requires": { "ajv": "^5.2.3", "ajv-keywords": "^2.1.0", "chalk": "^2.1.0", "lodash": "^4.17.4", "slice-ansi": "1.0.0", "string-width": "^2.1.1" }, "dependencies": { "ajv": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { "co": "^4.6.0", "fast-deep-equal": "^1.0.0", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.3.0" } }, "ajv-keywords": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", "dev": true, "requires": {} }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" } }, "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "fast-deep-equal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", "dev": true }, "json-schema-traverse": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", "dev": true }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" } } } }, "tap": { "version": "14.11.0", "integrity": "sha512-z8qnNFVyIjLh/bNoTLFRkEk09XZUDAZbCkz/BjvHHly3ao5H+y60gPnedALfheEjA6dA4tpp/mrKq2NWlMuq0A==", "dev": true, "requires": { "@types/react": "^16.9.16", "async-hook-domain": "^1.1.3", "bind-obj-methods": "^2.0.0", "browser-process-hrtime": "^1.0.0", "chokidar": "^3.3.0", "color-support": "^1.1.0", "coveralls": "^3.0.11", "diff": "^4.0.1", "esm": "^3.2.25", "findit": "^2.0.0", "flow-remove-types": "^2.112.0", "foreground-child": "^1.3.3", "fs-exists-cached": "^1.0.0", "function-loop": "^1.0.2", "glob": "^7.1.6", "import-jsx": "^3.1.0", "ink": "^2.6.0", "isexe": "^2.0.0", "istanbul-lib-processinfo": "^1.0.0", "jackspeak": "^1.4.0", "minipass": "^3.1.1", "mkdirp": "^0.5.4", "nyc": "^14.1.1", "opener": "^1.5.1", "own-or": "^1.0.0", "own-or-env": "^1.0.1", "react": "^16.12.0", "rimraf": "^2.7.1", "signal-exit": "^3.0.0", "source-map-support": "^0.5.16", "stack-utils": "^1.0.3", "tap-mocha-reporter": "^5.0.0", "tap-parser": "^10.0.1", "tap-yaml": "^1.0.0", "tcompare": "^3.0.0", "treport": "^1.0.2", "trivial-deferred": "^1.0.1", "ts-node": "^8.5.2", "typescript": "^3.7.2", "which": "^2.0.2", "write-file-atomic": "^3.0.1", "yaml": "^1.7.2", "yapool": "^1.0.0" }, "dependencies": { "@babel/code-frame": { "version": "7.10.4", "bundled": true, "dev": true, "requires": { "@babel/highlight": "^7.10.4" } }, "@babel/core": { "version": "7.10.5", "bundled": true, "dev": true, "requires": { "@babel/code-frame": "^7.10.4", "@babel/generator": "^7.10.5", "@babel/helper-module-transforms": "^7.10.5", "@babel/helpers": "^7.10.4", "@babel/parser": "^7.10.5", "@babel/template": "^7.10.4", "@babel/traverse": "^7.10.5", "@babel/types": "^7.10.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", "json5": "^2.1.2", "lodash": "^4.17.19", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" }, "dependencies": { "source-map": { "version": "0.5.7", "bundled": true, "dev": true } } }, "@babel/generator": { "version": "7.10.5", "bundled": true, "dev": true, "requires": { "@babel/types": "^7.10.5", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, "dependencies": { "source-map": { "version": "0.5.7", "bundled": true, "dev": true } } }, "@babel/helper-annotate-as-pure": { "version": "7.10.4", "bundled": true, "dev": true, "requires": { "@babel/types": "^7.10.4" } }, "@babel/helper-builder-react-jsx": { "version": "7.10.4", "bundled": true, "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/types": "^7.10.4" } }, "@babel/helper-builder-react-jsx-experimental": { "version": "7.10.5", "bundled": true, "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-module-imports": "^7.10.4", "@babel/types": "^7.10.5" } }, "@babel/helper-function-name": { "version": "7.10.4", "bundled": true, "dev": true, "requires": { "@babel/helper-get-function-arity": "^7.10.4", "@babel/template": "^7.10.4", "@babel/types": "^7.10.4" } }, "@babel/helper-get-function-arity": { "version": "7.10.4", "bundled": true, "dev": true, "requires": { "@babel/types": "^7.10.4" } }, "@babel/helper-member-expression-to-functions": { "version": "7.10.5", "bundled": true, "dev": true, "requires": { "@babel/types": "^7.10.5" } }, "@babel/helper-module-imports": { "version": "7.10.4", "bundled": true, "dev": true, "requires": { "@babel/types": "^7.10.4" } }, "@babel/helper-module-transforms": { "version": "7.10.5", "bundled": true, "dev": true, "requires": { "@babel/helper-module-imports": "^7.10.4", "@babel/helper-replace-supers": "^7.10.4", "@babel/helper-simple-access": "^7.10.4", "@babel/helper-split-export-declaration": "^7.10.4", "@babel/template": "^7.10.4", "@babel/types": "^7.10.5", "lodash": "^4.17.19" } }, "@babel/helper-optimise-call-expression": { "version": "7.10.4", "bundled": true, "dev": true, "requires": { "@babel/types": "^7.10.4" } }, "@babel/helper-plugin-utils": { "version": "7.10.4", "bundled": true, "dev": true }, "@babel/helper-replace-supers": { "version": "7.10.4", "bundled": true, "dev": true, "requires": { "@babel/helper-member-expression-to-functions": "^7.10.4", "@babel/helper-optimise-call-expression": "^7.10.4", "@babel/traverse": "^7.10.4", "@babel/types": "^7.10.4" } }, "@babel/helper-simple-access": { "version": "7.10.4", "bundled": true, "dev": true, "requires": { "@babel/template": "^7.10.4", "@babel/types": "^7.10.4" } }, "@babel/helper-split-export-declaration": { "version": "7.10.4", "bundled": true, "dev": true, "requires": { "@babel/types": "^7.10.4" } }, "@babel/helper-validator-identifier": { "version": "7.10.4", "bundled": true, "dev": true }, "@babel/helpers": { "version": "7.10.4", "bundled": true, "dev": true, "requires": { "@babel/template": "^7.10.4", "@babel/traverse": "^7.10.4", "@babel/types": "^7.10.4" } }, "@babel/highlight": { "version": "7.10.4", "bundled": true, "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { "version": "7.10.5", "bundled": true, "dev": true }, "@babel/plugin-proposal-object-rest-spread": { "version": "7.10.4", "bundled": true, "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-transform-parameters": "^7.10.4" } }, "@babel/plugin-syntax-jsx": { "version": "7.10.4", "bundled": true, "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "bundled": true, "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-destructuring": { "version": "7.10.4", "bundled": true, "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-parameters": { "version": "7.10.5", "bundled": true, "dev": true, "requires": { "@babel/helper-get-function-arity": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-react-jsx": { "version": "7.10.4", "bundled": true, "dev": true, "requires": { "@babel/helper-builder-react-jsx": "^7.10.4", "@babel/helper-builder-react-jsx-experimental": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-jsx": "^7.10.4" } }, "@babel/template": { "version": "7.10.4", "bundled": true, "dev": true, "requires": { "@babel/code-frame": "^7.10.4", "@babel/parser": "^7.10.4", "@babel/types": "^7.10.4" } }, "@babel/traverse": { "version": "7.10.5", "bundled": true, "dev": true, "requires": { "@babel/code-frame": "^7.10.4", "@babel/generator": "^7.10.5", "@babel/helper-function-name": "^7.10.4", "@babel/helper-split-export-declaration": "^7.10.4", "@babel/parser": "^7.10.5", "@babel/types": "^7.10.5", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.19" } }, "@babel/types": { "version": "7.10.5", "bundled": true, "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" } }, "@types/color-name": { "version": "1.1.1", "bundled": true, "dev": true }, "@types/prop-types": { "version": "15.7.3", "bundled": true, "dev": true }, "@types/react": { "version": "16.9.43", "bundled": true, "dev": true, "requires": { "@types/prop-types": "*", "csstype": "^2.2.0" } }, "@types/yoga-layout": { "version": "1.9.2", "bundled": true, "dev": true }, "ansi-escapes": { "version": "4.3.1", "bundled": true, "dev": true, "requires": { "type-fest": "^0.11.0" } }, "ansi-regex": { "version": "5.0.0", "bundled": true, "dev": true }, "ansi-styles": { "version": "3.2.1", "bundled": true, "dev": true, "requires": { "color-convert": "^1.9.0" } }, "ansicolors": { "version": "0.3.2", "bundled": true, "dev": true }, "arrify": { "version": "2.0.1", "bundled": true, "dev": true }, "astral-regex": { "version": "2.0.0", "bundled": true, "dev": true }, "auto-bind": { "version": "4.0.0", "bundled": true, "dev": true }, "caller-callsite": { "version": "2.0.0", "bundled": true, "dev": true, "requires": { "callsites": "^2.0.0" } }, "caller-path": { "version": "2.0.0", "bundled": true, "dev": true, "requires": { "caller-callsite": "^2.0.0" } }, "callsites": { "version": "2.0.0", "bundled": true, "dev": true }, "cardinal": { "version": "2.1.1", "bundled": true, "dev": true, "requires": { "ansicolors": "~0.3.2", "redeyed": "~2.1.0" } }, "chalk": { "version": "2.4.2", "bundled": true, "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "ci-info": { "version": "2.0.0", "bundled": true, "dev": true }, "cli-cursor": { "version": "3.1.0", "bundled": true, "dev": true, "requires": { "restore-cursor": "^3.1.0" } }, "cli-truncate": { "version": "2.1.0", "bundled": true, "dev": true, "requires": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" } }, "color-convert": { "version": "1.9.3", "bundled": true, "dev": true, "requires": { "color-name": "1.1.3" } }, "color-name": { "version": "1.1.3", "bundled": true, "dev": true }, "convert-source-map": { "version": "1.7.0", "bundled": true, "dev": true, "requires": { "safe-buffer": "~5.1.1" }, "dependencies": { "safe-buffer": { "version": "5.1.2", "bundled": true, "dev": true } } }, "csstype": { "version": "2.6.11", "bundled": true, "dev": true }, "debug": { "version": "4.1.1", "bundled": true, "dev": true, "requires": { "ms": "^2.1.1" } }, "emoji-regex": { "version": "8.0.0", "bundled": true, "dev": true }, "escape-string-regexp": { "version": "1.0.5", "bundled": true, "dev": true }, "esprima": { "version": "4.0.1", "bundled": true, "dev": true }, "events-to-array": { "version": "1.1.2", "bundled": true, "dev": true }, "gensync": { "version": "1.0.0-beta.1", "bundled": true, "dev": true }, "glob": { "version": "7.2.0", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "globals": { "version": "11.12.0", "bundled": true, "dev": true }, "has-flag": { "version": "3.0.0", "bundled": true, "dev": true }, "import-jsx": { "version": "3.1.0", "bundled": true, "dev": true, "requires": { "@babel/core": "^7.5.5", "@babel/plugin-proposal-object-rest-spread": "^7.5.5", "@babel/plugin-transform-destructuring": "^7.5.0", "@babel/plugin-transform-react-jsx": "^7.3.0", "caller-path": "^2.0.0", "resolve-from": "^3.0.0" } }, "ink": { "version": "2.7.1", "bundled": true, "dev": true, "requires": { "ansi-escapes": "^4.2.1", "arrify": "^2.0.1", "auto-bind": "^4.0.0", "chalk": "^3.0.0", "cli-cursor": "^3.1.0", "cli-truncate": "^2.1.0", "is-ci": "^2.0.0", "lodash.throttle": "^4.1.1", "log-update": "^3.0.0", "prop-types": "^15.6.2", "react-reconciler": "^0.24.0", "scheduler": "^0.18.0", "signal-exit": "^3.0.2", "slice-ansi": "^3.0.0", "string-length": "^3.1.0", "widest-line": "^3.1.0", "wrap-ansi": "^6.2.0", "yoga-layout-prebuilt": "^1.9.3" }, "dependencies": { "ansi-styles": { "version": "4.2.1", "bundled": true, "dev": true, "requires": { "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, "chalk": { "version": "3.0.0", "bundled": true, "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "color-convert": { "version": "2.0.1", "bundled": true, "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "bundled": true, "dev": true }, "has-flag": { "version": "4.0.0", "bundled": true, "dev": true }, "supports-color": { "version": "7.1.0", "bundled": true, "dev": true, "requires": { "has-flag": "^4.0.0" } } } }, "is-ci": { "version": "2.0.0", "bundled": true, "dev": true, "requires": { "ci-info": "^2.0.0" } }, "is-fullwidth-code-point": { "version": "3.0.0", "bundled": true, "dev": true }, "js-tokens": { "version": "4.0.0", "bundled": true, "dev": true }, "jsesc": { "version": "2.5.2", "bundled": true, "dev": true }, "json5": { "version": "2.1.3", "bundled": true, "dev": true, "requires": { "minimist": "^1.2.5" } }, "lodash": { "version": "4.17.19", "bundled": true, "dev": true }, "lodash.throttle": { "version": "4.1.1", "bundled": true, "dev": true }, "log-update": { "version": "3.4.0", "bundled": true, "dev": true, "requires": { "ansi-escapes": "^3.2.0", "cli-cursor": "^2.1.0", "wrap-ansi": "^5.0.0" }, "dependencies": { "ansi-escapes": { "version": "3.2.0", "bundled": true, "dev": true }, "ansi-regex": { "version": "4.1.0", "bundled": true, "dev": true }, "cli-cursor": { "version": "2.1.0", "bundled": true, "dev": true, "requires": { "restore-cursor": "^2.0.0" } }, "emoji-regex": { "version": "7.0.3", "bundled": true, "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", "bundled": true, "dev": true }, "mimic-fn": { "version": "1.2.0", "bundled": true, "dev": true }, "onetime": { "version": "2.0.1", "bundled": true, "dev": true, "requires": { "mimic-fn": "^1.0.0" } }, "restore-cursor": { "version": "2.0.0", "bundled": true, "dev": true, "requires": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" } }, "string-width": { "version": "3.1.0", "bundled": true, "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } }, "strip-ansi": { "version": "5.2.0", "bundled": true, "dev": true, "requires": { "ansi-regex": "^4.1.0" } }, "wrap-ansi": { "version": "5.1.0", "bundled": true, "dev": true, "requires": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", "strip-ansi": "^5.0.0" } } } }, "loose-envify": { "version": "1.4.0", "bundled": true, "dev": true, "requires": { "js-tokens": "^3.0.0 || ^4.0.0" } }, "mimic-fn": { "version": "2.1.0", "bundled": true, "dev": true }, "minimist": { "version": "1.2.5", "bundled": true, "dev": true }, "minipass": { "version": "3.1.3", "bundled": true, "dev": true, "requires": { "yallist": "^4.0.0" }, "dependencies": { "yallist": { "version": "4.0.0", "bundled": true, "dev": true } } }, "ms": { "version": "2.1.2", "bundled": true, "dev": true }, "object-assign": { "version": "4.1.1", "bundled": true, "dev": true }, "onetime": { "version": "5.1.0", "bundled": true, "dev": true, "requires": { "mimic-fn": "^2.1.0" } }, "path-parse": { "version": "1.0.6", "bundled": true, "dev": true }, "prop-types": { "version": "15.7.2", "bundled": true, "dev": true, "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.8.1" } }, "punycode": { "version": "2.1.1", "bundled": true, "dev": true }, "react-is": { "version": "16.13.1", "bundled": true, "dev": true }, "react-reconciler": { "version": "0.24.0", "bundled": true, "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "prop-types": "^15.6.2", "scheduler": "^0.18.0" } }, "redeyed": { "version": "2.1.1", "bundled": true, "dev": true, "requires": { "esprima": "~4.0.0" } }, "resolve": { "version": "1.17.0", "bundled": true, "dev": true, "requires": { "path-parse": "^1.0.6" } }, "resolve-from": { "version": "3.0.0", "bundled": true, "dev": true }, "restore-cursor": { "version": "3.1.0", "bundled": true, "dev": true, "requires": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "scheduler": { "version": "0.18.0", "bundled": true, "dev": true, "requires": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } }, "semver": { "version": "5.7.1", "bundled": true, "dev": true }, "signal-exit": { "version": "3.0.3", "bundled": true, "dev": true }, "slice-ansi": { "version": "3.0.0", "bundled": true, "dev": true, "requires": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" }, "dependencies": { "ansi-styles": { "version": "4.2.1", "bundled": true, "dev": true, "requires": { "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, "color-convert": { "version": "2.0.1", "bundled": true, "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "bundled": true, "dev": true } } }, "source-map": { "version": "0.6.1", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "source-map-support": { "version": "0.5.20", "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "string-length": { "version": "3.1.0", "bundled": true, "dev": true, "requires": { "astral-regex": "^1.0.0", "strip-ansi": "^5.2.0" }, "dependencies": { "ansi-regex": { "version": "4.1.0", "bundled": true, "dev": true }, "astral-regex": { "version": "1.0.0", "bundled": true, "dev": true }, "strip-ansi": { "version": "5.2.0", "bundled": true, "dev": true, "requires": { "ansi-regex": "^4.1.0" } } } }, "string-width": { "version": "4.2.0", "bundled": true, "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.0" } }, "strip-ansi": { "version": "6.0.0", "bundled": true, "dev": true, "requires": { "ansi-regex": "^5.0.0" } }, "supports-color": { "version": "5.5.0", "bundled": true, "dev": true, "requires": { "has-flag": "^3.0.0" } }, "tap-parser": { "version": "10.0.1", "bundled": true, "dev": true, "requires": { "events-to-array": "^1.0.1", "minipass": "^3.0.0", "tap-yaml": "^1.0.0" } }, "tap-yaml": { "version": "1.0.0", "bundled": true, "dev": true, "requires": { "yaml": "^1.5.0" } }, "to-fast-properties": { "version": "2.0.0", "bundled": true, "dev": true }, "treport": { "version": "1.0.2", "bundled": true, "dev": true, "requires": { "cardinal": "^2.1.1", "chalk": "^3.0.0", "import-jsx": "^3.1.0", "ink": "^2.6.0", "ms": "^2.1.2", "string-length": "^3.1.0", "tap-parser": "^10.0.1", "unicode-length": "^2.0.2" }, "dependencies": { "ansi-styles": { "version": "4.2.1", "bundled": true, "dev": true, "requires": { "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, "chalk": { "version": "3.0.0", "bundled": true, "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "color-convert": { "version": "2.0.1", "bundled": true, "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "bundled": true, "dev": true }, "has-flag": { "version": "4.0.0", "bundled": true, "dev": true }, "supports-color": { "version": "7.1.0", "bundled": true, "dev": true, "requires": { "has-flag": "^4.0.0" } } } }, "type-fest": { "version": "0.11.0", "bundled": true, "dev": true }, "unicode-length": { "version": "2.0.2", "bundled": true, "dev": true, "requires": { "punycode": "^2.0.0", "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { "version": "2.1.1", "bundled": true, "dev": true }, "strip-ansi": { "version": "3.0.1", "bundled": true, "dev": true, "requires": { "ansi-regex": "^2.0.0" } } } }, "widest-line": { "version": "3.1.0", "bundled": true, "dev": true, "requires": { "string-width": "^4.0.0" } }, "wrap-ansi": { "version": "6.2.0", "bundled": true, "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "dependencies": { "ansi-styles": { "version": "4.2.1", "bundled": true, "dev": true, "requires": { "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, "color-convert": { "version": "2.0.1", "bundled": true, "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "bundled": true, "dev": true } } }, "yaml": { "version": "1.10.0", "bundled": true, "dev": true }, "yoga-layout-prebuilt": { "version": "1.9.6", "bundled": true, "dev": true, "requires": { "@types/yoga-layout": "1.9.2" } } } }, "tap-mocha-reporter": { "version": "5.0.1", "integrity": "sha512-1knFWOwd4khx/7uSEnUeaP9IPW3w+sqTgJMhrwah6t46nZ8P25atOKAjSvVDsT67lOPu0nfdOqUwoyKn+3E5pA==", "dev": true, "requires": { "color-support": "^1.1.0", "debug": "^4.1.1", "diff": "^4.0.1", "escape-string-regexp": "^2.0.0", "glob": "^7.0.5", "tap-parser": "^10.0.0", "tap-yaml": "^1.0.0", "unicode-length": "^2.0.2" }, "dependencies": { "debug": { "version": "4.3.2", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" } }, "escape-string-regexp": { "version": "2.0.0", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true }, "glob": { "version": "7.2.0", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "ms": { "version": "2.1.2", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } }, "tap-parser": { "version": "10.1.0", "integrity": "sha512-FujQeciDaOiOvaIVGS1Rpb0v4R6XkOjvWCWowlz5oKuhPkEJ8U6pxgqt38xuzYhPt8dWEnfHn2jqpZdJEkW7pA==", "dev": true, "requires": { "events-to-array": "^1.0.1", "minipass": "^3.0.0", "tap-yaml": "^1.0.0" } }, "tap-yaml": { "version": "1.0.0", "integrity": "sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ==", "dev": true, "requires": { "yaml": "^1.5.0" } }, "tcompare": { "version": "3.0.5", "integrity": "sha512-+tmloQj1buaShBX+LP1i1NF5riJm110Yr0flIJAEoKf01tFVoMZvW2jq1JLqaW8fspOUVPm5NKKW5qLwT0ETDQ==", "dev": true, "requires": { "diff-frag": "^1.0.1" } }, "test-exclude": { "version": "5.2.3", "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", "dev": true, "requires": { "glob": "^7.1.3", "minimatch": "^3.0.4", "read-pkg-up": "^4.0.0", "require-main-filename": "^2.0.0" }, "dependencies": { "glob": { "version": "7.2.0", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } } } }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, "through": { "version": "2.3.8", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { "os-tmpdir": "~1.0.2" } }, "to-regex-range": { "version": "5.0.1", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { "is-number": "^7.0.0" } }, "toidentifier": { "version": "1.0.0", "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "dev": true }, "tough-cookie": { "version": "2.5.0", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, "requires": { "psl": "^1.1.28", "punycode": "^2.1.1" } }, "trivial-deferred": { "version": "1.0.1", "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM=", "dev": true }, "ts-node": { "version": "8.10.2", "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", "dev": true, "requires": { "arg": "^4.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "source-map-support": "^0.5.17", "yn": "3.1.1" }, "dependencies": { "source-map": { "version": "0.6.1", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "source-map-support": { "version": "0.5.20", "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } } } }, "tunnel-agent": { "version": "0.6.0", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "requires": { "safe-buffer": "^5.0.1" } }, "tweetnacl": { "version": "0.14.5", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { "prelude-ls": "~1.1.2" } }, "type-fest": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, "type-is": { "version": "1.6.18", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "requires": { "media-typer": "0.3.0", "mime-types": "~2.1.24" } }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, "typedarray-to-buffer": { "version": "3.1.5", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "requires": { "is-typedarray": "^1.0.0" } }, "typescript": { "version": "3.9.10", "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", "dev": true }, "unicode-length": { "version": "2.0.2", "integrity": "sha512-Ph/j1VbS3/r77nhoY2WU0GWGjVYOHL3xpKp0y/Eq2e5r0mT/6b649vm7KFO6RdAdrZkYLdxphYVgvODxPB+Ebg==", "dev": true, "requires": { "punycode": "^2.0.0", "strip-ansi": "^3.0.1" } }, "union": { "version": "0.5.0", "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", "requires": { "qs": "^6.4.0" } }, "unpipe": { "version": "1.0.0", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true }, "uri-js": { "version": "4.4.1", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" } }, "url-join": { "version": "4.0.1", "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" }, "util-deprecate": { "version": "1.0.2", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, "utils-merge": { "version": "1.0.1", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", "dev": true }, "uuid": { "version": "3.4.0", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true }, "validate-npm-package-license": { "version": "3.0.4", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "vary": { "version": "1.1.2", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true }, "verror": { "version": "1.10.0", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" }, "dependencies": { "core-util-is": { "version": "1.0.2", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true } } }, "vlq": { "version": "0.2.3", "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", "dev": true }, "vscode-json-languageservice": { "version": "3.11.0", "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-3.11.0.tgz", "integrity": "sha512-QxI+qV97uD7HHOCjh3MrM1TfbdwmTXrMckri5Tus1/FQiG3baDZb2C9Y0y8QThs7PwHYBIQXcAc59ZveCRZKPA==", "dev": true, "requires": { "jsonc-parser": "^3.0.0", "vscode-languageserver-textdocument": "^1.0.1", "vscode-languageserver-types": "3.16.0-next.2", "vscode-nls": "^5.0.0", "vscode-uri": "^2.1.2" } }, "vscode-languageserver-textdocument": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.2.tgz", "integrity": "sha512-T7uPC18+f8mYE4lbVZwb3OSmvwTZm3cuFhrdx9Bn2l11lmp3SvSuSVjy2JtvrghzjAo4G6Trqny2m9XGnFnWVA==", "dev": true }, "vscode-languageserver-types": { "version": "3.16.0-next.2", "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0-next.2.tgz", "integrity": "sha512-QjXB7CKIfFzKbiCJC4OWC8xUncLsxo19FzGVp/ADFvvi87PlmBSCAtZI5xwGjF5qE0xkLf0jjKUn3DzmpDP52Q==", "dev": true }, "vscode-nls": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.0.0.tgz", "integrity": "sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==", "dev": true }, "vscode-uri": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz", "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==", "dev": true }, "whatwg-encoding": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", "requires": { "iconv-lite": "0.6.3" }, "dependencies": { "iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" } } } }, "which": { "version": "2.0.2", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" } }, "which-module": { "version": "2.0.0", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, "wrap-ansi": { "version": "2.1.0", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" }, "dependencies": { "is-fullwidth-code-point": { "version": "1.0.0", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { "number-is-nan": "^1.0.0" } }, "string-width": { "version": "1.0.2", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" } } } }, "wrappy": { "version": "1.0.2", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "write": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "dev": true, "requires": { "mkdirp": "^0.5.1" } }, "write-file-atomic": { "version": "3.0.3", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "requires": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, "y18n": { "version": "3.2.2", "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", "dev": true }, "yallist": { "version": "2.1.2", "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true }, "yaml": { "version": "1.10.2", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true }, "yapool": { "version": "1.0.0", "integrity": "sha1-9pPymjFbUNmp2iZGp6ZkXJaYW2o=", "dev": true }, "yargs-parser": { "version": "13.1.2", "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" }, "dependencies": { "camelcase": { "version": "5.3.1", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true } } }, "yn": { "version": "3.1.1", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true } } } http-party-http-server-af0ac3e/package.json000066400000000000000000000047351424550403000211470ustar00rootroot00000000000000{ "name": "http-server", "version": "14.1.1", "description": "A simple zero-configuration command-line http server", "main": "./lib/http-server", "repository": { "type": "git", "url": "git://github.com/http-party/http-server.git" }, "keywords": [ "cli", "command", "static", "http", "https", "http-server", "https-server", "server" ], "scripts": { "start": "node ./bin/http-server", "test": "tap --reporter=spec test/*.test.js", "test-watch": "tap --reporter=spec --watch test/*.test.js" }, "files": [ "lib", "bin", "doc" ], "man": "./doc/http-server.1", "engines": { "node": ">=12" }, "contributors": [ { "name": "Charlie Robbins", "email": "charlie.robbins@gmail.com" }, { "name": "Marak Squires", "email": "marak.squires@gmail.com" }, { "name": "Charlie McConnell", "email": "charlie@charlieistheman.com" }, { "name": "Joshua Holbrook", "email": "josh.holbrook@gmail.com" }, { "name": "Maciej Małecki", "email": "maciej.malecki@notimplemented.org" }, { "name": "Matthew Bergman", "email": "mzbphoto@gmail.com" }, { "name": "brad dunbar", "email": "dunbarb2@gmail.com" }, { "name": "Dominic Tarr" }, { "name": "Travis Person", "email": "travis.person@gmail.com" }, { "name": "Jinkwon Lee", "email": "master@bdyne.net" }, { "name": "BigBlueHat", "email": "byoung@bigbluehat.com" }, { "name": "Daniel Dalton", "email": "daltond2@hawkmail.newpaltz.edu" }, { "name": "Jade Michael Thornton", "email": "jademichael@jmthornton.net" } ], "dependencies": { "basic-auth": "^2.0.1", "chalk": "^4.1.2", "corser": "^2.0.1", "he": "^1.2.0", "html-encoding-sniffer": "^3.0.0", "http-proxy": "^1.18.1", "mime": "^1.6.0", "minimist": "^1.2.6", "opener": "^1.5.1", "portfinder": "^1.0.28", "secure-compare": "3.0.1", "union": "~0.5.0", "url-join": "^4.0.1" }, "devDependencies": { "eol": "^0.9.1", "eslint": "^4.19.1", "eslint-config-populist": "^4.2.0", "express": "^4.17.1", "request": "^2.88.2", "tap": "^14.11.0" }, "bugs": { "url": "https://github.com/http-party/http-server/issues" }, "license": "MIT", "preferGlobal": true, "bin": { "http-server": "./bin/http-server" } } http-party-http-server-af0ac3e/public/000077500000000000000000000000001424550403000201265ustar00rootroot00000000000000http-party-http-server-af0ac3e/public/404.html000066400000000000000000000002241424550403000213210ustar00rootroot00000000000000 404

404

Were you just making up filenames or what?

http-party-http-server-af0ac3e/public/img/000077500000000000000000000000001424550403000207025ustar00rootroot00000000000000http-party-http-server-af0ac3e/public/img/turtle.png000066400000000000000000001536421424550403000227420ustar00rootroot00000000000000PNG  IHDR xwtmPLTE[FF'ȷR@@kRRls/`DZ#"[a(XDDpVV !cLL3''%E55;--( ;%ƴO==PP%' $K::-##mv@22ho-TZ${/`h04 t~dj+IN*.!DHw-36:> ˻,/ " EJ fn?D _f)59 IOX[bMTο8<V]>BRXPOT"! )((9I866B>>0..viiUPP Y_'^UU-kdd@+j]]{{+,uuQHH}pp*+JBB3+򧙙7&N@mqq|wbl˷^^^GJJow%Z%%11==F>bf $K tRNS̀t#+3eI^B;PWlkIDATx]OP GoW,aFd[B4G NAT$<"U'}ͬO 9CbI#<0c`1!Vr: 8!C(njD~_ԉ)o ޗk`b4_DT&$0lt@!*N @.0^˛@4XCu,UKw !>5R-Z,Ce>a9-YH_RRUܪ 2J#ďfP#@CE-4#m(#F@ے!=)t Nt00=O&^G^wY! Z+FBl^3@T1չKdܶ,© vI]+/,!oMM03mKb8$8;999=|ݳ{⨰)*j4جnT]%ŁẦu^h([zt1d@̝C|yDiΚEZ{zv~2sj26܍TFS3kaamk<f]MVn4toBs Szk uh7D=+N32۱찜WbN}ܐҩ{1%U!/q%$x0;ַ'Ji%&q6eD#:q%y GTҳTbXM@/qWH xCv6\Hl$"]D!Lc{Gl~%ɱ- "wXAbwBQ1k#J>FQ^T%l'Kjy<"=iCFF!<IoDV捈2 #,ĩNo"b:A*o[ :#'m16r: Q IRu{B5׌L> rF~ֻos_ǼBh;$s!!cKXe頗[_[Oi90 *PfBW!^W7&`%nL! 5ljL`; 3tz1?;? _NYH:~ Tqb2Jlh>#"9IJ-nDwGfNӰi3_Dkє.t_/${1a( uRkm9=;E0/Ko5fN4x711m?2 qq|]-cf3fV^4Uރ7A2< )z"~]eأ&6B 6F&[H؊`z#¢pKNHaÊ6YdΕCLDOJ^Jp-9B `=^)<&D~ %Xwy’>LSSU>J Sf3)(xCeXGd=ȈZ. 7$+bZ2== ;f#Vy{\hxϷ!m-4dy@rqcB퉡 fТxP=%9р,7yv8d?G^2x-)AnIV/F '(bY.k0{]x(T&%[kFY5?݈$R! is:;ZoHDzYqQ!k~H~Kk / EVS.!^Hԇ#ߥIDg( [OHZD0PiAz#-ܚ;٠ 3%A ?I󄶈G>s(vA)ʉKAe;5kJQ& _RO_01$A OUV;yE0m{~iG!s(`gquJi (_Zfy6/j >RQ/#6"l?*; VOd~I嶠q26dT3*_^KV/Xb"7!X5X|ON>(;!ʀްKQ$W ٗjR|ڸzz̢A: M!x֊(pg_~ɷM0ݸX -Tnp }Y8$~_ K.N/q˾sE"r$#bU4r%g{(7vQS@ͧqaV3RlTPjM'}PMe L2AJW-<)-<4y_J8JdOt2Wb$!^|( ]։ݬ] eP+ (0C7;tnC,}c*X$y7]F |'آCZd6sQJNhbֹj 0,c=Yxp`[6Ϫ3RLhu#IXZNKXtߎ99ƨ.*IܘM^% 񺠘ԑ̚ : ϓM_|XdAE77#~/H@;[wy!mF5 TT*Kx|xOGi%A*lJ`@{-"=եfZȘ/WGl'DMnKqe8{(|@BH[2V$ H'fZDZͯYAvpXu98;`J0Ai|TT᧬:'," zE5LY50sY|tb,e}}@f7q"Rl[@LHwX+?nPڑ̵$~HKL^ƕ&x6X:Ry&x91,wNœi!![2uuuf+Cz$dkB&s%]GEr!c^UƟu,+j caTѽݞXTGdEn>$(hHsYU2r-zgxO?r + q,4tVQݢ]m!I¼Uf_˛fqUΛi+@ l%^"Ȥ a7($û2++g~ mVf_lp0T"H D8ξ0wX*2vMq G44/ d_QXK 9}+/|`}EoFxlyL.`˃QQ`oޫ)yLHde**¥"@\*J&zjQ$&;R_H`5X `̓:Z+8JHVtU y9s|L:њ5d ^ YE6~YA>WwVPW~y*H<+_>Wxxv>pL>ՈQ*c">d d~K%R)_ ȇq9V6= -8<6H(jFY)T޶$+^2czPVv;ւ&|ٍ {dId$ Jggb,{L{ lOX`ڶ ( B4a42"($ r(F.fB?\TώK@MU1stizXz#ݞ⋿2TW5IΑu Eqb02u˴'I1 ֊R{ y ]7]V *495s9D^cc T"ڎ.h90hjY-T.5ux,X T8T*DZ {ٻov4). :̄UU!kR,7mhD_dGbhLpecR1*;qv*ãϟ.Z̍dɉIOW?R4G7A[ R4 t& BϛwU/Yq~nl ŧA$'Q>ӱ8cNduA0 p}:Z>˃v@I,&aED݄]=uG{Q3+۷vQȯۙqbQv|tsN#k V.HK.XFj6VpW`VPa!%T9wu3|D Hi0R@,wm=6[)^%[,F JOA .{ؘ_ haF~ #@đzuMS$\riݳ ʛua*KC,4ֿF`zb!h}xzNTT-}fdw H /g0:k+x2dW^q@DM2DRUcG~eXYa.v=v_:|k?6W2i?hKGaEWX$!b9Z_|DZ%g͋&VR"c ?TGunDqח/]K*r:E%'ƌdGHadwv"qxL 9yd߶:#ꦁQ6 \м˃ b秥O(H-_ki'z>0 2-Vag=KkGq{{wzoL$ljKDJ=̱gJJz1*B'd F #Yzo߿yf_滚FFA.٪7ЦYs쿂f}.pych+LUXaD`.ni9\B=(Ugz)y G>B曌%6zP^-QfG& &ӼFXE+IVjүTl/cY#Ϟ,HtyH6=@Ͻ)Qž= qpp>L-vGD.(hoD17F`֣ ^"K&څ`M`,0:諿v ~ =UJ!@#1iF",ZtB4! >y .:DR &R/:aV ɜD/( ~-)TcT :C*Z5vGReD +Vw|/B}fz4E%#*4EX(˒a_wH#p2H݇<u'H3EGLK?勳ݑŽ cvg\"[$(NjRaR̎iPA=?up2A/daQ0R;҄5==8G48K 5XNej%؈#fgY=#0mI $>zM48twv[vZY=+FvToHΎ(PZ8dY sn[=cDaϑ. (l{yF)>D9K$8H(k   >IªHPFQ#g%`lxxx{삫Պu=l9{ZDb CQ_,TJ L(50<+DU |v\b$^aʨ @q aE9WE.& x8MbQpY9gw *?ZWDFBEpDq_p\B^G5A8\E2*U%.6(x,͛SXV#Ѩ? r\ `dXcM]CkId*d< oD3WVzO-JZ+ep)"nANbxvzh4UgpͲL$7!Qd !ʟ#n/+U2 ;`el] DxsW5pAvl-;n-+:X)O0˽ fSCWWaQL 珎@"/d#ʓ'FN  1@x&T?{gHIֶnuk7< )r"3o83 w& oDr&@ ZZP+j]?;dfԤ*ﮥ9=<X 컿'q@*ZI `8Ģ5FZ"%ekdiBnN^曯`Aՙ+g.&DQOE0|-Bi -~/Hu >|qƛ#YTĽbr㈲]*RD FQ &Pp򥵍鉵FCkLEF]FF6W"1`T@bWpUfBL:Zk5M12JVF­]t CKF$$5Ej nKr}IAr2#|[5+3v%Iʛ[[}U2BLůN3HRj7+vqGp0E$ggG".zR#If$bW5Q 8͵*n/Ȉ):).HeG{V~ @F ʃqd]";7a1%Khc_<-vG /üdo%!`do u|HK`a){%b)KuBi(:HDW=|] k n"⹣['1o1߰K$޴wٵS\%!ͬu£I9@]D.._eYۮ, ^u$fr[!@Uc$z[&`.܊M Jzqy)`]P vGwIX$%HԝV,t_T>@BWl8v)І2Nɮldr# 2G'cPD+nhbWp'XEpo9X<^!VHSEc.A}*WoQD>ikF|#s Q Zsӯi2AUB {0\OT UaN]t ȩ_"]]]Z$9v٧V,$"p7@ìoI Bg KDY\KR{ ٱ[!o_E('ךY |O <=&t+9O[2t׻)+9H#HqxHF.ջB15I0@0 Ys^6CCn@*T[Y.(yu} ȥS U z8css:HjPgoz*02b{h ( ./>GB?bV@N{FSӇ@<2d߯:y\WmqUPe8_D|!amL 0>5>I*2ᆊׂa~r&^lʎςI>{)bQ2`N@tR)VəfSyd*q3vr(@A/L]?N0~z- @~9&NZ;*i`Z.$)j*Jɀ>hbP0J,BU[ O΢m=:g QC]z@UwCH\ЅtL*6Bgʐ\a#`AW/GV !9#n`v@q)s>d(^z7.d;Rb@k㝺P:l tJ0ѡcaL K`c-nn׫'GMg+mw<4t'}@r$88rbjųc~L xgj gd7[AE/(p 'HVi#H&bnSGG{bK0ip%v:Oi8Ѧ|^+y)* v\;}C:tL@{o7E(CsxM 1/`HR$iNVU*y"sPܝ<: q9(!H=: ̋,A?a$[5ÂH!cn Oa)}5C=q;O|d<ǀ=30lDM ֦ďϢŷ1 @-}E0UU$sT*\_ՋL)5(}FU5fal-H|+rY j[6n2BtS. edfo.n{ r˹1E J#adu$B;06Eslm(bʹ8Z :ihAJW‹ٸHi$.Ι,ofN7EL!y* Z<\6eN<XEᘡ@|2 qzP2tΥAّ ݘv_mStWJ.;_ O(\^ݒIJ 0yƈĈ`$):Ljb>hhooklYW:k`/"XEirKiZ7Rz>όD A9,ۧz=vkAZ೅EA O)B?VYp^X^uPK!K9uC3R0Hhq:2BF#e@]A$Xй?96/ s}dTk+(?vb' ;88x>RLNH곡h<O 'uCHJ'#_3FWZׁ=4Oq›6}6 ϛYڔӛ`8| X1P~JÅJH%V9TQK]731"#ÕR -6v7e{nZ;-m7H.Ɋ5fQɥ0Prȶf:x*RQV 2RY), y4T?*h7(ֈǩCEsn1DLk=V)sLf|ە;U]" z{^"&0_׿ϊȯ,qhe5.⏀R:50bB"Cw+T>G0Kx-]+̽Zjd hjK!kPS$DR~uh!gɐ )92uH7hVHwsr^p嚸HG8VVt"ۛ-qva.a&D᯾݂TطY7C#N%'O7Ue"mrsKp @[l@̕#TRw9Zhd jҮcf B?biQATט-o*q8m)"`JBe޲!;=E \$xv[^JLsVtCKDEh@&H AueP#1BC1*VGjjjn臒 Hd<RbDc"@xgw.?")dXdFԸ+Čr1Xt!E}`n,(d߰evm @HhLT47?2Cz^p[Օ;]i3MƲXX0S=~0a!)72Bb% c4Q_VB%:"$~ -m~ f[g 9լj>jW6uՈ1N䢂!"EB,ʆ  ?: +Mi2´-M9h2<{7fpvusyk`n[[NjwD.%c~1'x ɃhNgVX%BoqM'cN'()P<`Dg0`Z:-rhubEK2'@PȌM"v|k+`T-#.i-7Ҧ.z;&qܼD6W`4ݦu6U(bsj*x-{R|ߔՃS{"}ɚBf]YS Y1S/7Јr%IAN V ,qMѴ@,GPS1.PM>٫?~k=5v|kO( H{rc%w7JuXY<0;)GฟeLVmu%y;eox7_8ĹȼKɬ 3fdxd&ͨ<6mkb),׻qYdŐZ_ʁpkwI-v@׏>RYy).xR =K{sUGvҥ T3vC=,(ɇŽ|q ($ԡ! N.[tYV$6%f\ͺࣞ^o%r0T?Cc*a+N&qPD% 켱}j-L W]Mo{FD@~"Q%Gi}H`Fl ?o\ 'lIF`b=QX'5 s".AP IcpsEt155۹YucpW604~498*VA[~ڢ7M懳R>w찈DPlIQ>NF>CUMI,JA/Jd0ҡH$9.m#vEy94UINOFj.y釫iOߩ32 w?0jC׮X6tuXSZ%\#O ZatYkE),[i_uWsgq+ˈAyi(9)oZ3+IQZ JYbq9KHn)dJǯF@^k@-<3O/Ȏ]U~C'a-s}Cs@1B<'/y`5OUёeѷOceU ǁ{-W‰<GTAYDxҵll1\RFZ 4 D _{י]kNP?•kWG P_ҰeNId]hҥma 7L7nn/B YڸMܷXSHd9zGjXi`mO6µ$ ,|,ʴO jrՈlc$! TE~[omn{r;u\8;}ê,C2m)˟ųtү}sHG|gDyw}[}vy(ޮL3Hv$FU7KHSηye5y)X0S$Հl8IPX3-Ya(q$>Ejn A^.c6s)⩴4eh}+P'w:$ߜ+ê646l@@6/]ʇAB]9ylCϲc[>r.m~.^l^xgr'7Ay*,k&,B_T $mb &\V)p^K#йx5:8hhWƵSS"2a`;;_uK9̘|XN,^P׶:s C]6lkl׺'K>oc5E1voVp DsOR h !QM$6ָfȦ I[b&)+{t_VU+fWXBq*y r=Kv _=~h^'cn]jd=$ҙ׍*̳AtyYbLģp湎[C6uD7}~ѨXeߛ\IkDYXN7* ]/D"Žl>"~t&<-lºjFar'bef3t32)3ˇYy;(% /м%MJ7_5mjmP} h@!'ǟ|T4C1T 5~U}IwZIxZ2y?KP,ƈ}<\ ֳOW!τu咫Uen(tAbF:]"FC\3Vہl'HL,$?ݻh7|h{wǴa3u A4Q;;LhSd%;Ǐ?s \ℌ_(t89]\&+؈ hC.C,P$/m2ZW4V;.&7YSPjd`3xo]_կJ-.ItH|Mrpq:IXi-EKaI K^?<&F J 1FM9C*s}yySš2Wll[|k%RˑH^ ?珙P?C"S1lo{u{/]bSG{yZsq*4o3L1J+anIEHHsYJfݍfײe d,9J=>*Hf $&fB$ I[H/Rڤa}ʲ41I+l } `rG$F}U')Eak{CQ+5&gQl[?]BPtI zϹ-u@hL&] ( Q7R$ EA*.(1C'.q0OUw`G,QA8ٰrWOœ]36T~qd`68^NMͻFwIzrBbI) w+JGm"p_$]R̥yzkEi> }s|%Z1$1TY `(Z_!#, 5Ջ,ˉĎ,Fzxpeg&~r/@aݓ=3^I LAY1lu2^#_F@KG'㶎y' , E2 Nz:)2^RgV>f&nIArt0ڄ.Nj F?f~Y?s&+v HhQ==)Qa5VEF$zCQ Ox,?/:@=50СBQH6aI0$[^^zWf N4\\"%\45n˵xb\ݳقziq!;+qԷXVLTC.EX d3ĥOV":)c'WGZ1`ȶW" *rPT(~**R 6=Xr,+`^CDFv=!$1ي e8fs6^^r]Б D*Kl~k}zuŖZôD!]PXJt{5Ċ{:7S9;'ޢ%W{y9 2f>r(9?ju9(r3K‚H~u چf*[6C(ۑ-Y GșV*qCRVw}w(Jr ge9c¶j:}~SE=R,tս{M4j{Ib2"lj/@(>g5p]q XwIeΓ]Vւxx|_X~W>xcݎ,g 5X6^Ջp9#(?FdMm9KWKKu  8/ JXj GF>m)zޫ} Iˑ- RTظ:G\vIuX!aA#KA y^EVj{p"6[']F8R~?cYl9 [lFo1$(`>8cDŽ2/.iJUxlej܆>.U03z #+ZjkjkZ-Хm*\Lo*MQ >1a+Dj~cZOUODE6F*vD2OmOȪ[1'"۾wjW}6ګwjo+?*0g{wX/QiFd lBya x1WGg:F ܽ,vE2C&EN׭q44JeR2:G'u+qRD>Ni k//X^$R2"JsdE@,,))z@;1AFju.잲+ cCo^RƄ^"ۈfZr #>WXpMsd־s6KocJ2ԫcjb"k)&lB+!ӵgkRN_R(նi#}O[k~1!22"DJ[+,zi,fxjD^.cQ7ۛ9_ {=[4}gQ#<(rLz}ahQB$z\M*YJx]uΕC+ zԁa>쟯LUI$!қ?[}eNٹ#Rf+G.z[.*KcR?+%i< uXK3kw?T';Ej7!~.iIj@Ox8r2:sN]5ݿ=Բ) 7|~-O#k/8mV1B~-G]Qk(,]?qOa;*4N($b|,XSj>Ie8M2rĭg)rm虺*,qw6 HErAHgܶ :rϛHee0Bo<&1Zs[,ևvh Ep9w,VJd'S\ڻw$q:+L3u,gg"-]~4Wc w0^HaO!n<О;z:s?F(6O4gYIB Hy֝k~%gt#&';\T7+2fGG[< iOWI<5wm$7[eK"uF餕:jboqjNMd(:,=j7#nf9ǔ,)ëYDD0 aݷ-LU͍ B hǖE\{I7Yi:i-xv ܱq֍el~vw?%=%3"x]iSeP HG<ꐙşaȿʨ}`0ӵ4:^@_L$ȁT6vFOl}`޲!W8$g .!XL_[pcyRb4?,s8lņ8n ,`8\GXS"gcCa4Hn)-8B]ݹmV;wK+,wt]glx󾩶6jU'Xi6w%ƽSQkUaevAxl6"&9iPsWVQ$:b-8xbo~R,H=S?"IFlsE+nwT0.bzGlઋ696ږG '8YĜ+?~U{*y5B 5{<@PFZ]o,sY‘ri 㣏_?޸%O׾Gl{[{[=qW5-Ww~?|b+7eՕ&աEZDߣ܇RXHG;=UN^fa鍯O3'Ɛ8˚_#0FGYpV&Wc)4SE35D]֐vb-:L??&kw;gn5vKuEFi j|3`A TY"o˟<܇卛}Gob<-ʢ PizSnoQBLGbjj86:dNxu/ȭxXNeF˫Lf6Yŗ$SEZ0tīNv 1z ssΝELblR2c?Ix$u 8gZ MyyL0LS1vDvO^ز 7˝ ,/[W؞/0En?} HʣV -'^{E*E@5 k_gkÛcr\6G]S ĺ:GUPH<<{nAM{堩A A -"K8Ү2?jd,iI&3o݋EIqǪM4 GHHYEDUY@ |ƺ̣ڽ aeHk0?[RC>fґja05%W,g(eW{6u8, ϱd;ۧsPJӅĆ&m̥u*2cJ;N\)_zN5iVb,gUv&)o5RD6=X,}C,[E؋||} !$)<IaMu)ۊcRK!tE#uwĆ'϶bW͍}aȥKɢ ?4JB5HLB,W(2lw;';DHKNG1!<)fJg.hJ1RJύ_y~^Kΐ"F8d]*%yW졚"owVېl|u6o)*9.`z XIWB‘ LIvT9hKڭ%҆sڀa% +ai $c^W=":Z5(%EnB"[0l0;R =ETlPV}Kn3@.9-ґQߔ={4M"Ÿ>ؼ>{ivAS1Y_y6Ra#ΚBBT)`hwwJ"݉MG\ JI#ͧ!TzxOGlWۜegU)qLz]%'])l]5܇aNQ{\S89ի֑ГީX+݉f#Dp@DyR`A*M[)B G%; M0Bi&˾ՠ6PgB.Y3yٓg%zU p^#fsu>k,49 Ggbpq"@3m6wR6=C5n3mp2|곛-uѰ=%4T`v"!r5|S*OM(Ttq&D%EOSpS DI&EQ1s8+-wL/ 9qwtC0kI$5b (;G"'^r]M^{,Xo_V/WEķ囃l2rktpJkGIk ($3yxP-o&jv%#x=5`MJT!<mi(Ԑa|3ZM)6 -tNtwBϹg w$"f9zUӄ寞j'd G.@` =dϿZypdǺY1P>6j X;@.D>nUWD#! W00wadS 'i')Daz |iOG00ȋL̚bԉ*̪4+ii8KOu'ju|*AZ ~(V"(#'_~KCdFHDV;xmã|u Hd2ݝX5A@6;=k;\j(mPCW8򀳑$'+4snf⨁P(Qx٢݅[lEJji̒Ф) iBAeDZ^Z}V,.}`*Cw~ AP4A/xf IoG7oi-q@U#d7"! ŘӇp3nkU1QzLb3Ӥ I0.g|sxb:͇F\6g3t bYE#5&rjł,'Rߤn/#!BԨO$.UGs݋w#HگLOȄx,,e" &amy!dnB~&*0Eԭ=}K KE,izH/&BYMfMgea+` ,$C}W{"[XqU2?r[&nKIa.w^B6sXQ2Rvź(!Y+D v `˅dx5;r1A }DV _DY#?ٱ}"+HZ,}0G 0z8=&VC5A[Y=4 `O"%++aUsCfB"_Į$b" zؤס/\$3 Qnn% iMO9H"# /*dA0>zƿk>&USs>=MM5Aˍ`$x;Iی#|͕r,QALVBaho߫k."bIh1ȮHkx!^mxu*f$%BŸ(>|> +Ng")R $UBG8rbE4($rbB"b!4M@OԂ%$ g!!藧 3u奐iκgir":\޷cE|ԇs)dO 9Eހ烗O,=!L^a7>,Plϐ A6h@ D$>Dv"@Pdɝ&DEF"M&.=gb, mhMiDPHl}S0/!@#zX#T3cDcӠz! 4S@jEk?BxR+G֐"8%X"U\Ddf"XDz{qِ5iR;N m.@hXKmݣR+TBܓH"]u9 iVYE~kkM)*(͚J0`e M %5i3xM:W0~1y$8\=FjB]YﯙC8ʈ4?_mى!UVL >-Z¶e;ES.1Ԅwz\6+7iY j8g ?F|T `ʒ vd:frRү*T/6苉1! H3>HNTLck646 -&nd-"(:IA`U y8x/ y-_r(xgPD2d ;(=B]@\hF*Eذ:kaidY8&"m$X}9>W|Ь5CsKa#^NHOc>6UBI )B]J:ሶ&GReqWעzx2Fx<O>A)yR3xO@uݧ?%m1تK? +rFjh4;>g(FUK| [e+B?n9䪫;=tg+1#c`MT|"O XvI)+ꝤyH}[HEAWBF3#5ce{ﯔ O0C>g$bDno=\[=ABflC{DAR.A^7QIMi )'z48L*dS"[GHz/MD]ŘI1,WP35Rjl0z~P>jEioLBG8CQdDO֛\ | e~2X;ZC#cDU#1:\qc`g*V}͐\uAaX"b2az2f &xc9^lpTKB4|y#q!B\mgW2f&;68:R=L`._.Ї/ <ȱ(v g1Ⱥ gAE!mkɑ{j*O a$dT&Ii> oŽkex:W5:LHZ/];ǣ7א`} ☪aKBda\HYbNT_ ^4%Q*$ bm&{ dr:1tjV*4zЇJ^@r!k ޅɯ.6{qDpoKqM#>|K7F*ŚXF-ؔu;a((97D@ 5K0N7Q$) k!9>nq$l g̝sTad}Eb& !exH,Ev@"-U!Ca(4s̓ENJ܉3U%awZ E>^MlZ# NQ%i-:NdwIsV(=:,MqF0RE;v*m(̑P<=wǁ㑲a, p豃dMY*$TQVGx0X_;&xh3=B(MYEhsKEc=7BpH;`XܥK&;y\-\⍣XW?ABAۉ< NPgMT,>Typ},m(Wiw7S}.]m>63;^vOP`Сgq rjBa4rG0,l&{QNX~@w}"2`VK[K菎ta_e7>] 2#hBN~a_:)~nC#rWϪ*o WaMn0h~ʰ%jM;r>w=D 1B`p]E=Wm~ vN2 l*d >k+מ+;/V#]~;E@H8%}r@n> G^PkB S"K/]|ƿ>[_./zufK"XHuYÑknw$_mB,s)g[D,*{sϒhaJe,'zu@_zLGX:Y9B56a 1dPSr!"O$$4CjLyE{l9r>W^}{nf;6?|K|6GS.Vk7?/]_޸v/-uF@hY}P sr]2vЩ6iyGXIJ3t9FxI\l:g"lSTvIyɘMc`2o[;rEQK oP1ƣ0C7WOa!#O,paϲTWy;}u?>A6n~ϬKR@L|j Q?enZaOoD TBA#aY™V^:OBbNoa7k-۩C8rr?jm3ur5l;!m Fg3 }b N cy.[RnȻ߻y{\6ELh&Ν/lۼc#0ؼ-:3V00SfpjQ>BO36=02Wr[2x-BQ4;TitvKSm#2lmկ.A9?[ulh ! S 3DPsF#r5#mmTUE.h_r[/asV|x{NYHŌ'z\ֆ#O=i.]7xz* 3/gRTCYbYI_hɒлHJ\!.Jgݘfiaadf.gKHż&'GtOK@jBavo3RW1a-lv=)l+O <L8l9e] <-H!N壼Qڕj%s%S4+Rk#TB 9 G!%}-\nTL߉d><~3  Z1*s .@rԥ , bT-m<{R$-]-n^Dn\t3=ߡ"fw/ӪQGHw:*|Tr݇fcY[C,| Rh-ۑcLjwmKI~.F؆Tk_)Ɏ¦u roؾ =&'0onb J.7mh,&DFYqE $ 'naLˊpzRXĆTj?-'{oɋ};ต@ xȃxH kS a3[$H5yh])w{ Vneg98PMj)hɁ%r)ѵEBnH|a %ױzlxqySɾ)@"ElA"!:ȓDz%[oL=]YT&dmIFOS(-v"G%?&OɝB_v8"oP5ǗDFB7oC˲QAǒTz51|r Gd"W7#|G\{V٪('10(܁դ(@ZX Yzlb!hwQ\.&X>?w]ɋvvS<}5* kCfPb#@j8b.a-*h=_;ھBeKK/ű=`v:!4u<&<؈2Aݲz"ki*`c !VC§ŞUOT=|{YKL*Th1C"h8+Jiw;z|G.AG?^6^^ȱ޻x;6x~H*x Q1E^bxoơVP" k_ 0K r6B37Pe;aK`vGYњKv&= Rlv$h_yi1ɍMt#JF01D1G PK 7fs/BĽI ׵IY*YwcCc~2^ *kTFQءq;/ Mž`AS(qU5DY&D,GJ&4?etFu9I"=%Û1:thYI? ?Z䛲zb3"@8Ua"8_ّ!cwlC1yU OY9賛_'|XmJ>[n9b'zmd4Ѫyg)# ܕ=lλFu7ܦjm4S DŽ(xH9,*qOϏ]crb{Jg"Mt K$jצ]X(`܃EE@U!sNr:="v!7;: ]aD.db/:p^PKđE;^M@V]FSH\m!^\k+\w!!"a@`y+llm+^-q41֞!ou~ŌT_-d3TN&:|BQ",n!`~P;D6ɧU^gf @j m#i ]X<8x > w^ig߳m2J,J`:x+˥aOe\/z:= 1+/wU8]S&^,#1Y5fL FF@0*:+kDU,ҢE @7Y&je8wb</2ރ+k\&G`G\׾x‘|xO<:!V?)i2UCD$ T"X9Y7(蝯t D[ 34jֱ[i…jHKn!t7+*`&p#[ gNtr/|_|%LN9KaZ%uOn~Y edsu1@WQ_B#Vc ׆UW+UȌz.bEUʆrws˪ qEenAc0 LJJҧ s>KV wI-^pvY!Z3*੥A|Q{)6}wFPPf9Bk˪HXWXfڪ7s$N;\@^hi66R6K1$H|D2$fLME|k0u'ֲAr?;s眓3MM¦ UpH2C.yn1@+w(X,9)1iY<jn:BThk-Ky0Q8bԆIVl1 >f ` $SHLN[㻸K_^] }ayh4HEw>d:Xࢮ R+|R0%6你#Q]--PDAT[{LUY8?W8pp7GA 6(#:UI+ Rd>x\חpmLy̐Q0ۙ|}K2B.Pnޠ}_S>Mg^7w.{Ko VܻJ>wzӹnw84yfV$P{ 4ag|a_%H;"@ +Y$zR*sC8ekQL YSoP-5vZ0U8YfH8!shh9nkIC@مjƟ~6" цqL<c|\͎p甋QJG|]sÏ@:[ BM% ZhBZ(wW/4.:1ha": 6TAẽq(2S*d:ITvŷ-5ͰQ*I,êpz@D,7r߻".+hn4E~yB*7MsSBVÔe>3'ڕ R!ԁrFjuCxBqϘakkBLV蟜$K؅lP[T,"0жi/_}nr7]x4&#J`< yGc(9Ld| C6k ',c~RT Y}h'1f aa FS7Ԍ(\s*LeŲpqzG?fL һBâN_$DWم-n!-~b vNE*UY^^9,lT/ DHInΘ8ے }Kii!$\ #hQH8\ vws< ʏpT޽2wDƐ K\?cH~u>ޖڍgMėMԮɄ@ 頫JL*;8oL2]QFw8|JkZ 'ox~? {NP.FbK9E:)  ) np$dڬ p'I;[ fe!jP|y9H`(Yp œm>̋]a IjO#.tOMW6 h|˳r`?ʊQsˬ`Qp3C=4qx ${HsGlr8׀"[h}r#Rԃ1D42K&OF:Ipe>Bp > kS,0(㵇qԕ!ј^ ɏ[N63.X0IEyZ{nQD33*>Qv34:bB pz Uzpk(zqsVcpUDJbvRv]\A(c=1 e /LfD^J%84tպQ>(;{GN 3eMN}z4C<DZ>Q+72;r2NxͅkQzA +ďZ̘UɭUtN/tE{T !}<*&Ck>Kh夒v S&u*jq|Ly 1"(BЅ@ѹP-o z,P^]rf6bp^/6R'Zy"+, AU if{6J#0;]q悃a̋RD1;μV4Fq7@l Wd)** ;kc;sHMf)rPͮR)R"?\wewhrzz]*1$G(`d EKPchPR[B}Kx ~89F?:=~)瞃8D3GZ71dw#@dM%F 沜RT谭NTu2iB)q`1j#+ "'ː3k? xj E"SʚIjM锩i~*I4kh!qcxe@x%©cR*0KƆV^# YX͐qCH R[߫K*gp˂ 0`njruw=;KT'P:;sµ.I;;B`5홳~_7/: Ptu=a!(rSw?6 Jj&%=ʰs@>a ݖ9 ֌Q R|X &7s[rnW}Joz&êE BJ>s3f 7 n"csd/wr6kndV0kI>yμ\n,F.'Zvؾ8r>*>9X:,DX@B__ixvA!)>T''UG|и-e +9?3.0\~m[CztDvx/3@WDT$;҆nj6̵w_r\癿yizRoGw3 @-LΒ3NKNT-7J"dVl(yc.띻G6$e(ֹ/˛)FIJKp7g]z*Y@IF36U qՍMJwpbԀ@?J!sr 0UC׳W1#ʻqC&Z(Hbt;sӭN:QœM@K)UxPXN N6:ZDӼ(طi[\BXXr"dM`E϶I,GUgc|q!P*b?Pz|\|V €euX;E;D0Plmkҥ_&6ѳaItZqVw@'n@tHN0P`",IwxgVsfhK-t ;&{A>={ᣧ~Eă48JU*,[E q+"\у+k݅M 0پ+=HDŽn5,yI{frfy%0월 ]8M9zL%:=L! su&@?I~wpҒ[1Jt~""@ <;?7(u)4JQjTlFRȘ[G*K^ À O ِCD!D}?T37Tz%6 W O4ar,Y2bڪR^jEE28e5?~7x܎ɠY%Or |.5y~MO;tÎm\,=B(r 5%RcI$ib-Yl?l kQwF`}:tĆ-Nm78zﵐ@j^P (q|y԰IQ{;;D>A^MEHm&$zube:E⪗ߖ0 B԰EVรVDv$Ty"-xI ΢ӦG*/g~]h"BB\i 傢;\#)'?X:hnvu=41ޭx )K(w+=w3 u+A|aF: N#ͮ\P=@G9uԐIdU`bl#0 RxtƋ՗֮^J&pႄnd_)E%={H 00-/Qu3mSAڒyKhw<ϟF5ŪFKQ6 L SjJQ?wZ HuTcyat 9R`bs"qǻ,{tƊM+J;w,C czɈ:ƍJg2gjƣT(RrVE]6CؒjժWŲֵ&`]0JYFjYV[吥pHH.VO{An2燨sHyAno[%b{i7qyB {J?888999===>&^P1z쟲b & *ƅ&}VqFXd[vº}7IMAլ+ߋFWeE&2u8쟜 u[x87iYa&mAT$_N?I [2xc'g7(5YY($IbWĈol^jՋ NY8aI&+0ǸFPQFyqďEځن ٗO_`RG=R] YG+o:;sAʹcl:]B# >y 5@G]{ܱ}Sf mLͯ}4ʹ g1䄽L<.2;,Ԭ] hauͧi F^ o k>7XyѻwP<1l9p d7ac ǔ];A8O, l%`3d2So["|b 2Q,]5GH <5u( C+ =z8 φ Ipc  7땚x8 淩 ;Y۾;B=\o|0G еJMrw'?nGǽm6|ZHT6 DŽ:EsV4U[խT }}^U}.^, nED6;7u]O\\Z9, LG診[֧8#Y0->X,@Y^) Ԕ]=ʥ,&n]F3;{x$0E~$DX"پ?Lh Uo哋goZ`hxf:6?HD4 C~kEP+o bZKYn%\^6_FcFgbiema3CeY(IOB=5JZ5OS`Bm*w_HiϫxbhrnZIE{\ Gͯ.,DIk[H*am YOn'7c0ZP&u✎Ι= Tʫ ;CQu4>yACXU d?Ƿdw6O bBT/j3>iS͕^e#Y>Pj! ^BxgjoZcPf_S qYSu^X%9I0],XPjE)ȫ}￯p ZR(3纸B6iLífUCV/ns;EAHUůメvb˴.) Lػ.$ՒnP0CZ[w4zJgoLU% 5% ҙBawx`%OY^(GxN^XgnN2|v>dNsG!ك$HLg;hDwF||~hX*xF#TEAbͭk[i.3DYȕ3i=,2 škwh "y3^!2wGGrZ9חD*/{fﳦz_z؊ 蔊Vr=MdY$x4 d/#odžlY(* 2?WCQ͵i8s^3 2+_R(b/AjsmLAXv`nShhk睤-JT$@NdD*b4oVx[l4KWiMA+"99yI__q0#KЊ@$- 8!.m3 ZgHE:5*L5kmd@B1m%!J pY)=Te߽&& " r |o8_ҩ!3fɫd)X]I'>=K}5UIe>YDI:32%jBx5$6q IW@_< ZnZEĆg}vD-5QIzrKǀiZVB۶@"l-X1閌 :b|W& Qz5H:U;}G?ywo]lnT!Jb>T/*(+.Vm(|h%"r;5_$C (>gH9y2PBj;'SKGª i)ǯ~:R9j]PfW@hOVƎU|t9q}w{7g@h:qUMjfˮ:2ºy3 9+ }]"BC |lgNsr1E3H_|Xbnvٽ褼9FBX!]ȓ;tҕm~v4mo1:M| qcBS=f8s*$ 7EoOaѣb*V^9NV!s eK1](n-'udm&U>QzD tqWlݥ/5RYi?ɧKpd_ 'ؒ489=wj|̐ h܄q2Q/ai>Hńkmn &~@Љcp&&.\3NLu>CZY_yυ((/}:D\؝)vOukp0`'vZ-eYV<>UX(⳽yͼDB\s;}筓lp%dGR=Dֹ pM5o:7+ZѼmB)v˥g :&T@ᜫ0`y>/HaQq#OPm=5kƿיk=Nwt@;bArOK 3x}7nٹ8 kAaLoM,7@jv}XV.>B^D eNn4Wh{Xjɘ!%zc\72^ ѣ{C≰"r7.Z 4hn1:NLbUҐܠ@F! ]ĔGЀ>>F<;@ӫ)Z sQB8:gU IæKz7H䤇h%etKjwcu,CL6Kd5D7EShŝ94B82@%f'U @8~ b@X3+wȷ{L؆YW @cfEQ,; U+vijbUV՚X6K=KwO"h Y'@cu]ۇm~A 0!?t)(rA(&aY|ܕggDhh&Ż>{G .(k Z/׎VISѡ?} LrȏJ9:T-0Vlpwݪ'#jQ+O #u+N B*3H\p;@O ]d.!:oL.kTN9yX$=*4< IK,G-GoĸF]q|^ !OPT<>}rW?|2=CYw@("=J6.m`:8ۖTX=t*G,h6ufqR9 YT%CeÁ;_h"6oU3wqc'?UZB~6,HfAZM)x%dvT u$$;?$csM  =sa!o޻x2>č_ .Q2lK}t饯' [8źe eB!C*m T9[RqZ8eX>- ASM˜׸Y9έe7Qa=4y@ g-볪砊~1RYvͺ&<_A҇6{HOuG5aKHggŘE H& &ʆ6FٽQ7,.3ɜ/Q=Nm,6tŖa:N},rC0 )|9!t7, HM97{K!(M˂T|nH\R+$Wy5J 놹%Dk@hkMT4ΊW~zqB$([frn(Xekq[ҳknDT[z=% YTy@J3TehL\o.I^<`,az _`wfw\g;v9I5)|Fi2?:]"ÖPf!U%LxXKFz#M|,1;Rs5u6$o] f- mņJV@ j&Y,BHI} k@&nr L vtmfDxfg-8m ,!2ljѶ.9o̶Dk,m#[@WpHpW) a |0RFH=NjnEZvMb5y[UL_4N@%k絷{S-\]DyY>GTF:"I7 8y5*TB4u zVpLk/WoQcdXջBɣ5 fԤ uC :DmK@ZHhvڛn@&в>3ǾupqI2rҏ 5RvܻZ|RuWʨDZۧaˢX|ڽ8L92)~Dc萁%ۨ֬KMǢ0*wVi_C;/r^v9@JfI(5 ]- -r^qlvlGD2MTA!ʊ@?^aŌ뛭J..)O`FzX.s e[pH,enu< 2 (z~f]_5UYʬg28a8U8 9IpK_=.JJ ©vaZm HI$sQq\ }҇j$%!;IDߊgWkR*OARהih _Kb@;WxMxAnd ]62Y.o&2Pޮ5)R6׬G)1Jbu{t%[RMv?&NByFs@G:*S OUi5E {[.~R2d X$- tvlo7Ģ=qJ6f[dU YjStI=ͳ[P"}sHj,@n ϵC^?!#vo\4i% IHOB㧇x@nN}A,C@/yϒ= HmKF͓.M:XK¸Թ 5A,E7=}źlJ1=s/8jwR;B,- |x ~ 1vx;=.D [x5n#Py%{4 $o6X+k ~jhUƒTMÌ Wt,!mI_F9C~Jn!zV;^?_*ҸȂ;E&Uj#ȏ̢+9A.r|3 Qu`L^wG,7XߏJ,`/}fєa0#>r8?"2@.tnУx@z;ZE=l9J6r%1$BHp2Y>ۆ_#o֫塪3|0H(:}|' KP|:~Mjv+?wEe_o|h$ {|tdW-3h1A,QC@*#k('/.e(s'|Gh5h H/:%zTc-oO)I(? >w|9>X b1SJ.p ;-ChA,cT!{@$c1z BL583 6d s%[2K:jwh mh{*gWFۣb/i;KYA@֗Q -1 ,f?*, rGsAu4S_ ߀ A$f1HXшrU&hH?MBJDPgטZU'5 d`ϟE<>&@Du*JqtrS:/F d_-)p࣏^F gy!r-)iϲXJ T/R_\Rw2 ȉ5 \:n3KXѴ]5zxVFjژ(XX%j3(:7>j$&cXOuK)(WrJ/4&Y)~G!+lIorl p>8 R6>wtODDlH9I_ őRAA$ux) IIYP9y,FYq+՟ւ[DI.]C>ic@%}i,_6 tY@xFN*:0`N1;%2%EO1VN& '\cgsD@w(;ϘLVUG$!5whɷSWn?g:3^-xe6&TyLL8yy`MNQ6+3& ȡ% 6J!S()Kzh"wq1q pKp_9AZ\[Ax@HQUko-9&΍G4[rq&Aftjh?*3G_sTF38=}'[%xX :|i΀G&,~UI@2^ w;JZBixw?n+avu@eC1>4lț";<Ӡ7\daM2Q5|Ǿ] M@Z*y8uYE@`ɹTwY,CG4m-8>ůSs tfU:ѭ#! Ns:<>H%5AAM Ό"! ?MGGp>"ȁ,OvEuc84OUUh_RCX%D@,7Sw!He|]Y/cc=ZJn e[RY Qfsp5>ɸݪ H,B&Oƿo֫`آh[\vJQv?.aqc5cyPw9ZWOkqM'KhLEc ,%ț3 QI TM4H^oeh+q> B-oD{P/5 ^?$#0[n!SJpxQ LzT>Jo + n +\|t d IsxjERZJ[zu쬉**U̕B#g7Vy^rCat2YE5Zb O$ d}e2',tK6P BNI.xWcWfA rX=xl']}rlBo%R -<[{eQk7B$:B2bN.:=)DWۮ1mܒS,\v +#xM]x Ta\ͶǬ.JHkK@ㄳ=ؕB^ L)A/n B z*Nnı¾sC r:dMŘI(Pa&),)$aKm éԭq2"V7~2@Mbcqn#3P,ޅUM_f={=[e1< W4(@jĻ]GgW,3j ɣAdVƙocnPs 9 X b(ҍ_z_&7 9sR<Y~l>d> %ri(*N"'+vZLzޭΈwo^k\>qc ,nTxɰދ z /%W8=;wn~g 9s]M'3\.)a; {b^dt3"`] EWs]^G? Wײmeo1^~z5/5&\. %Sy|K& HjTǃE1^SV uaCJgUϚ̎q@N&iC,5JJx9%[8dl,e4Qi[ʔTks@jzdHCꦁsuXb$Oo\s]xw{s@k X1Ad^z0O[/ ՜w;MMظ,M8ܘC1&ɕOЯN[7y滞sȪE~r@dc"C% hX)vn[\(7X9`ٴu QlCzG4w?Z&rGEs8z輷GlZj;'ܪDN/Iw A[ؓXVˈl~ iLAAaLt罫YF]zj)a1f"{6?h;(^ԄLz揊ndXd&NқK 9;4:Zj@d"{fC) .LA%~/۝LztZa`+ gZms6- d* )$a-ٴ\]ȪV4yɪ飥ƶdR j@ H}jeٳf5/! ug+Wv&6}@8▌zH6CX#"swXZ@"VM8LK;Db9 4dk#;!/y}W,ɢ8'd"kQzcnyk9ib- 2f*_qɞ2މ$w5ێ9eqү눳AȚ| 3#ɘɨ)W%ҷULP㑩^,~,9嚗Ȓ+ɀxtXdǚuBD6,#RΞXdF|>2Q˸CXJ9ɊY-+j6. M"^g (- f|tDbK,*[@%갤7il#d-TJ8lp8:Xt; 㹅vE$J~䤎`C滽c8O( inI7re!5Pma7A/OFX TH&kihsIӡvh]p:~UH yD?Àx]r'vkbZNzNck7gDz\tC>SA=\rb$':7XTTw%#NdV dBEUv|d 'D_AҖ k-\/;,j3"XҹKypQQu^?{m!hS^]gUAZ48( Ū;A 4W8l)pf|-i>I?dop%6HeC@ oqW:x~_@>AMvȾ{R@_`QCd(l@؀sN2}J@L${@!Qj tRRZ Ko\;C=R|٣c)S^5 3kcr/ ҨfAm/,:CCL"&㺒b !95 node.js http server

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

http-party-http-server-af0ac3e/screenshots/000077500000000000000000000000001424550403000212105ustar00rootroot00000000000000http-party-http-server-af0ac3e/screenshots/directory.png000066400000000000000000000160031424550403000237220ustar00rootroot00000000000000PNG  IHDRoPLTER<[?ИMԑR8& GD?ЙB0NMy`OƂ0;KdUh@nڛ^Y^ԡ-,ߵ[̈ΚV^{𼅁oICڪҳ,LRB֡Qywjשhjƞ)ΔB;<eD>(k X TU5iu׭ߗ؂b{4Y_~S}6 }#gMPjK˶Xj%+ :t=GaT0LH UMq8^CE0 |f9kPT+\z< ˻s()KlFV6D'끭kݘ(uK^2*5c9S|#pXoRvV;0v>aPWv %ԾĮy 4e r[zЀ% 'TiU -u y_<"jTHeNoi}+gNLAm3Q|m_tzbTD]RRrW5֚KIp{HRq9ƞVVj6dv9$Xf zlkk"!\Wj e)oJ5SB\' >ǿ]X:&(HXaZj6}raauˣUM~JA'!%C5ӝUZd0`ll Tr=ftSm{pHU,}^C,x,P~ >=?[alf| dg\%Zʜφ`#&/m|=R0f\p#hͽ)Gs%yO&G휨y/dg[[%q3s.BJ|6ZŀT(r%Z\cq\_K ? gnTr~j8 x6@p5>;\,J\fδ_}NѲ~vco-Wu/{n]JrhA|2Y hjĎc+wЏ7 sh71WF.+\b7jϚD3r3xiSylˢMDFPvx~/d7E|xԉʁ5R)E|"-Lz^geՀc*ۛox^ "oE[|~F4w ՁMK lg@+-L9u9}P0^Aٛ8EU"|.ްѓ z}y\1'S2ۼMzp0 0 0 0 0w(Ln )"h! bm0RdfW!YA|[jbk?$vKb&Wda?…33""""""""""""""""㸖)H]7#4D^u9 v005He8 `0Ƃ$FsF-0 WU%:T{l.svM3!y`!vi3un@zvg\DG8wA`r"p: *Gz\a`ry\0 S+gHTsn1*(W\L%?nQ/ќ͓w)-8@^{sNaKQ mGZᦜB/a`r7; ۜ=Z$ Z_pWrh?XL[99#$لDca\ [5 ;l H$ """""""?N2ǯ+.6juVugwrĒ9!<2:U'Si ۜfҿJ+ /l6;5ޓ*Jw.RGsXK:bh[^ d|DYg^LK:@I$ÃYy\֜rvc@[Hvp%e/ ˹X9t$ J:Fd#22V؜y,ڒʰ`s=~.$C%hٿwP||.&#T&O dP t #ᨐ,bOY˛{wIB!Bi{=Cv{kq^M.7ⴽv9(1jqg(瘜mg8  '&gY;}Xcyܳ:YW:I>13S~6&kq~^OLwѧB %NB!B!vl?94o^wwmvOzXt3l%2u ݳaj\,!.r?v409nYMf9{TmNxϜl咝Pf9X͹槽97{&QHlNu'! oLQϹoFm0)-3C: &j JAlAk+ת-ľq{t"2*y_==mOI~8~6e`]6m֚c#@EmlK5Ѧ Y n'դ3`" q/Ϭnי,%fCb#DU+ƒUiqD ^Ds>S^6@|%503r$*Qֹ5Pz5s//>MSs pԄݏbS8m!|Ng[y)<Q1uO}]sK9'ћ;;k\ O4ӯ+K0k)<7D@ 5#o1ue<Ґukt^#5҂dёfd1ߘ'7R:˾{xjyUuҤ߯#cm\2[=1G/]zE(h͹l&0%ߊ&=HEm|]llh[zx$;zzA̺@uRJsū6. 帤{b]J3KrbT[~X)J*~ 降Y~5'Fy:gEqh*W#f.}|?r:ieg׸O @A>(Ǝ4)cXC*A/$a鱭t *ʟCHhTď! =6`W2%[/)CoQUx=h ؠR|t)9w`R'$ͨW_Vb)1-Zь#=*S=άh?ɒf5u`LNq bmE-'yYg7,0tTB;qSRifi e,`;iG/g QOWNWKq#1uT0GЮv_1+/m]Ryf1©Տ#X~i +F1}YG{hiїpâ4]=ĄBas K15H̻jZduj\Yl UVu?UxVK kUJQX%O_zf'#,#*qU*_:Єڣ蒸u 4i>iJsXA)cc}0>~$đ;r.9IyNy6ZM_',Ytزh[siO &Ѹ(a¬c ) LIOVi0Z%CJC^+E>,5g$C+z6caaaaaaaaaaaaaaaaaaaaxtZIENDB`http-party-http-server-af0ac3e/screenshots/public.png000066400000000000000000001720421424550403000232020ustar00rootroot00000000000000PNG  IHDRPMgAMA asRGBiTXtXML:com.adobe.xmp 1007 911 KPLTELiq213 [FFGGI'ȸlSSR@@#kr.[a#_.&&%$[Z[fef7;IOr{tqq%C44M;;>=>#NM:QPQPE #!3/(u^tRNS)/N" F>7i2w IDATx]km`7dw%"Y/H d YɉnU<~eI<9OWuuuc<xYw8xGWx{M^o(SzCtȫԸ3N+rμ^z^8@.ЁsҚENth6=ˤ{5::E1zͬ /}/̙kI<sٯO볙x`VÜ+sz(?gg9tڍ'nŐI7qAty{3:7V'.M׫GNi2qoz@ Oz2o~oM`30U䉏"17e ʗxy5cz\gku>ιQW^|NyS+ZMf! .=Fphaoߙs˭? Bq X={(CZ#YZpN[howhiϫ^%{ ֻk[ ;Ovyy3S2ޔðqFw1mbuvW?+=ǻ}ށ}Y;hHb5q,=u4tkWonǿ->!gs}^7E_V}*;)s¾'](^oR%Dt b {GR~r*^ z/2f+q*nPf5YwE,^c|-o!Bu5?-[:ƻ6?5[{ og9izsj ^mg;D-P)bZ-jzn]0zcz/6Q6ֵ,u&|fz_djiHKmW7E{ÛM^+osԧ+ xWľ'9.9sew5JP[UMbuºw::zbSs6ti-笝G%!;PҚ*7z<ؼPtFB{?T<>kN,vHwSm}o}:eI?<;fƺ1sZ ?A܁I>su&:soOg}D蝞rLSN@:q^ߡwwz'& ޼ݧ[;{*d'z2hJmxgzG;;p'}Jj-ִՙT;VΒ]M#qf1ԟ}@S"x'8wuN2O;;p3h_czkwfu|ʭ?JXzQBv~RygGgM[>4 fơ6Vdіom|ׂzz*7|,7u>p;VDTܩS;Tsjdc޻z_JE|މC4 o%qe'kϷjo!${Ǿw Nh]ZԠiǾ/A_m1hlwDSjinzrdterP=kg#] ޮS붎2z]u76"ZGܮ:>ැ; ~`]ZxOu &XJNj ɞr2zW= t`2:l% ͻntt̻WIďdŻE/H/x㬏w<ߘ>^}HCI:=zw3>w7Sʊۘ/wz'=zul,qvJWUn=>VmMX<ii=ܟy/|UEX$Mֲ"M2IO4$E4'/mz~ze]'|KbKU)nC?; |<,8_pӞo{Q',GC2=)+sTBSӖw]6ʟw[\[ն=8YkQe{\55-BJHHӆ[=õ@[m]?Lα]zca)څ0eۖv=n p ?I/!>aB ~)xWp_;UlQd1a$LͰk++y>^|qJGX XxHlTdؠѡD!NZ/A$2xoK;@lEH7@=1#r^e8*܇9|Un[Niԡx'̰R *_L+r?XCx/ RW;.5<+蝴q YrPpq*Gln9(Z_~yOIwRB@xo*$ jR>) C°V "XB4Au2/ 9 @ N$ʩ|J䓅u#=[oXՌ>f~-{ ;f?Us .մ_qjƀf(XݰF1WBr*5 #.CH%*).AC}?QqC r4}|w~N__Egp m>wqnQ?cp\9ƻ)!`7 #ptx xޭyʩi:6Z?B]B ; *urTjOR7»|F./u]o'ϗgBoܜ <\~O@iā]{w{lPkfLOD Oyr;f2Y]f8:iN}m=Ro=]d^A}ݘHSDwn糫c|޳I%}IyD-0u9b*Xd6^>ŋL"AH̭j=MwM%ZunbwOcGz>»f-^|\qy}o9nӷ[D-H<"F rl@o(QY0shoU5%JY~H=[a OU(3dU.2=QV!wf^׋ny߿Oy+Я|~YmR'Jdy~ȿM7}iI_(ѫܦm2>ަuR'J x_}fuu{DOA {Dnq^%;2Ӿ DU^ōwާ >-@xa|0!(ٔ2!AX_@ gjw'-uQ+_ݝ _ǚeF]vLE=*9!y5sx{+EҩXz|!uywslRD~Ptxv`~ջ?a\Ɛ]KI8y^źoHaW*;C b'†ZvsWu =(p`Tp[7o[}5߱^p~pU 1J:|yIw6o9-=r{n&1! Mfpo-ZwMhh7v'!JW'=/pv x#>ndZM_۴_ؖVBc}6Ags-(Q"umg}{}T;+L߮9>ZS&j5TV՟/U`J<*YDx:mdz? fuӏfmە|<]82Cҟ.5hzݘƆ2qҘՊ6E,6+͊ws4=ZS4il1UyoF^ccF[Qxx!dK#$x7}û*Y5 :ǾAܯuO}ԽC}cNzUv{N Na6c.< 47X箨3ûn 2/\TYu 3C^WRoF-PJԦAb(!V5soco v%~&l+ txbe;t0,5_D_eaYkKg c8/l~+Zx-@? KyQk/fSc2MP򕰸vYX, cP~ cXǀ6gY&`Pɸz*{g+7Os:@ߣjᙶQ$KՕnObglRk?醼U{G1_߿n׹uES6]h25V/.0*2>0 mRhM݃rp|wN0 0x: c"{4Jw}6eT2 |)rЖlm5j>gY5竈 ɶpxƛq޹`uO M.H\]~aAϭ+,~KC}e}l&**W X&O<V^w[ Y *|:U)}1ĀM%aCh#6.K[.óFV s ד;S.n<;ӫ8 b U ]'1G_,a{Ur#zi_708Ӳ]{֞3<K?"K?(E~^7 V#`I鍊&5Z{x8Lڇ;5C{|{y{NkfkLv>z)=)bʍjoXM>4@8+}ȇxo,&ds[9U4&dA^=veR [CA1b8R޳'O7ظ|NUhu{>3\l=B4Gx!1f&swe,{.nt3zo*IVd 7|'wxԇ} )p}jnt`4k'o^PAƑ\U>_{8y a}<uwf<!=H0\ܡ`3:;n7"㌣߃w ?4<4ĻbL Gƻi648Ȕ7>^/6ͶxefY]Z 4?2VTxDm޸Sk]l23X89_Fߎ@:f Rm1y`70>DQbqZ>nF9a^`tҪq>{W]Fq0u p4x'ب82hS [EOuqݎMޙ'b%&ڽsI@߇T[Mp#ɹz~ߵ+ =ݱcm\8jðH,+"oWp @q)--[,0T\iZ9gIU~Qx\ZЉgׅ o~HwgͼM(Ka& ^ƒز>VE rO([bVNK"UJ׶|XetmYx~ȽbsQѾϝgޣu `~9E*%׍[uO: ^XQb#svB?wyf)pDr0MD)в |齫1k|~X`ut Q3G,bzFTJtNhZ0q< ?lzVm| Erro t0w̬I,(oRSڃoL&hؓ{Ac\ksl'A,kozvSdɀp3P?>IQ|s9gOwy<ǑE̹C5Ř'e^Sv=ɶ5ԣ;] m ;.›"@L}:~Q A,*z.b2ot_OPRoSٜW9?QOJo9qVqsplsq_~zY|^|%5@3B#7]yh| we.udv#+&~=a}eŏԤ(f?x׽|$ss~ؿ #O'mO[["ϧ;ROxWjMoUxPn1k0(GF>x߹ ˲gy'/_{]EW>Ξmb]4e Dƶۿx%pc<ޗ|=O߉~/<|_s;%'""w""'""hw""k~DDDgNDDt=DDDgNDDt~DDDלNDDt=DDDלNDDt~DDD'NDDt=DDDW߉?߉>B߉./8:{s?U<ALD=I翟I/w .{S?sw/YGLD?H5PGK=E/IT{?+ogI&>џ9dΞ7 ԛ_J3q#:R+%ZHȂ*K6$Hl`7mUBϣ;@~û@qYMr9Gws`~}Üh|Gw{p;U| ?%rw[7u/;_0LQ>B﹐x%̡\gOErm:q@fr0Gw;QzW*C9Z1xo nC &<x<[(/Mqp`Pn= wՇg(yABƥWIq#u:'T PN?Ь&<(ӑ%2SZA| >+-#bg̍q@`>R5 ?D 7{Br+گzF/س@\A17soP(u?5}2 "{A]o'Q̋oƝ8Ip}!׳6cq" xr./38荘Uw3o+m?ðZr,/nd1sn+;GQo^9VtwwG9_~]oyq7uJyS}!|lg@o'ω|u?u@.=xc"ul =Y7ӀDr^;;Cc 3tƆ^o}1w"}>C,}(9q "[#M. C|u=.`;=egwh+=gֻbǕy?ߗ&Iwb,8k^AQ4o=%גx)uX(NC9/~$pNw.Q~s9ؖ g>{|ܤ+\ѐTӢڿ;ਫ਼E;)@;Ezd^ƿ2(Py?{体ubYq75Uq>~aʱ{rjOg^Z:뽈wPLTQ?q»~:gy"~Wg4>-D CИUy/aԮ)";wߕ|>o@<4wj|;B^Ly s:}6 +ӐO_KwWGž|xyPR~N2\/. Itr!ٖ4卑O)NQPS5]OGt2g}\p+ӣ!3Rնyֿgy_}"6i:y⡛E> ?+{wZ$TgOQ;wOl6ӫ̾9F'˺x}!~1O64OzUhd-Eڏ=1 t/"RiHЖSy`?|(-Ba=M!4οߣ.΢D߹Yfck6b&CNoY7ӆӐ;kUja{}ID]kȃIdȕU{7c>Y_NRցyX8{ҰFyo5Ee}CqX dzj\n$>cr>?VOyTQ˙k}L|_ݤl>'V묑oJ> Ղu+*}g})Eq5)L5"|%/n^'Vozqk ] 5FxEu+wsu%2.dP?;7&1^P5iߍ]]z=z/OwN}ozBx»OU}9wӏ,hb9&:/$ƚP0FxYw "V̉o@ѮG(\$U1 ϧ\!n_߶:HʲJĨLek}Iwlͫuv`}ǏƸZ:waoG+aYBd9_:ck[e ?05x`7Eߍ-'MOsugWʜfur|5DW;gbCXYYO˶o ?/n+<^Quޏ1- 6*Y<~=m]{/ʋJdŵfI$Y1yfw)w=ݚW~>B⪢.^r2 y*_:1u|`~ecywB!4?P @\,:;R4ȻۋxKo+ϾKEO@cmނrC6ǦYmcTF8eUOPޙZBۧ`9!]qqu6Lj |H|+:/!^p+V/'hBo-8M? kUOIwG ۇT=S \W nӋ+TyNXc:/kZR?gVgSǹh*A/Txx>\^j<u4{&))e Ϡt\=YWk@,h#}xW܀U9iK]ծWGH8\^޹,P7<ZR W7hԿV\L~L :R/g*@sF,w8|Â{?Lm6k#|?[xK6BߖXvCt L]@?o]oI(S5؃1IWwJ"p,#+4`ӡZ=?Y57pAǟ}3i~RJOxco4Q;>ݥ٬/3nWuj6xWݎh6@xXVH<%gm$y:ljX%cr:fOā_یyY7q. u<]1g l׍ W9!spJwd4 K=λם؋vKCؼ*^:>xG/yQhrk/\+X`/--c䱯9dUD~CsU+tA^e[ xvwAvQyz\=bчֆh ߵ'!m\q~]U$]V%<: 0'JM2ysv yrҤ}yPH<{@\fpX>୙3D0OPzw"/Zg8[sO}gKA[bY~T>[֢8a(EQi@sDn!"?wt># /#c{8yB|%nbh}~N;ӟ:H{/Ϫ3߷! }Ѣ;3GS/M >I8jb/(E^Y D^C>=(ֻ;?eu\/ e1۔9}drAxA/G%' xɻ#Gͺ-o_i9 ܞ61<4*ȋhO P;C"$] x$щ(ggf=EM_-S>?CҍJ{?{QՅ xяyωwv"W -hPJ.W[sVT2O\+A]B^DnrށS佀|hg=<[ubY6>?S T &>!s|̟N˾˕R}ߧ*ݷr}OuƢ\RoC̊& \=gǻ G>?wb,>uFA,vg,3$ϬĻw*!OE3Qme9D= ,鼋G3ZϞ%*6+og>Bo|>o=P5B\y)p/}"EE|Zs ^cf>hn@I"9}g0 V~E'(O7!yyd&:>Ap4ɣw#ɍW2Wc7%_y]]XOF$`?),pd/}O^gi *ha9=ψS϶Z}_)=cȋ\YW=r xޓ$&|wb%0FO3ޫݸ;&j #7c9M|=E\?Mk GBgiښysgG,3_oQ>^ Imuöscb|~=:@P{{lZ=fgJQl]^oϦ|W>$; IDATfgAϱ!7b3Z x=D!~G|giXl8P"切!Aӕ7f4w|ի@ &/8O}!"e݋.<}x'ffS^n݀!+=B\#"4>55}hx˼nC^$cQ↑e Fyǯw>¿:t8mp);ǖxUAٖwB3;{@.`߭WA5ң.wK?+n:MލG;+cp ]3;Yr|78E|!m?E;y+i}c{/D|S[E>o߇wKҪ<šnm,*E@7 y>*?"Qy7 !]]J6_io b.`BߍH |.P*2yRjO`:{ضGd.nu.ٽp?>d(Qw-[`#H EР5/#Yg?m9u\ Ï0"Pc Qq{ j% Ϊ꾙Vs~uy^ȫ"=wIt ] 3EH|uT|ʻ*by5u??&q&HM$\dbDfFj{O% :%Al./=<*#ᅣYܡT#3۾^E| dt/zxQQC3P3'x2m$#vZ=υ{ Stc=Cnއ뫙rwO<^Wfw|`fz&USZ( 8Hz0GGFO.V4_xѡxt3*o~uRԺ&cyFT 8.N0Vѩ~T/29,܉v2!jmN@A%3V]i$qC.Vo6v0Mjm KyTٮ>CS!~V^/?ב>QD;/{mVs,%=w/;N<0k*޻X>$E^z'h>=mjmuISL$_#\޽e仿S"a'7V==Qdc:|UOkqV92|?8[wK&Ш O37Xo:f!j;9>͵<$*,'Oz|$OYP\Ug?Q<ۑZ}Ma6bek{Qd4[i{#k|Ux']nZu@=zvzbX j=}z^xA&AAV cV2C"7Ζ㳈Gj=/qz:IXN`G8!Ssf{k|4Pl[/W1_4!$ލ!~}Zf]t)I`nRqsqܨLB޶dz$X3'_jةB]q ٤E9o>*?#y(;cR1ӛ 8Hdt>BqtkWoԤ[Oyq3޲R/UU1%C$8#!Y߄k>BG"~- ]νES>um^XJz]4DɻS_+ ~M-xh/q˕u 5EZֻR~JW_sOu@;'~nK>Fk3Fx܎w}1_KzT ;}!VTWS61-ΔS{`xomIxgdUz'&_ z2ՙaio ,z >Hmft3ƶ-y;"WyA|d_ K.Sz!g|HfSΤ(a[pg~ow$gVN١Lߐagc!op^ygnyXo6O:uE e~ջXs7ʭk+ةu޹$?oXQT PMN- $2W]t&YN~GDWo>?g+We\S|a~ u_}FSNQoCѬjSi^S}8K+rhc87zm;q\ Ï- R[)kU+1݆f$:|_+%0_CtyA`S0_7݃WuޕRmwͻ䳊wYwF5tA@dRUę..ݪ Hz VAbXb}4˞:{'Ӈp. پCʥx/pOh~528.GyOڎ>?I8+\wY(Tو3~Ҽl4h";AZqwb;Do]X{u?wux&` cBtH'+h^lJ&׽[_ãֆQ~ۘvZ򦞸3ֲ1)=XA[>?zׅ` ^)P /~JpWuJl! (Lq{KOcyE'T^#Lou*g~r*H6vlB:1٦=1/~N=c0-ߟdL8q¶c \ ysςdq%94o7w_/H9R>ϥx-hF;V$~Z:zYfpNj9mx|n FyE\Pqyܘ}ݰBvGo]F _UiװJkXWw+wj d{#1φ3 yJ^5t{)JQxX9wOWQ4&Am ţM]ˆ r56yڴCN ,b]t)dtR@yW>??c{!J2WCFc{FZ #GFMrHinq}/vӐP v}o͢P˳Egw0+;56\BY7/,R\Jc^Ys`c/g8fVNݲj#<,:5] ۏ"=ѫD `9]OGsߎhS}ӱh}-inɮ ]-}K=!)ٕ]_я1R@.+)Cq+ډ3\ j7i}~-3Ŏ, χ6VÿX[p.' Owm]/[ӸU;ﳠX@/}u;f쭗vqO+93ЫR>0gRܗW\4 svV /3x4+j};h=]'$Uz\tƭɺ3m d% O>?o *|lG$~%ςEMc$VgRYݦsUҽAN9qH\/x 9| #q/_SRϖc?]˪,X'׃y(Tu|t%Ӂt]ޭC߫?g_teO &,95V>'EVI[l:Lϙkv^b;O] u͟EW$b7V@x捷}2ۂ^Cud^6I&}뼴mv#!ՉމS7_HYoKvEτ:T/\ 9ZW[_d")]̐(">sH'ܽS„x/sUrTGBy XQQAx"$h9;𾗍sxןu9Lt_'3.[2b:b 9䅤>q}]])M@j-qج| uIاЈբa57bb*( ~f?QwU$ڳ_J{7\ܠ(h{Ҹk`x,I޵.kGhՙ@# J1 )I8?u=C׾lD3MG91' ըNShQQsw﷚;aʋH)xLRCp.E\AGH;()AQDCUcz0K;Fp\߅`Le~Ky3ŌLO~F8@.R@ "X;\;;Рˌ 4VF K<"S Nhi77X.<mȮV&rdekiuW依CRɐכ CA{Fm3oջa/n,hQEΫq7.EtGE<6e3x;弊eY+mT/ԱF-C(d uZgNŶ2rEh֖5]nB "U%պ#/5^Zn^7E?^Bۉ"S7JZΰ\. B:{oQPZ.CV}MQ A0BpV8$%o-eޅZ8 b@pϽbSk-U }ϐ`]=n+Z;F - 7g~'TɃP#AcBa,h/ΝûjC½cn-†S_M 42fް_2hgS}rŞ /V\~<~o"Ý OM:q7T;FsݼB=ߤاxJN5*yD]#fT]h1GF`wE_-^7 ϑ;O"cxo@B2{&x1_E98 [4mt yuc 5p Pk/W!~uu-Wdg`ɞ"k{!v*h&4m7G APm{ꙃ"=y$lL8Ul/ @ ުS6&@C1$K- @B[Y-ZNО7PyNlV߷Rv| jvVG(*SzW0z#Nxܘ)e 8llpt(㬻34EY-Wi7spGqAئ.|Y(O3A7M3xȿ!tI~U\b~5zo|;}76]|W2jy{lk z'X/!Jr D &OV9d^+λ[u,㾼`xis^mN6)CW'xGyy\IAߟ#',gN{I!?LzHknn`~1ݷ(S∓h :Z>@'eZj՗ʜs6c<`t_.Pvnzgp.IZTaR'"z a@G=⩺)#Gs cA@ۜSnOv3gއ]*Qqb2W!j;T~y "&rdӒl7@"KZL-Ul=hϧזXf7~stÃ0ɋC>*ٸVmJ*TvEĭpd v)iuO wi!K $"{ CA"F*\Ȼ=p.X |/ܸ3G1* C.%A~s8sn7֠ADfxw)Bj7qi&X|=.ƿk , ԟǺ/GGi%2sL >z:HGP!߫;l{!:~u"")LBj w[ qy8KK-ׯfg~CZ~xf!J#:"hb1)[YU[\%RV$Lq Bv@/^׮9tw^6m8Ҭ98cŀ=``Do9nid/?lwnݟһx{o  x8rAt) ~ uQ鷼qj^kFvܽ5›+97$jܦ<1([cܭfoԽt}W\&;;IڒOZr/^|ۿyqv7{S L6QfS u]{2G1)mOw!>#B]/T0sw`!ꇗ%@B_ǐh7Cʵ;%F=vx8c鍑@aYqv[l+8;YIW՟G|FMBu|GkuBhOkc+`y.$Zw-JmZ©Z3ŘOG*V$by鞥{ұ#(ߪhB>֥Z7.J|8rѳnX qֆ}E4.>2h q}aM:[ͨ+p =1oķ=CeNz̥o|߮.3PmY!PQ+C»YoҦѦޭ7&r5{|^h—0og6MNrxn_ҔOO"75U~P cklYr=]OyDG(ߚIhGK(ZU?.X~RڛYH>5{0U=rڰ:5縀.C8\`⮦^Q_?6)bj%í6yUطQEaPˇ"?K7Lj]_`-qktvTfmkZWjؿU畚?Q߅\BνpаM18VRBֽ5 G]aGi:y ܮK];E2iRzQ>z -A===A>17;+%Ӏ'dOyW?A,WV2 ]D_Wo4~1/ϵ;>Za t 3_|jꝳzKرzfa;mg hY >l0uga՚w603ا^뒚-R ߌWG^x^ {3O͛;i4/Wϣ՛矓pӮ̀{F~pƹ$۶:*`^WS k5l~4C<MNt椾J b(/j}?ȕ-ѽbr;Q-w$Iq\RAE|ޝM<.oZSL~c6ýY\L˛YU'@|^;VM^ ҩgڵlze``Ӌ'qM : *#zD/#!ǾA\TZB5!{*PEv7j 'c1> Z ÌRJ&ܯlѨRݛc's/wfQn,׏>Avb{yCPܼ3eLd(ZY* 7R+RJzۚшdϸT u@QMrްc59' c0I6cC>Zϋ1Pxƣ|DgԳ:v)3!į@`w;t/W?p?pqٟ? gs5~gw|쎫G\w7 D@nff뉾!2 *IVm9Ͻ+yuu+T鬖J>NSMAr>DWgY =55A~"аc&wδ;z48(3uO4/ϩ==V|U9LT ^4 ._/KPӺYUʿ 'l:·zwG9ɇ{EN=e/nꪢ*e?ݠX:S>[//RjXUoԺ??IZqc]8C+yZsvzh?M.pMl2Ⴭ6R6[YGDt]:xKw zy/k6z(~˒υ<ZkЩC?FMW_%{:SnVUU2\Ĥ oJQ,"+Q^9w!4Ku\&*iT&(Mu>EЅ+Bs2k|?s//`MK9Kך-+-=VTsǎc<KE[%TK;U^mt]C9kO_TןsLRg^S+Y+wEe~F1ޱj^鍐Cwi>-aсO+ ^&ޤe %BW|Ġ~ŋqIl¦C3}뱈jרBn+/Wg# |~߿??-PTJ2 xa {S š_+Zԩ?0N8:z7)r-XN Y˳C\4ef7XDzޫcnh-K;%;tmY̸#~^ϝy!<~_1 /jQzɷL1YQnR=;@zZiyo梥ܩL ̢^(eJ#X) ZCӮ0[(#n7!5)P/@eì;iŻ <9geP}=.`7CIIO3"zGUn;*YLH s|EV|͗z4I(L4*) f C<omgO}wz-A~[3W̅9 'ZF/h.5jlU38kBZ6=?̏!ǿ%{-{&*HWj[&R muqyk@|LD=D2eY$;~[^s3;Χ@"C0ѳه($(Ů :/HC:{} w^h0/ VtL"=ݿ#vVƫjjalE ؑ3YGgzW,C$4#=\./{MUOZ׏{rĺ=c+`۷h}YXC7gR39x߯Z@fZ{B0a:GWbcDs{)ICE9 ~|ն8lP̫P4"_} k~qww9شF<k/wWӕMr.X)бWèKu]=BϮ5^y6AxO_{<$(D9h^ AǓy@;c}D}׽@fi^.~%4(_ _쭟9_I/I| daR#M;Du.:PHr2̓#۶cX.o8`:_vC ̇=^ f5T &`..Ώx-׽#>prx-YW-9bg2dv yg<.$kUvV,`5X˳TV#sݐw8<5:$}-4`N+s ه+و3RϷ^+>2ȗeԶVXgbfׇCdH>~s/;~u8/ߦJWe=wssv}-6x3ew"_Ml94n kkVe?hfg"Q s,N1w]*7E5:<Ĺa}vfY^f.L ڵK_o]N0sim2(ܫº\BN"-2mݸwTDota[&Ua\f=xMp=ZP#s!ץ45'XM5FyriͶ[0D ~ 9nG`w4t[ᜂĘR7mw  qKu;=KxsLIxAka lIW KT[\P 8c߶[ԌOHDqTP 56QFRy:ttǛεly,ݯإ+- jovz ׹c•oy[5v=েug_p{NڕuzvI%tCNó7zπ=9b3c #ɔdI otYf6i'0-m^#kL-|Z{c<;HgX]9B|g{{B'zѐߙњ`=:?`y8'߯bUڗ6scf!o'-mjj/e?)g3CBy;krE|V98c+Chq0 #?ە$ =?\7~-? *07iR56QJiF;>!q%ĝ*}e !$]U4}^=_}4J= -:Za]#aFȝ[Mc~0|*Q;8p  IDAT_u͡F]@NF8ӬiIsh?2P\R& YfwuVj|!%d7JKh@ {w%,яiz7鈝L Q&&g~/Vu' o6 jCϳ%ճ_</z7U/}>??Lj+t6y;GQ:%Pv`a.Ѝ]l άc;HQ0~$/WE'!>9zZ[ =Զbýux(pZ>g &Kz%g`*I\l +_P籕]NAr6uxB#|>trFoV:Tj6Db%W<'b&G1@5B;\ס>lvrzZ|ϬK6:;}d֏4(zX&7:' )Njc!T>+KhУnk !1Qu, |YEUԡU=[m]ZR9ȫsvG`=x (ڛ3#<\ps[ty+6oimY98?xO|_(7x +S+%6\9+u'1Sv8<3R rUC~ہ{,nRLvPP.M(` G e^n;t{C~%olm8zw&EJ*p/ ϸ2eॊOXǦzhhA4=}:=\}N0zrT}vioN@. qmsf;!? '8~O}ӮAΕ6QppL! [NqyIӚwc b5co{-{zn?:Qcw{YB{ q%yK kC!~;;$9oR}»K1.[K90-^ \Ӱ#jrȌJ颃U<=UB'w>(1^]vS?an'NNw\!cV)$V+a-W6G0\8ɗ n%eEzѢů _\q?I'|gS_ĺsh> 0~{+FE*PF|H$wЌ+YW^4*Fq?COaG??3"q<=ՃW{ 2wF<QwgW^=^t65*)#L"%IRsH]hOӺLjEyvlu񄹹\O+\,x٢~7T \>Bz, et]K=ۚΔ"~WF_pF wCZoG)YbJLRSήm-0ZkzrDyJԣrw vhnz]H,eٵ*,S.ao9 h}`'=Kxm--{6:G1Ggur+}E'x79> ִV]׀|$2nc=uMی<C3w{K (/X.` 's8&~ @Ey>Bi e39|D{ʽ hw4aJ噽Aqt$o/.-fq}Or',(Jma oRYlZkX:k9;z΍w<=.)#޿\ю~{}>._>239fR>D.0&Es f:.;8|դ/ aX4kܤz5UX;MY|W:zovd [XyDjה_gܵ@Fg}_wn7WeGpx 7'{LZU)aj[;IZ ] kwr+]۬ iEZE믃оzZC/nqPO|ټ5#yF.3ow <[=ywy1+vLPxh;<:o~Ȉ_>\ .]'̫Txy8§1|5Exj%4-U~ׅ;q}] sE+cz5"s;E/ SZ%kWRQ*N4˿Xp-C.Kwfs{s,?}rKTݼUݴ#!<21eXC2).&  7c Q)L^E- qu%bzD OS 26JB:xCe?^\n˗Dlo%Hp,|~Wר/`Lѽ$BQ݂yΣgF>cML'02f=o袒`b~~랂|vxO/oa$s]*VdH^& q9500m&7nd8`l-Dl l#72u I7<2.x4G A0k0 QQewwX 3;7%:yuxR_'G!8W,+q$9K{wДŰ=n핧k}{}X#Uwn8]/ Z:t%h<+3!6$| -=Vxpom%d*ܷnnԼ;݄>l~;/x͵nIT)=S3&6ƶonWMJ]Ǻv^?ݯ|n3Q.J]r9V,^Jo&,վ(j^ ')vYa:xJ^?<6.)A5|yR_'unCXǞYVPN? !qjޤП0B\OI}ކngEϝG6m~wnGY&A9G0H#CO<ڴ%z]} 0#푣4p %S&]J{ϤzBt}zy2yS<'.\jy[ bکOp/>a=4g ]n䤭2E[U*\5O\w 9/4B%{Z]xf.ϧ=w_8J#yp8Ȼ/X~hAKep2C&6sNq^Dњgxu\>G_24[&#!ȴƎ޸ײr0cڝ.o_RT/yAc/T$?@Bzr6P/zƟoL'}s>"Fy6uJ*='$_ ?ˀh6-U(^P)S~HYnn|K ~ wq?62([*u#HtOA v>{ZnRhcQy]6%j]d^˨Uq.xxALδ]4H̏Hhn49l bGqаD.p"Qjdӫ.iJO9_7,OyP׽.$*M߽2:C.WV\R}:Yxf;q$;=b=o*OrzE:{&ْ5/%w1vGf-wS~ͽ';߫Ps\:3k{k.9{Ejk(geZB:PNFRZEIC]O_.;@>dUכGYZQzۖң{.O^}n7W>ig"UiLZI;dv]27S>ORcFَ._:|̫%mS{9~}R-7bNKQF**xRPԧghysX]HE{H]ߧv6[_`ӫuC)d9UѽYtM3X@7 $1!-Bm:֬B;QD8w2E"&M5㖬3ԡG{3">Ӧ7g\'׮»}s=(it7 /&֝e/9P߭_mw]ߧvJIhF)ǖZEM3nrh CnأW3fPg;L<|"Ŀ۳~]L.W.TC'gsu›VJ.m)z^_Ux/wnjKa^;lIb`[(n־5J<LfQÓy8;/ v]<@߀QrllY*!>$ÛB("uMzMjw?P ؉g<..Akv!At60jsm`&xYfN7}}M@UG{JBypQxo48J,`ccLqY{0l@fCcl{,l*οlΠbچm,%dQ`~1=l_׋ 9mhiKQ^#޳:|taWfϦjwЖ%>ʀoyMx lڀB>aj7aO&KJ~tH 5KU娲X#aٕ1}Q}H2 ࢥ<@C+2م+A\+bSrOLO,YkvsIoO/{,>tp Q-$,B090兛&JQqEEcCdo%]5,Z҇߇Xˈc2%4zx&`ѕ8|)p<ǩZTTں ﮡV_vUeqު\0z#z#$ qu2Bί5勡~ze,}GA؊5: <e< KuHcX$ يfb/4ksFygS}'%F<|K#4gy2dYkVvYr[e3)TVmvW&bSes-h"}O1xఠ :n󙚔 UJfI3C?R1yz,PlJ3F)"*dhfepLH]o~@DVfҲPʒ/K;d:r<|`q&-A9Z3\m xFM(zw2mP1 аO=lx߇d 2ژV1 UI&R.ڵ=gضظ¥z]V z@b?O]QU x BO%\INg=c ^ZӋd9ԠBmt*U+a@b4R&MO{KWZ$#7՟D qwnĻgcՔ<у#}R-9;矞3IM]ifF*  IDATOސM]O&{n\)`ѽs7LxJDTThIFaH.\i" 0庥N. _Ihet͟q``s)`-sC%6sP[b.da_7cp>]Ubm Z_b({y4=AkR#WWF{7- [J'w7v:yyEwËp6񆙶V<$㺯<Ґ㙽efL4eT)ߑ!X-P5gEOfT/œK7 22rq)|8l=ELKs%OoO麕2憪q|Ŕn\ڊΏCKUCX`:!θ5ܺщY`G$jRk~SUOzbE~]yUcb;ewb (-*T*SYΞKq/|#Dv<#^A 5x$)t:]vEQϵKrog=@oރ{r>ZGW|w-4l{@%(En\9[r)D_1sxvXV"S5ZBV/0{{_{XIE$oRǰQwD%#vL܏Eecr⸛9v g<=\`U\Xa|k{'9=n>|^:yHX?x@#\i6guKa{w޺fȴnj6 вזsΑdCIRHoU_yrsQwNHZ$wdST29Pu._{0V A >EV|V\|3>Ͽ#3^Hsǀ9y9؏+Ǜ5rfS㬝糙9Eya(x~$fJTx72pOHG 6#uxG ,` RQpڜf0ORxFK8lHuޕ"3z'ouWfD1K)#XQrQ_?{gÛjҸX$URM|/꿳&wKOʇyؙY˦LD:Q#AMuq gZX+kS^f,Sš.|^sΞ`K"sWJ8/TA[FJZΒڍOCܧ,=%gY (JKѽ{-GiEBtW㽷Szy<꿿|ş/bҿ7iyn!BAjXZ@<0`5&a=;,o07:[/R8xX2h9gmuDWL${PPۻD~cn};+[IE)Q6PG}U7[ZGvxv2SR[r0$^g0~sJA[3b@'-fgOwi qVu1GWZ"HMbN]Yh@I9+iьoZcJQqƗLԜ֜f/v(Wz;꿿ڎVs #ۂ]`-5;1PØn6.YJ"l"uXm)mE U;N7Q};꿿u |Nee>z˖EIW.? :<ȓ[)[M~GWd,40yвI-LutIkN chu@fnyE%+we0O?>77F{m%C;`ZD{.Ba}KL(-sDu$p%vntQN]ZN.Gx;KOߺIgU wcˏCA)c<1a}E`TyT6f((e߇bȻE6HOF< N>07&YjN ;64c;頃tv+*U2jy1[Wy:V[3e Q<5Z ko;0>*ЊQR}aӂ5cJIor5'W<߇d[%m:x{ vۑw:_,GYLu<i:M7;ry#('I<ğ#Q}hl;CflD~=Q}(=>:x=> cW޻`> i-Ah@u<173v;Gؖ7c@Ԟ> jugާ %QCwLQ}@v=<x37c:wI68hQ}μ[ǯxI|j8n:}|u8 y~60<ʼ}&jI B=0gLZx/}B]xWJYȇV9N"8]7VU迫eyӼ_]v>\Q~;ld` & yF-Cxu 콢D>wxqgq/|k9_?ᥕ#ܳ6V¿m;oo(ڭ󿷸~0+hxBW߯v=kdƿG}B|(G dzΗGd>N( zvd^nI<}A VH]rSk+~C Ѯf{em>~I嶝[U h(j0F;^JE8lt y' 2u %ol[TaU{q0:-e1ވ꾬^ = n|/[>T@TIA)S.Y4}cNx&*^+>T6^S}dü!;W wm}턢ɑZ>>n ʋ6.U mLP/μCu哆V*ݏ ˸{olr}(Zt1sLnj oA&}NI} _ӷX#OU%}Yzq.}5Mڊ-ƧZ׮C].U@1wem\&U;uҌ!CяZ w!-+F4k]{Yc佼曠wKX8pyS~K?]{?IN˄p6C [4Y&yawc.yf{K&'4z$+ /'4q^`ԪCƀJ jR'VyNt3nlmtCw `zS\yPbj˄wL>Zw|3;Yy:~ǁ}ٻgeƶ{n&=S[6)Ÿ/p MߑNlD4\ƣvv6! ?2v;&J.qO<zϢ]69ާ=.g5F{_*}lp{P/oS3D">jV+_8=ñ@ڋm/.ە3ǻW-˺:'~jOc;U Q?U]B\Y}ȚiE% HQRx8t]{gsiow?Z>ލmv*k]|[e}R@h')G/{r%;iEqgsTߴ-:$޻?ETq/dY"#λ=»KW_{?[=O Iժ$;E;0^ڴaǧku;[(ISgq/6,Dt(يAݥH].dޟemIߗ⽁F j9Cޓ@bۓpowIpw5x_,2+xʝs:G|7:>?p:b$ H);c{w ԳTw[_}op#Ʉºe%Zш*k>~m!#GwI_#[{`"'VRy-Mvr*kE;aMx2m:MlmOj_w~Fwb3nV.hW["kkqݾݷѻ۹Tc,Dxow!(?]UYk{a>¾oپfg~Gd]I/odj x8&WLx i=mvm'y??*|[omX?SX=x#3sLxRG]q{ulxꀿ#~? \k sS~_)aI7qc{Zփp?׼sLi07`ZF1RM=`Ieds+]=8Hp5?Ob{RU9LϚ!"6$n=6c $nWZ]@$UW*8so>`={4UW]y>=/|='}LU cJĖyU[GZSmu|ͻݖ,B6w$lu/Eht;@t'{m\:{+`޿}﫧-߭'e^ wph+oIý;nz9-w~PƉV!MZDROyFaloOv_C/_}{l%k'Mrgޜx50WǜNgm@9V=љsT, Y8Ri/iAR2&mΧP¥d<{=>M6>"yIt $ pОخdn9&{;?u(.U'Ԉ0`ܽ9XVjVzaMadaoX +ZnPR Z_]!,ܔ2TPNE;5|ƑY2:a.=b,{E'1ټ_[қ}w|Yk]FMy0";pMx1ּH-k' T\= /X!7&إ|uy){bN\ _ v&uyN96aϏdͬup-SK韛VFGuTro+ lZ8=djxD,DgOJo>'po%>oցhXCJ*toy?Q,YnRb=b⼧e6뮊?|pS~پOexwC]qj,+B#Tn^7+ll:(wUos󼪺՗CW~4+#O5x)8/[n'ݧ<xqho>  KmMnav2qj|U d~{ <;= =]g^aI>Md,:_X<'_A3}wDBNswU Q "4xt0Xfz89q:Ay5 !xOkWH૯&M9WWy6[sv;o4SR>a[hzߺWuGsZ0W\&xu@/??WW!;}pUu`[|Dy^UI'ԭFyK׋ Zp3_(JjvPXao1cVQڅ֙ȉ2ߘcUpKĈA1}o,4D[w{U/- ~04?ue8d:2Ps_ IDATnDWly(cݛ1~HK;ކsDz0ӀwG1⽻7oo gd:e᷌WoJ(jׯ5^zn#d0:3̝W?;jڂ̀suod5r3*@V ӆVnKAAݹ&ta DŽhTEQԤQ9 l_ ߛm͚uz:Ӵz8J3~1jC5 v:Fy7͞WN3>\wfC]ly6 Kޕm~?6/œs-~JpHfX!Yhg+[&jk}-δK')h= X*f<(tNiş| yk4ĝ__c<i X7^$lK ROX?7TJuV ['p:#< gU.Urmmd#xMr於H}geu> 8|qh\#~U\S/gA խO}H.E<þJ3Ϸݑ,+;=mG𮟎/3:w6psFT9xf]Pnyw~!1+?)N| $Hi28 ` jM 0R\*z 2^'rﰦM+zNSdda_;Ďʊ tҍdIapx;%>jhnE޷(1]l WʞxeWgt|]qNC9rvLB UzBܹ,E>( /cʆwRQҿ̵*u:: !:uノw32edcQ^BWP>wWZܵWFy?xB6ϲv]Qd} 1elɻ$M>V*@CBu gp J"# %,."cJ6 jfLwGisއ^nʘZd@YYHۖy`^(fݝw8mVSy߂2}#KgG!wϼ=LUrS%kf!!r.J=;_N13B"m v|YSB6 8)2] Dն9S6\C9 ,:"{}lG ?-zpMc\&qi %=hTY0"C30gxGdw&~Sς>ww[\AުW>%;l#?ۇHw{Qڨu''-.=7}_.00+2]#i !_h`yR`⹳2-3.4{;"JEWm0ϗz@'UL+uii+{ti532V)3tJٮvgӊ\FMVgP#磻3oJx ṵ]jnmc0[(7ܴmsÑ-n]{"y7~pG"ڹyvmԃ=ȷ_Rݰ7^u 2f˧چ,u?J1.wK"Y->A}yy7Έٲ:Ɉt~fQ$WiBzݿ;xmڲ7d{,#LϾUNI\霚oW_-(ؕ>>+Ժu .hz.l^u4Ci0y#OAgR=,yFEZkC<^8pxֆ‰7u\2jP-@ҁ2T ߎ5ʃvn%qզ9^+6(} i>?w7j?į2wM^WwL%]V쾅'T5#'^{{k&){9-kO߄ ;KWd7yw{'5-2kqωkORXL*{c}wBL=#3wUqMh2a/UG;,bў3;%PnG}:d2VKN, 㴿p[k!W(+~\Zng11ďjq4ǽuw3 Ցu?cW;h(^th'A0ɣ ) U)|N)qi%e_3Ĕl~q7/+וX?SN{ԀJcX6s^ǻjo-erD ;]Q՗U^_,n\to9%__Z/CJ6-ebśC9z ,@Cgvb1٬1# +[ CLr;e*1vk8oF'gNG{0t6P Bdc|w;2icwkvja^۰+7v;= xjQM\Sf^\kl~=3Tn6WJ ,e kpVOcU+"߷4LRdq7vƕm>7;i>s:T}|l`3lB;AxAͬv ϒa6oK`5e_zÚFLyS^yLI+I{|Js 3ww:e5/}&?h ovCxin㷙Y4{M*K2wnho6N5v1_RW Fscf0/Äh_^D6=UGa2ס{9q~}a0yBD1ZZU0'DT9x /-MJMxzOW˲^'}zs'yZ~z&.w7 {+V4[o" :_ :\KZwoi.>DOozw7MnfltoSl_wz8{ɕ+>=+.E_}ahf^ķS$Tw^=Оi3c^5xA,]p;n0fUY.@'JMq|V5i4+gQ&=Xt^;8-N~M=,B >|%[_Įs4`S9 wY˲j.ݭhV?|4~OV}wHY9[(ͻU3S+^OkЀ5r0m;F%@Vͯ3'P ۞".)XOFSYq8Kh#.m$FO[egqkݷT6/jCxygl~2&o?qcy?03q2FQҡq,]uՀtCr>%᠆wdKS7ܑ0HjXC{}zfXts֏~\H$:qoUVqv3<P 7ʰF"f`r웷jꏞ$tV%1yfgfV"z#M w!d $@Zov :goT@W_pwAc!v9j :[wu5~'sBsoY첲 x07cQm7oقL?@w*勬|W]Rec2aϻB_ΟqEy;owu5$Ҋ_8m՘"ɪ|8u?ͩ+! [˶b_-cyh„G!kȃrox>X G4o[}$"0b#K.JkȆFjaI|o+8n(Q>#8_p5dCD,S:z4,z\݅k.apB\)w xb= 0փ$u}' =Gro6=i>/tz{U 7x5Kyk;I&lG77W뭔tYd`ߋ4aѠ'=߮x"ø ||ؾrJkHěMX;B?J7,z{?NK*+n)8N}E^OCT`b5:moI95f&BNo|?$[V= ^4[)w  8 ov7¨~I$QB]c2ngIkjkH@[fĹ" .ծRRFM1kr,|Rrmu]|I z_Z]dd'S+\]w 2,yAiy5G9%o-,[+]Cu8b]Y|Rkr`X8X],]Cu;ODy5TG49I|ϭ}?ߕP)0-4m+h]~w Y>NDZ]wϓ8nױ V|W]CtyI:RUj~W]CiQx|HJk(wF/'kwjNK{3]<_Ɠ_}^S`,ݟ Rԭqy?kwF:~}W]k<3p]iixzd`.:v ]k<5‘EM;7OxKy'SȪ ﹣axf$;4'8`-+Cs-mϋYd;4+Zf_o~sw ;raiׅ?,wsr|wh܋fiM>t] {m|whRV< (wۮ|myߡ!\= 잯pSD/.HCM8G &}f3fS]B?]kzL-^\{t]x;4}p>3]W)L/RsFPjRIyǴM&L:Q{e'eeU!pMW}jU\ίH+C!ϷDi7 prv~:6Z>;|:WL[Ef:wSyVeØuAIDAT+VUC=Ѯߤ &("+çgѺcc$jj;|:~st>o.xwߡ6ղXfܜ_LZxPQ:u;P?nm޼[OC RjIzZ2I[~j`n:WֻћXLaMpO5C;zͩ}=Q.gB|;~ڋRǫ˭gg?YqV/ ؗI8co= wLn}\J-*^by?g5y(arE8q^wwf9?~ځOMg7Ш|;f߅ ߷0>q1QT{vOhs6v}ޕ5S}o_PK>P{>wnzh޻r]d{{בԝϋ6݁u%E}٠?ޒ;j w;@⻽+^gU;zQmgnD΅\U.gxPw^lW`[P+wPo|w&v/m.}׮}=~hF|oYwzckɁУwyqU=68/2wBζ{2(2vAl{T8@8 Nϛ^|~'@]_Ñ;];v1qc/w-px" BƮ-es7 |3N% 5'O&p([c"awb}3;w;G#{w(݈}! ϋ۸7q}o ߷3~|X -z~2t1jz=i[Qvc6!]?>*]fx4r=%~7~QNdZNteF*~*> #)fI'sο22.fmtݙ?o賄^ugkm/shsO tWw..]D~WiޤU)>O ~8+{5Ƽ{~>n3mS,9=BJBi}1'sEL>,˸o kۄOݙe ~'g/bX]L#Iu+b9[8b45DݽQleWrOC[ ]kݦQ.G9܉iivx'ދU)9sG{ƙx+\w>mkh`by;ZS|풎hݷV-94)e. >aMun*S)wܥLvv0FjZ+Qgm=I4_~!s9s) =7{Kmrυ&q5o;Fvs16 orS\AUt1zp_z|xџ=99La#uͽ%N"uQ)7DG?4u 5Gu%[<뼅 EwQO;dO?YXcs-LH~|b˿cخ]MO8ꯥ:#Lx:[2d*BLqk=΃Od_w81f{B؇>7p7lƟ;rYų{uu.gC=.|A'7/yOn2==Wڀ[3RӆqZk-y[_ozTr,rr.Ŷ}['b}Lxz]ݟ,z">FQK[+[rrKǐ|JE.i⻞[̶.{~1߶Ԡusͻt/%իj1_Œh8crrouI5ހ y $:[}]27*u_׮v#.Uթ9v:tTiL"A>+x*a!''ALF>wq,m6Gj鄥INN>R^U6SqԞы5͑errDbWoe3é^JC.QZP6<꧴x|Mn,қrW'g3c-2Ŋ|J۾7>*99U{˿{oGrpe 4k7Kٯ/ۂ@NNókKkr?nU C%{_xepϚ嶛66YΧFD =%%(>Qm[a^wpcgQy8w3Xq#ť}qx]{VHNNn|OW $5oկ֏6*`"''СL=H0=dEp"@ENN~}֋Vog+CM˨Y9^999(<4]ͤ_FFNN~F- q?5)y^7V2}XrrSS޶EYt]{rr;|ԗ]6õZi4ڱ]t|wwMŝ'UrrCg}3/4)xl!999/0^2Rٔ9+~f `?%4WK+xrrw䓦㯣['''nSYTB+lfo㪄ɯA_s}k5.037ͳ1O k*s4?6 778 632 "@IDATx]U $B$EptTXmt` *`cltCBhTJz>wyX λ^us:{c@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ #G7}QgW/:鱁~ʁ]dQDK[_z?gmh}nWNqXWDW胕Z_ҫOXZnSNq)։$:+鵾Wx-(/ pbiᩏ^6e_jq#[S C'?˦+Z +aןXkHx@eSƱX +a#L/)!-VB>zٔ}q?!VJX$L@Mk >믆sc?)? @0W'͕@-]~g/KC.(2m8"A/87?q2ڢtG_\T\W䟥NV`4Gv0"Zdh]\L\ycFnDѲ B>_qPSq7 dleB/zq\k8 @nf.>DWV:䲇dTp8kGI XbMx,?VV|Fzz*8 kD%_CZ;yuD+OkLre+dP/0'hG=ۉ НhuC;X>򃱐: +.*FŦNFO+r6姯! 65=S+;wIؑ?gm/?sΣ:揄o\tuU}]wʮk Y\$R D: 6GH|+6v_Eo4|v ;D;S_6%Dqg\߸_YW9]~CXM tG&]sk^ y v;^qiʡTWi ǧU~l?xZrM㢕=z!|WIGXq'οq/5Z \rAy}FAbFֶ3/7+y <.NDey2.yVT&U[x(߱bϖcNvE6җ޻U9'5g#nFOBHv?Wq_SΫqO\s?:虪8@O` ՋW`G;0?@D[^]~qnC,vlX⺨jx@1/إ'6>(OlK9ZϦ9"/8PΉZ+%oןzA׼iuP=e+^z::AQ f \>L-9Cȑ萱@hD[s'f!;b5ڜM6F!xu@Ћ4vBίHXȅ |fVX9#?qO뿮.w?wGyy롋[_:N׹~ H>n[lQb$)?-`BN@/Cb'бC8#CdžL>q!ʯݸfxrf/I8j?q)G:sI߸yD3Qp4?7Z՟y~;՟܇8ۍ3I:[@VG;[mđ- ; N9NָhVRx4ʯSO:͏b珎1;x3)lWt8_]3:b : Vz/Q/:cG~6GG6|Eˇx"F(?qm0a"/Gqʇ>;RN;B*Xv-@Cxm$bW{S~U]0αw_u6,_:ĪX8:_%X 8F_a_tRxοؗWVɑR~HqKNL+rC£.L:Ge+'N5gwI>c(?PwcC_hO:97?q-Μ?G]5˯.<Q~d9[Cbsdl3ҠUMT @  psC/ZǍ rv&rR~šՎD(?2a/$qDy<*;/N3k*/W ,tmuOW_8'?+(NfxGNOɗS_:&[m9쉗Ϝ4^%H֎ar*IkBF6cSqy~0{7"'}ӝ!}bB%v'Ƀ~G,C<6/εKN<~mva@WyNOr<|Gۯ?a׎Xq3hS΍vHG?|?jsL񱕯 þ,ʥͫqOccny_O3_Fj8׍LQK~s N=?X{֟Sƹ ^S'_:#OC"y~y#?[_;b;q!PsmןGPwyŵA:oӪV$>?!W9@aGԊ~'<cy$C^4ÿJCF 6ĖOLr0a"_0W,U+FXQN$>}xCđ~OC| WNč ƙE?i_`AbpWOoE\ο/d4cLlѳGF˖ x7r'ߝ"LzYay('nSΙC^\"V\&$)=[4gӤ[ZNBhG O?q+n5>|_cIrxB+N'5^Oyh#/1б/8pV((ο??qP؉MkEu l):S~r+?VOO#=VG-6`Cmޒq$dS:Cj5ĦxZl ոA&=O G$>FiEk5ٶmk(x5Ht䴊liG;œO^S>|;ѷ@#bIX+kKVd|.Q~D_<Xq887?q]'R(IiQw|÷Qmli#MhգT{ܳ[nݰ`~ܷ+|SJKm_֬Yc7c@ @ Fo߾6d>|]7:.\;TK@\ )2XAԹB4zheZY+qtUN˄L 1-&'-?>"C/?(xty_w?,7ؓO=iO?p W|ž*榵Qs骮e@5/zռ|NZt9xZ%RL<æ-)p[Ò~J)z0y&KA=ldO1]'pO=ĸ|B Gι/6_jJ5TaH.jȶlC_ f5 w5-З_Cv¯]pl6i]#y\#۲ }5taH.jȶlC_ f5 w5-Зa7ny~Ss͇ ih*>j\gȧb£cƁ\juL%Ma i&^ӤP0`6bHl"ĕ6<:|yn ;q{BT$i-*WQ˧ fr*Re}aHH}3bm++徎FF2h/Ri$o$þ\6[v=Q#)@!sZշԩꫮ?j\`Vq?6dNV (hJN2g0޻U[LVOG )G>IɁ/vl5/$կu#S HV.ݿl|܀~vD6yh\ܼq]a= >EbGl\gGL`SjقM sOhPhLzdž8Tb^ekj]+;w2`+*(?qivTWZwW /!*b蜲aFۿ/?CYYI -~T&E及|9© vRaЇǗ v/2l!tƧwDJޑ i %džM ]4!Vy!c72 dG { \E7 ogo{`cofnK*(ۑ w  dLj6mJ?԰ E/z͙3g{cL*KX[GqFnfn CbCM_gzK)8QK5.:Oyn7McNV>dIC$.OFO4pZh<91w^>E&AˤHɁAlH_\VI=<7T?rpJnBr9K)(ZD:}:G @J@eyҗN~ $JU0{cK^RvUWٲe+g6~f|OX?q|&Yʉ_jS-{^uIpAnW}LK,t o!jdH@oeNXG\2Q?0>LHcR  / Aĭ08pt$fAlKm{H ׍$%Ɓv<'~C79Է ecmqtl+=)DžSҟnNw*/`[UXC <*MZ _ٰ iCAT%[TWӧ2A.9_w/]me_ ׯ'_r-\xAXN:5$!׆kJ;`뭿?Q=lɒ9wq >nV[j1;3{mڼN=4+lȑv3ܞ8"v|/^\q/,eGп~kq j/4FYtTѪFV`φ=51$>$s`OCAaq$A{@"(O`41 VCv:G`he{%qqȱ!x%DNF&S(;K, j?v·W8jcfչV@i+|<w?. 16flD[O>."{𡇒~.CS܉'M06,^M2?{ f<5[[z^IƩ8||X 3+HFo :'rZtwTU1ʰijQf*OTUݼO, V&R~%ESSd# Zv $$ckC'b0BFB[W|Om5S)jT {,6բ(i!Sc OYiFdžXbaHgS?QBjPJ̀!Zʑ؁\(!l1ʏ>$03;|&0EF7feuY@<} ­/Ko\7 4h*7 7PTW=h^[*~, XMex.*eFVqF1r<"D:lk8wsq./·9{ نlwܹ1UbVjY@+V&>6){)61C!6 .z 0oH!$1}Ztj okk@Ƒ _6&{CFuiG~&Yzp N=T[`]w]*S>x/N&5-BM[YMVϷqǣ~ԏo?,9H)"(iXԣȨa]ᇿᴤ:~~Àlbæq Wxʗ<5%M \ >> I*1(Zi!ɋ^ 0eOp Eң| žlɐ2ko ׮%(DLdejcy\=\3o]x@öًwE4W_2ϣ-rpm}l7[_GDPEɋʯٕC$=+C*Ee~_Y@$lj8h4_^C^{eqbAş$80~C<[sY 9ԧC&P?cJnے+CcӂV^cwա{뫯x<Zp?55įZSqb xŘG'$wX5sw㜷5oܸs^ί&)O~[v]U^GחNRC8/K'tԎ񁌵5*_QLrD͊jؼXGF-vjb ^v򧕭`VcN;4Ne 좬H4`MBDGN/&&MlM;^ldOb3QdZt DEHo, }1]%Jjb~x)G*#?_:v,C!t:'CuS`˂)յ/*mW]zG- =YƋVM^q੿ G'Ⓝ 6DvD0 1|@#Ab dڰUbjܒdD-SpA>L Xjl<2ɍ F@%F 08b僆䇌a@61H= 2BMM[_%|C2^s {  {[9e=ל^Gv:՗ԟԴԸԥYyWrlUbOVΦFBÆX:飧?i|$s1o-$ rxH2$i 6LJM1ړM٤Ӽ~v7# @ @ z ^Oպy1Oᮢ?տV^Uk+rd`9vҫVWnW5&NPH3idFL}Zơ>1 &(x6l]w6ɹ@A@ @ @o"@7cTêVU ׯy:=<>kr-?>%8oeO2A"c#LdGi0lb0G@شJl<ȏ^ʏ]P @ @ UJQRRΪ ռ]bb?f | Pn_HU@U@yBd BG!&p)&<>z@<"8@l aI@ @ "ԧԟy ZSRO_b"CG,(!lʉ <A1!"qT/r:^9M` 8GlxZu6(@ @ &VeCpռKU*kÇzGwp!lߪOKݜB5#t hBLBvm5F<l"bI+nig`N@ @ @ @`[!@ Z?U/SQRu-6ԫT-152<:وGK 7qhE蕐`╈>$iBy䣛lLH-᫘}ʖV9@ @ lA$UgSK+;jUTX$+׿OeG iL$KF\>- W kPS"ȯI}i@ @  jX՟ԠsUTR^n^!.zo9OyU1 i D^9Hx1@zB! kS|kN@ @ mObSt\HuxCT_u1rG|WZ|C:]ՕM *I*Ҭ<<1I\9=&$;''zʟ>r[@ @ @`["@I}T/j`հU#_uT,'lTo+%[RUI}ZDH&92&FK"Z6r6/G&?t:b* W@ @ z jP~SjZղ!@N]ˍxlبlll d\o+<`Q}gߊ廒*rKH:6Nrk$%zĄ K,(@ @ MTS`ԣԥ衼EN_H5l^JFFWyuC*(a()і'Ü`}!;tyrM:mBӜ@ @ jϼF>E:jq6ԷlINKE&6+tIIH>A %/OHptl"41Q|dքг=9A)ac@ @ m5)u3CeRW5J=2FZzl"ڰW d+vr9@2]ׄTK JdmIl&ɇ&2X }&M=q!tʏL! @ @ zjS՟ԟyJ2dԫ"j\տd^5GF^lgɞl屔{UTĀ BF_A.=<[S4PZ5yZdy~챁HG+٠@ @ @hTRE:Y)_$WL\A>|9zZ!Aĩ9e`\OhȘ6a#hɁr~f@Je^50v5#[პM1+96P=v`Sng7ʏJ 3AC$\2bAcAF@`criJ\cq6(@ @ u='IT/0ULˍ@'jjGrN\y75M?|\lt s|grld/ l,O|Z|:x@ @ &zz6ѦzV7 Gvi!;yZALs6P.ģقH} g h0Ș+ßAst8qs^G@ @ 6UWUJ]z^b(WE?:ņW~x72lj>r~dT}d<<8}t*6ug ?(lCCxO+(@ @ ؖP-ןR6ѱٖoOof,"G_NE !h)p~cnrQ>nK7ʧj'F3qN ^rgӸ=k4ݾS_9^) {(~XyxF(z4{;٪|j{^(otA-,k/4i&}E|C;;@#ZV@O:ZU6԰wQ"ոzz@7oxToU4 Z9tk'n 0R #cVc8d6bO67{9m.E MScJ>Žtt]gQ/shCC'y no~=r$\m?}}l]vi똽zjSv; ;4ΉxFԟzڔZWDOW~g%>Uba~l8"ab*,sѷ^N@IDAT>c $AIqs{&T 0VbIMI㻨FNo>ko٢{w/ŨcPzΌ}|E[6>(vm{]y#G5k;}SD[|w@`DYILJK=JLK Q֕}ɨsA 鑱Aؑ2տy 1"_m\N ΀p|I!  |ׄ!q m>hxD>>v]mȐ~ƧG]|z=~UCF!חox-]t`%I}3_=F`]y6궍#<;ëmȁF ן;͎=qu_V,_m>o}=ؐ[?>!4y}Kءf7߰~`d;~{뻦3غuOؾ;lzvc=>ɿ޲͘X>#:ѮbuX;]V{YS&>XuqO>v_s_}44_99>0{X[~W}ګML}v{){'-t5ʏ|_q'۬1c%Kwewy{aل!Cm{ ^۔QZq/>΃}S ;OrݳvGo쿿nKvὋwϳ% 1Q&;5J{oGez-v#3n:yi{Na[oesH+|9%񙙳7dߚ@ EPӪ^*pխԦi)Qrc+ EU_CتU?vWL˟M\V%)i J(^pf$'[[h0 y![#fN8GEN+[iKlߩ[]/O֓sB5SRLei{It퟊qfk* 1/β=& .}֮ݘ?Pq>Ycwgmj[!;q67>PM!x{UWrՓmOݔb w}~6oX-}2:t5n|o? 7?]ƾjo%cGؿuw!v_5Z7 # i#FN9>}6 ǟ,yǡ3MV/yM\q=غ,킚G{);~if{(X~qvGh?wa%zNọ|~?Xn&O|ӟbMt7ml ΟB~7F{;o߼ɾ, ~~|/D}v?L=yˊ$?;+guk6lhGco[;obY>9s=cmҥ餻5SN\xU Kb^:ԮUh =Vzd+_ 򫕽D\l}FAy_$J 6 (J$[!k)6RdC~dGt%F?O|/q&`v 7Ǎ3nƌžy}g [n*4~}v >.!6o{L{Ϗٯ~@=(#FZWٮA%f~??}s5N>mBM&Mf}y>N}ﳯV#!4O5YӄLjXeg\vLmoP4ˏ/%+퇾Gf?'9˖'_ ٴ^b~ˬ]NofO7xL>_76/}pFAAnXakboo?_1i]>iIN;+>~w/Tny Í(_F]O ^}o8^NM#똛ĭ| T3&Sbn _RiO_lӪO,l#?-DKЊISNect$,21Q >9cNBM2lI[?:@Rnu{{Q^_r>bCZi;ZAkiȒ4o[7!kLJ4ο{{⸴IN;z]l?Qx}ӊqs*OYvRQo{=.k_&f&oIiIo^L?AxºqQ9i*?-7d :p_}lɟ6?Ot{a| (ٖoZ'ν&4ttP(Tdp?7T3/K^7q}Ij!v0~S=j_I~(/v/oQΌo?NgI/7 = c~ z#~>@ 6QrVK2,B'Y6ls1eCbdԿKKl]募n2cLj cZi \{Ě,;D'G7k~34 9X.{?-^=uk7kD [Öz"}{%i,Vj<߬˦_ŗ]k)t`SsW3:̩I7M Adž\7k2!m/2F\N?k;=WTo3v7ob9bU5>?if_#%gYo -7-^;%mVn)QXn w%b'??#~m,k=|kEh_~w]N+OOZ^=V<1V]kpI_fs[^sbo+'G/д;&O߇`Koyi[埶C|iflC7*]]3~I hW?m7FF?ڍZ쁧Z<Щݙd{Օ {)~u ;;̯C|[kF)m=W@ =ӼWBA@GƅMOA xŗ>DKܟ[`(]z͝S~4Sv>VĿSNsJi؝9yR;_Ju9o>[f6~UE|; D_!j6V'O{qc;(w?ix6/=8l-o?&PSEjP U}Zjl_8>,6GlT"}uU=!ҊWH { tב'Vż&&;Z%U|ȈqבQ~bOqDC/qwͶzF{ʮo5L?)i7^qE5cg:'mZN41Zbſ]hEFY 3'uj]OjWsdUCӧŎ8sֿC&_ʏj%S^Zt[ͥ XTv=5 uLzs(QᏟj*`Sc˫G{@ @ 2Wxmߨ׎yʀ W2]T}\:j]Q C/z/53qԖV t&ʅ 'dMҤ Pj=ydA@ @ @o"@?)U۪NvjjvZvoSOk(|"&׈Aȧ BA.B!2l]LR~b*)b@ @ @^S֕EVum^^]V<ָSLiD4( ${x8y>xgOa F 6xJLpW$uL?ZG9+_w{4b0G/czº퍟~Sl!~w ÇǶSݥ:&MOK/M;}SP@ @ jռNoء.$WʪĨUGqO?GzHN_J^ߐ'y4b5m{k^cVvnC=O;}SP@ @ ԿԾݭ[ߚK][QWANDTS(ylrg#>@/<9N/]vבCآ;k.zfWۼu-=o֭|R;wXIդ-b [hy6~eSڏ.w}d :ӫM]_ꪫO1~c_/_:%|+_9sܹs?͘1ng>;'lnjSr!vW{v 7ĉSOMq3O^낶&~5h0@ @ G@5jX1#'4e0@?Di&{R#<>Oٞ{i/;evaM7d}׾f'p}[߲kVyC x_Gmxw;ُ1–,YbL:n;dϸqޭ_&@ @ jM "j\VԤu-9zSyϗ[նj]H1r92_տuQS#+?xsZ1:RNA 8l <}x /~[r6۹F =~55E77s es?٤=[7 9r͚5+e}svZ{[lCaÆٳeVmyz `ۿI[.MǦQFOZDrկ5kH.o~}4W24`7y䭊_ML @ >eN^'[տP~àZ[亱{6dlʯ<\cƕdcH>!4xCȱ!c( 4lġaCF۔|}~vˮ+vϳا٩o;3k~ifcg>e _S'|n8>ǁOy͈Oӷl8\'x*[` <$wuW/`__=y}H/1&|>яW_m|7z_jgƎ[w&A:4!C؅^Խ_y @ @ y)SվyN/jUխ}JR-L+[" ^b>;tG?w ~.҈?ŋw_+ғl{#~! @ @߼䩂jTKOʦG}T#Tߒ"6vl%6E|!^]T>0}݉41 y4uU^^Cu9jW^@w^^uy0ㅯw@4tW9nb'O??5g}v3vDͿ3<-˿}wKgq[N7N?z5;aӮ/zw3(0G^; LONwu9vs^WA+@ @ Z @MLֿ=͟yJ9QX뎅c.C7 ^9$˓{ hPQ=6N7!Ѹ<5@ƯZC {;aRn mM:6f/5b/j& ï};ߩZc~暪nz[zu3u~UƧ|ʯ|_ 40}IΖ|ӯqUW}V\Y-QO)ӯ =#\[ʘ'y,77LNKhQ$m:~@ g)N5&ڞ-5Law&p[OyNKT RԄec g0occ,N,ȋƜa/-Di@^JH!T _X\B~D.Mul [uS/;lܸ_nCKI.;7!"q8| M|ƶo͚bLD "D"1Om7#I>bȏ\S}j#!/OƂbO{Z+ H(z$|HZNTI-Ol-D=u D@D "D"e+y{-zC1x<AG@96tQ4t6!aLN1zO4dw*S.W<9e (@D "D"eA8.+>Qʍ? ?Ֆ^é5'9 PTǦ# ၆Dn%\j6de+#@D "D"e57UO\5ni}zgGA ::@#)-8UrmcEҘzќ]o y՗=@D "D"@n --%7pu_[U$O܇J]$eaz;yGV'ۺU+ e55ulS}ۣ9nئ5߿ֵs\QD"F@#_|ގ3.7/Ht3>4ME/Z ~slĐC\ȩbTߩʠ{[V5׏%˾hjpŚ5jZ,X7mܤEeXǑ>?̇ߪAѽI|;2-rg޹_>~7/j}3L/#@D`ԙ'\;"^+>^`cWN`zƿщ{3ǞBఠ:=AiQ (H=sZr2'ݩS}9X$Mwl_XiϽ>֮h;K&W}mI*Vjy'cL{ڱsbsw-||v }0b6Wk?#pZ֠NWYozխɮcdy9vN흏þ/&//hܰƶx)?a<4l^Nv |%}ֹMMk[56pxbo/G؁/ʋҮoOvwֳrs_b7խ].;ճլ^}slVvc|_nwߗno}>J_ε=_n1Gؤ%KwaVVw&6-cf\:t_dfLH_sB* %9Z|=bCAě*6]l&+Tmqڵ-9>}-cD"@!B2Ot<-2pUqbz8-҇9:k q4r=L;wK ծY4kָ y[{yp$ o5z}uyj82JKٚǧY}EEv'|_`_L.L"+T(Vџl; O;}0v=,gZvZ\~Mlm§ַ{ZgaK]+;05Ɇ=5{U.Cܾn~\S{捹v׿a򰻯pzJe]..+J?IZ<~=[ۮmFn675޻#}llYvs}vr$ͭ|JI [Kݶh9$(`;ϽdkU^w_b.:6`wgW,"AqD"YWu{_և_'ǹ'*OԙX aɌE'i=cS8~hnl2!lԘ>=9emݰp8kOk{Xy6}RRU#xJ|wwm n:_.S.mYZJ_5ԫjWJEz6/SmǢكOmoTӸ'`+_ċ$aS{ǻfF;VJy[zKk)dW\۹Z%{=&/COM`J;Yٿ_m7߻&MjF^zm枙뻳Dl|jתdݙ#I7ӗC ~Mm'Y%;}~lhZ]~{?1|Yg&᩟~δ~a{gC^ڵ֩1Vv,nuU2zΏk֫k36MW}ٿOTTѾ_.AD "Oz6 "vz$s+7bWND|ГC:3;U:6}p t,9`,". Ȍ#^ZSɇARU0 XYˍzd }۟ki T'kPgOG!skVlmѴSJVɮh/䊟] p!Iш@D "E7 @CKD1GB=EWbG.Im*]K3Z`'?wCs+z[sv\_gvk+9׮~%^Wb:ʨ6wD/oo}_Ulz]r_ W7C_n]^L UaQ]JY7}@.ZIe]܅)dWZKί5_CQϮVv۟ڷfڠ{'elCf۬ycM[,ty׸E~-O&'s*Q=D pʹKi,o?L߽kT}DkeDKˀv~`kH9>x$,Y_+_4F"@Y'M]D\Y|&&qglæ䓏x8k8̉?zy4-"@WÇEHŠg82zzū=~44>:P7L\Hvl3rrCwP͞<渂]tFk{~\1sN?Ĺq&vvf==iK$WB$$5ݯ?[&ت5ܽƁQ!f[7w7X؁](w)S(gmjs[||F6͹֎ SȾkҨ={~n9Y+mђsYK&O]qޯcsD)q6Þ6 :Nc&qb"?yڵo⠓G$,?˒XUᅧֱuk='i+e9㾴Sd#m…fƽ`m/_,[n?=Ruq֤s$wΦY~ 78{Wֺw/VwT殩HV{ MmeS}&j:;`-[TIF8D"?u_ 9,:3bC{9 QN'|K%' ?qk\ZskO~b83(陫8ss8χC_lZzr #0ocY-N˙6_}g<ߟpﵝaƜvLڻiB;o_]~][>mv~Ŷ{JdÆe}6iFwBT<Ɉ @.|2QK,]tGɸ.`967{w6g#ʻҐt/\-~v BoVZko׀v~);b-;/KZ72uw7?L[8"@D@@ 1 gN"iJ+NzreblKr]c1X}|4Zz2O &b9W$>&?Z s8wN 1b5}٧٥{NټWEo"ID*f3 s/ުEmpxGsDg}_MM.< v>9W5]uۗ3Fa'2y_lXҟowr  YE*J胛ڰ:O{׾hִ#-xsY}IWf [p-Nk="EGdosMx-%o+*Vl+/9SlS<Z͚zJ+tsǘUQV.[4d<"Dr#895ק&GqC4,hw/4ノ1VOkNOzmk.s2񡎱X.Q-؉AG~z6AT?=$_L7 3%_ E=7m赋徺Cv1~\Q"Oj T][@gf^\Ү_$Hym4-$S{eYޝPg.W }x-ưᒦ.Cحc" OV!QCcG_zj'w&o':D9ĵņ" 8iJ$bL}G"φ@5O.rC|_zMvC׸qsǢ%klKSZ6]5нkg/K( WFsOKS4;Jsl%к$o3o?oI#wR.BܣSD"&c'\2!g1s81c#-3y>\]{(Dk w&n腜k6cE nr&gunᏯD1ZXs!  8XD~%O@D "D"D@*N>+=ŗ_ǿ32ɆuHz-pN6AǂB~""ƪpz 53"D"@D "PdϐoK/q[[-ޭ>AGIΌa i׮;c4|$IJ+6!DD^H=cҘS?Dv67+s648!%>̷tnW.;{O|-׶+~*Yף/rOK2:ۛ/WKD"@D "x.{ĝkՋ2׏@\|=œ&>K/cNI룧!aPf|DaSb&h^z-jȯbS]Ҡ^U/l;Sۚ֫[$䯾Yۑ=n&eӜqe~@D "D~W|;ֺ3 ?JHLc%q`NDDWnოgdW|COh=L^TIXPg?{a7\κu* _~e:ڞ 㒣J]F/hc;ܦy}[KߴQMW9zaTQ_ i`߼q=p~~3o۲}{)\@D "D"?2- -0:9!qk1"󀂈+|P;6ag QuԔ>>啯8SvᲣ]ً#K#[7 }I.+3}W>=L;wK_x{sU:Kdڷ}-`"{^ߵ.Q+;ycv||ӓMiϸ:PjN3гOTs૆F>|B1vlh?Fv%mNYeG.ؒۀc_?j}3}Qxٯ $UxDcz-dmjBwF፭Ov {bcCryo\|˯b7;O/_WNQ~}&}/63u*y jתd )2ж޽]?m] ukA(Onv{Kt(c\h-]g MqD"@Dǀ-"%1& ӰcȟǟV>7cOiEd`@9ctbcC!lȃ0!iZ_bU1S#746 ȰC7cwjh͛T*UvGݙ!4k/jc V _/5*u$ؼ!4uUhZO.oᦍx;7RBiPjBџ/NBdwh#۽Ymrr+oWXYM͘J@D "D"?Y_!Oc1[ol&zbG؈\dO1_cl3'1i#'86 ңCtЌū=zEaP;p]R}6 5w½=g?? 18W7f۬ycM[k֨hChooz/\eq(żh3jUq?ϥ>Ȃ_vF?Lto/Z\b.BQ>bjg/ZɋK9|16KٻΑ:@D "D~LҫA³pa8.MD8S¿҈mѫ=B~D 76=B/|OǦJZ1Eu@tɁs-㇏Dz FuU.3W^ɭEkv5%}A;mnoܴ%1ˇU?~$\Zq&vvfhkKr>ԮhO6JMm5rjv1%,-9ܙe+lWKmuC{ ó9cȑӪVɟ)8]zEy 6E(5w^}8^~@D "?)cEYe] Uw$/:/q4^ش.3mMHc caGGqd?sDzMhQNtC<'Ϭ\ 4>{UI·e\o=L;GG˼+ݽ S`7;]4cjOwu7fƍ)"SMlgO֬`cXl3/I9?'&/? M\O߷u]юh.h]d]x['3fo厶@D "D"?⟐8x>~7f3!z+/6#&ċCSa1&M`"J88CxEЫb^ 2'MaƕܘL16q }٧e/<ɨB%brVf[r7"$[?\F} Y\9rq#YgXnSr(@D "D~8icruoe07 G'\rzCnlKÏVD ݡQB11GX:/G R0FZ8:>Syr^Xq&l?Z_9K)%ɿ=1(=̌<ϕjlߒQiV^T@D "Dv(?YS~J .\WcOsm3FrcGU[zC֜++Ҧjh)H=M3Ȧ#!kLlҫزէ>;u@D "D"@#W?MS8n %g.U}zgGq?A2D@Bґn Ag ^EC9=<_}/[}cD"@D "( p_ [ølo[U$~>dT$0') `W0paŠǗ9>k֫>0~D"@D "D|S\v[_%V_|>-{&NC 0/Ў9G"c00VnO.)i:YߙD"@D "D\S<o#a}SM|K!rϜ @py,`XD+vZ#/|mI}D"@D "Dq7p|$2 sX$|Tf@mQiqY_oM}l;>}mmmvyPȞ30"@D "t7Oý2BC+{8'$"EnhVn(hSNnѩɳMN?I@D "lK!eùE] NKaN_:h\zG/aNetF(YxHkP&qS/ Ք[ Gn b6Dy ?Gf ҜK sŅ]v6lؐ|{f_Cq6{vl-apėgyFa{9g͚e}8|'r_v /fΜIW`qgn w[b0;~.}^ئ6ΉnS 8\> ;}CM+nҳ_{{i5qD "D" 8)"I2֜_˺pbD vtC>CFOMИ1W-tq#i–+ܧMO!$iZxSA#ܪC.bpjna6:(r'ue+Z t~nf/K.vuYMZj;$~=k_l /sֲUK.I&% o'=zUyi瞵E% 5v.3N?#t &Ga}R){lvg $3ׯg%8BRV-;v?nnɻ"g IiɟU?ZTٳVc};tkml"yk{ơ.U'kD"@D`# IϏOx3tMҹa‹_-ra aCOœW>4'?~"=I*]^Sađy#ಬOm"v]_ӳgO;{mn&h ѭk7;>K}쪫”H \r뮻dhi}lf#=kS~~N:-J.+lȐ!~c |+}J߰ .>h{饗[HJ_(kbgffZ|hzխbr6z<;g9(W/`BRXY/)!r1WNrhs؉ǟGgƺi@O~bI>+zro3aHݺu_~~e wFA[۬Y;'Y ےkFt@D "D9[$_~G̑g}36aS~G^/9i[KҚ_#} ?qB@,@˜+:Ssb'V~0w)dYƟ]vAg }:(tMوl޽{w[ KxK=Gy'lx?p_"˱8&f.6O=:k-f[S$k9_]Nlp8kl+8]FgMԭd=m䟐DRk}D"@DA)Gy/ce{qs] +.L]BCM:Oe%s, )|# D/:0,`(s)?qC[Ǥa+sYv]Χ Y9rqm=pm;R/Co7n] 3f̰5k׸n4z(7 Bv{ʍI?M4l#Bظqb8dn`dϷ+҆ f^p%8@тT8="_-5c8-8^y5W.MR^)O:vl֬AsI!{P.XCU^ʶ^~b6켁y-N߿H?>ȷO?zڵkgyƪV;/EO~xİa;l%}R$*U؝wUOK*dϷn _~\r ~٤=enio4"?e uɘ56!q9=ghU]-ɕ]pήrk\ZCvvs=mwtkm\k]];еu0׸ډtd7y[nI dxjԩ|0վ}{_K.)GSƏK͟??;$FBv‹/no>czKjժq827o^ʽ0Hy[x#rJm?]/sRǝ9H͙3'$~;wN9 4H#=\_q`ꫯ/[zns5lЯ 9Z?>{uOW{-wL {ws=SmϩG:w+n=MKy,q^FLw ~w`~6qUϵ_vkG۵^\κk]\ZmZSÍ65xrjWWqkl6 w鲏]uUP+WvuW}bhӺlRȞ-&W\aC >,1q!Ovuz˲w*Gխm۶R۟'gJ*\մiSfnk ϸN.-ZO?mwyW1BvǼpgY..?jfme;שSUXFg'z8̳f-S;D"&pRZ&Wۊnm}SVP l8XzI@/ SyϜ8D"nt]z&|O4L&;p]z9|ZNm e]׭[cCijժeݺu3ơpM|>|4hY:,!XͫرcmrO<̙k(dϜ|ɶNE6+V453\X=_W9s_޸D7n.qvEycFP C-J#lݱծ]-\e)kߩTw ,o]3{mtk}D"Oŗso'6Hz(8Ci}X""E/Qq˦ Gҫ#N ŪNCPT?`1c{[tRBv.}4+35qy $YeMzjs7{d?SFd|ݻKv[G}rĚ'I {x#6D~w /?ʷ|9^x6i$s7ʳ$ɕ#{nF{mm#FcϷ~ o~{. _]N,k;kl+8]FgMԭd=mdJ>"D"?OqR _LAB/ _E0-?snEW5+Qtk.?O“P bM$AG!tZ4Z,: u !srC9Nuʥ .#Yv'}6rH-G xȐ;R6n8)7c [v2JƍޝPLU]\Íg K{!Hlܸ| _u]giJv5͊6 I<٠=#ʯぜH!wrYrRPss՟" Xcp`}wv?&M vݭ]م#T}|/[pqD"*U{Oi[|Qj,+?Ìa#Sm}6a dc!щka(3U̞PE!6jє=.TO \IlvW^iO<'Y&0 ‹Ϯ/~goyg5P&OY clp"S ϗ?3߶j[LH]"񞋥K5l6>kҨD"\~8&˜3c3Ü9c8-q]f ;6D>)B) I 11&"n㋟=s1$C~bKˌ`6 ڼle\(ϒ%K4,s9s=uc!{dpk%-[UҮ_/T99,^\|6>@D "Dn _?FWǗqf]ls$$`#6UWE}ƈt#0FO27 xz9>":Hz|)$` `cNU.ȫ|nJN|U %{F%!E|?xo@e0)d\0"D"@D ;^x("n ,_2FGȼr)Fqy1zr!҉Sk"ҮyN &@1NIE_~W.bK3Wc?9ְrZ:XÙ~|b\Eނ|RȞ/6"@D "D<'d]U^^=Y8<(/1㫜 `ǯ *\A0Q `\"/sBy1GtpU_6%D"@D "(ki!;oǿ;"{"MFX$= PAzv/iB1V>-3COOےGD"@D "%ppiZ&EHLJMXHhieYߥD"@D "(svT ǿ!o^D5'H CⱇtX!̹.jɩ\n1&7>W.E /ӧO'F+[Bl1QD"@D'@.+*>C_և_'Rvud,O:7 '_/o^2c[;oԨ]z饖kہs1ƛ<̤|ǎꫯN3<9ԩ[2of%|/c=mʔK^|Et__lڴikk &wB[_$ o׿UDkRv%;FVl̨}dVJy;l m ʹ'My{i%"D"'nby3JbG[:pWo/_|!+tgwJ?q:(z h#9ט#HQ=q*繒y#ZcrpY'vf͚: 첋կ_?T{챎_~ E6;o`|`;餓l/7{l>O?=zX-lڵF,jժB/H[$OIıIx[ xrI&䡇rdy]l|N?tB|VgҺuCL9{ـ[/ϲ[: ?W-Wfٗ##6>I@D ""ۃR[|^;_T"x!1}dU]ήUsk5\Z=ȵ]]kZSךܵrk{ǵ\뾩t}/׎Ԏs}_*Ά̛j߾ӥK#qǥSNjԨ*dg/BoN3{TV#y[S<ݑ)wV//2g,uܙ{stʝ=H:wr/ /8W}0}WS[znsĹ3x㍉=ߚ:~w";-_-wL {w?Ξkws6ˣK7~P&϶ި+DL#;;~6q5otv.0qkoZ'pZ~k<_vs  'nZM gVjx6kpo9|19xҖM81-<@! 6b&_rC 7c윉PQ鷦KmNСCgϞ2#*Əo}on4~q/d'G/|K}쪫”H \r뮻_C0FmeBl1_߯ 2d}g SsKڶm/e?O)d]RM3v_kxƥPB_vm - gG¼c[`[(uv56{ղޝԫn+ѣg;Yƨ:8"D"ύ[oOՇkcg%݅if&"@_0VRG4#Iix6i=!;bY]96|S}r6]vO\n]׏yVZ֭[7c םQAk쬳UVyرc=iH'hs̵_iELN>dif1;Z8dsbT _m̙~zK7n.qvEycF>B78/[̾kmwq֤iTcޛo\]^ܷի7بg5a!-9͚sUPΰ-YJD"O&Ϊ[&ß\؈͌>'7:$/wbxu|oua~s0jJF8P- _ʣk!,}]\陓0.3o2eJxĉVZb '[1LJ&OlU*WHG+B#=?<?J*167s߯{B"Y&7? >`swY~elMCwޜkqw͠n_ ^ <ުU/o6lulCi}D"O!άϜ[ܩ"Bო!zŮQq-  =萭Ɵ&,fOƹ$18t`(X@i#M??uryr_$J+QNrBG谫qUƌ!K[oҥK ٹ$l-[5qy $YeMzjs7{d<${E4sĚH܊ ۡp8#ӏ~%(xyQۤILngu_G\8{n6bBvkwu]{6a(7sC+Nj;kl+8]FgMԭd=mdL?:G"@D "(SUS?cD6⬲C^x&ГX #0֍.gU(0-JsHtrAi܅5 <'G>g{6t i\ktkm\.ZWpP`G ~ VO=9sV=NSܯ9zҏTRꩧz.OJ|vOQ`ZhĒ݌1s*쩈qHn3PDO'Q7OrEjğ8H}7~CC ' {rsaŇ>]ȏ8rJNX4)5ڕW^iO@D " #{WY"nCqY cO8`ScF+P-L]d"#c@s@6+/:rR aN |9y~{Fk?{rI!{D"@D "(@6/y葐ӳ!@b/.Ňԇ_#F?塧8n^d D*1ha7M|k7X-:E!MҋebS}┟M6;ÇR[Kn.g'b-"D"@D A) ӊe{"iĊ2V䠾:0&:SP$-Œ)F"It^Gb94X,m}"JD "D"@D` #_|[ HJ""t%`,Ž/>INAU,FD"@D "9;*怳o9k8S~!"@O2D=6IǘMYz-=v-1"竏oDD"@D "5ۃK{8Czy@ADTC 16DqQSN4Iy<, {@IDAT"GyĿTrLsU,_lǎ9c$^gЋl䣑/GoM}kR;1\|WN:~z*=3|K+V_m|?.2R~{3<ӗy;o&f۷OO[#W|5O8{%"D"5p?kFG+",DJLN$?%`CZ?yß87LriL~C,bUOz|>wRBbwdSlƍ+fn֬ӗDq饗%\Vxso v@xΧs>ۿ>G?OGnw';T1|_{KyD ԬhQIS's1_CRCZ#15?'c≥1Vӛr~1믓eCԋYCM7>iI3<>1cT}Goˌ/OO}W}I}>xX∥ο}ׄ?c?vٟw??{ wz?ƥĿ/rM׿~w߻_ Vmvw;q¿<~뻾71\뻾{ѻگ?~/ww?p'}oo૾6<+v9}}~~aگ;;}G|IJƿ*^Tߜ@"8?_C}~欳{C|6_ĊsE??99@]8e/o >_&̋OnOOZ #Gtկ/g.kwozy{hWN|w~јsj{{}G~,_7:g;;/gc c<>|{ܽ{woVotl_˾c$k֧9~}ݷ|˷o'}'Q?i? $/o>>>S?[xwz?߽S^?wsNy{|y-//Zk{MMqx.\r+&@"p#Пs~zNU>_[݋|m\yտпa֢'79^x[}(IXgLAz<o6ڛ?_=z~N{ioFϏ%ih8_Nh68>teFhh~~<3ݞ??%}2~S'wc۾.Cbm|=¿G}Ԓs|+~ϖ5n?.s AaKgC1>R>ֳ A _}rɟ%S>S0C/'“YOb5bdYX}kɻ˻,[[{9w,o2dax2.O8}~^Sڳ,迁迁S?ߎE ?ww~hwzo?Fo3[F?ihl{47M-N>{Kq=u|c< gM &"15;{J3Z;g5kn} ?+xzvo7yyKSamグ|ү꯮!˿"k_wj/ʯ d9vn}~7D77;|;F|GG/s&c\\r?__pwwR:,>?nxK_Z@"(UnA^gXL\ю{ VϘGa1)ڶ>q֟/ i[~ixD-w#6[ߩwh|%cO g7_Y1O"Df ܪ=@4"fSeJ1+C8 el=jpA-5C|4_D~~ݏȏ,ߕEo՛;|_ϥ~~W|W|W,9_O.ė|ɗ,5??q#A"D Uџ/_ѧ1zʽHƘo9yK ؛D߳?l'59X_m.4'0uApXwhߝz[(0~h|Sx1Fh2ڻ); 74!>ߝG>eiqw_y2(du|||}skNs/>{/W|~\<|W~+r,= %%s?"+rc=߼g;>Ň_7Z2Yg;|~S?SO>>__'K w࿛3O^7re׼KVOi_ky^Yꎯ;2{ϲG9_;8@ 7pwZ6Ы( +t-}1F; |7<__go>hn~G]hwpWc}ĭ?.Q1N0c3vk\, 17=cYois>˺k'f6b0əcCnU/+ acNCƘ@gOïeao.YXc k_iV{SkcW٩SuT c?vs@"@䲠fUҫOis1\659kelׇk1k8_{s7 > k =6߆(CXy_R,_*E @"Dj[ӿS-mw|SzsX1hslpc1Ła`WO^΅ON/+7uXO9;@"D ! YVeSתgWݏXcl9sHFY_m{Q #sA>ka0| izhs2'`1\3&񋘧[@"D f1?OV=ZUMLe9p[G#1R1\K=F1gX" P,ƜucrCO yKY"D @v'pL[_U?[}^!m/ ,1D>IK f, gc&dk|؞E @"D*_. /SRWH|(zK0."|x^:/c1س}>#D @"?cw1/R^IfS#`14壟}[Z/{1C#@"D _L{JsfΆ"CZ} $ @6ɍ$)ϗXr*ce\9_Zl"D @"p5Ч7:u:| 71'ѳB1&k7.>1?g 1_Czl}re@"D ؛ +gn tl6<{[/cƲnCY~Cϭ?BD @"\!uֿhS9Zzj7f7q|UϞCq,.|xa`}"D @"7!K4,&oҿo4?W9+OOgrٌ) وgLAc^U"̜8k';\~W@"D ؏V?gs!_Mm,{&?z{EX#?:K>s `Cw̭1뿊aϫC:"D @"75/sSZWMKs&L}}?$MQ|9cֈ1v>r=^֙s_/'OD @"kP?={Y|>#D @"?׸K/Zͭ_tuf1[ 0kyċ>X߱.?Re@"D  [Կo7gf}.@!Wܳq|:(Μ6>~`Kꛫ>@"D {PaoE^2^HJS w.L?y1^ :ƨ^|l"@"D U̚wSe_uWH&:O?>*o\ýTrpsw#MD @" ܪUK| IͭFgێuePȻMx3kXZsqp#'f>)T`cL}uχ6-ʸk^D @"DЧhX( E~4[0ce5fֿc͞5ڜlvP=ЬO:fx z0l X|5cFyXӳfs>d^C,@"D "pH^S>V1ν59›Xt$1sD< ~h< k#]D @" ܪ=3ў1gCyOQ;Ϸbs yֵ>{D @"MMJO*Фҿ8۬dxc\ LBǜ:ckƛ>Ngm"D @"pҿ"{UHL yh0n ׋15xkֹؚE @"D`w_-KVfQ:Oc1g,=>c<0s'ַY|[D @"NzW|LC{4/d1c-g Ϝ=x>[#ED @" ի{_`geXE?cbb/ >ǰ'޵m}?_.?d@"D ؝S[} ^)upuz5Ř?~.~h 08هg`L[9kP%@"D ЪԞ/:!콴W1L~0OH1mϋجX\!"`%`|8s?;TD @"Am}%vҿ[M~Ϋv9*ܗpR4bӓtY!V3.s'9v>g1ZG"D @v$pJeycP}6z^<sf-۳#\ƙu4jl돥,@"D 8?թk߇oΣq>iӿo{lbNn$9`,׃| ̍u͛=1f,k'>@"D Դͧ7{DƜVfi\DxiV@|=`CꏴY"D @v%U{J޶^ )P+ypEu/=1pk^|-:csyHhi{D @"NV/F0oƋ)蝳F|Xa%bzۘ\ccLnb!{si"@"D _uzE_>s x1!IgXb0c*~X|-bk|؞E @"D*_. /SRWH|(zK0.%C2@٧'|1ňmĞ3D @" ӿeKz^"l yDl7&>Mr({`>saV^b"D @"7c:/SߜZ}$ !lpI@S/ ᛛT3:>~s觿ؒE @"DjnMOot84u6>n&cN g3@cL"o]}c9~rq1p.c"D @"7-s7|WF9#m x^.pe<yskӟ[f@"D  C ;ʧs}o$̀o"XB=VY\0<gɑE @"D`ohC:hX MLS2>iտhrrW8䬳S3AXϘǼ0D9p̱O,vN>#D @"U1CX%\M~!=2Fu!|;c[c 9ÞWfuؓE @"D`oj^zV:L~6>I8?b-,ꉟsC!ƬOc|z3"rI^O,@"D $>Vn/zy˞z{Ps.gm1w= 0kǁ6)y8x\T}=}F @"D`[9sq_=>[m1cDaçe|䱾c]Z"D @"phoΎ3>]\B^g uQ9{mL}55.7W}"D @&>EފTd(8a\ 4~cbXuQ۽#ED @"5<ҿS=VL u +؉%F~|U$z$̹{S341&G,@"D U[V^/͇B71D>1Y"D @&2[-A=yC 7^71kc3'_M2!gD @"k8?ѽhST}4ƹ^|P7:02璠_1:>ix&bѓFyNܚ?HE @"D`wghĬ-¼ƅ=hLJ7v o;7b݇<9YuY,@"D {@ҶSK-C{>6}=3^M0$?I1|13feD-k}bک6Y"D @B|QzH}Ϝuczo@I|Pً񗏈!7ƍz Fo 3@n\Zl"D @";/z%{WH(_c 3Ј1x9[,is돭Y"D @v'~E^>!Bq2WT̳gΞCq֟/ iD @"NV)V:L8w:=ƚbL{hu"|>l>c갦Y;T܇-Y"D @v'V=?զ>ѹѿdǿe|~F"}iŀ}^f=b -ùoXyߡG @"D`hSc/yKos^YVLƇ&疢Ü`7:690p?̱c91>"D @"#SS-{Mˣӿ꫷Ӯo٘607߼8oa=>؞=5v2\Vc[,e@"D ؝1NG^K>TsqNU|P3gsv#c\(Ōenk޴ُY5cY>Y"D @&5n>V{'b|6<"5c,HO2%Kxb=(>paR"D @"+4S=mIALƇb\1σ+Md{鉡]kCGcN۳HE @"D`w7}߀Q3^LAM6gg}@Ƃc/ӓƜucrCO yKY"D @v'pL[/ZϭV٘SI?y.F o#D @"O/K^IfS#`1!i=@1Kӷõ4c'GD @" ӿy̜ Mx&L dhOB|i` ܌%b1^ֹUg&{#l~:W9*; w=O,@"D {@ҿAbhb!O{}F}st&g͘Ÿ1šxt/=%1_%ɘ=#fm}bs5wD @"lsֿ1ҿƢ/ѿo7Y5(3>c1<~cLιX<4Þ,@"D {Pҫ?W?俤>gImo1gQO 1fxc3,Pe9Kr~d@"D &sѳӿ_۳ևzs1>kᘍI1\>49Na3>z곗ulw3@"D YTnIWX`~#ڽ? #>~/ ߼g=@8#[#UD @"E{F{svl  |=g8|ncgq9/濤#D @"7)V E49pb~w`eL)D @"\y1^UoYdlP#MXN,1"&a5J%/g1砹1y?d@"D ؝_4אot:X]?\|l>و!)ٳF#)c!p=~=cuO'y"D @"7jyX 2` F{zc| 'ع>iɚkϚg@"D ؓz՟XjWZqY_rh1.&g IcNw15'(%blY>Ng|1"D @"pҿ0b9y%cÚx׶|iHE @"D`wOo50{@aY+1cG<=>aS5wڡ>Tl"D @";!61}%'{/w>U/< ||6cL//6k!#oXo }{}w>@"D {@eɃ]}Voo}β e2>\4=$1]=yᅁ =eY_6D @" ҟjk_=T_v}W<Ɯu49~ +8a16'qr?ͷc)@"D Ou*=:Zhs[9ӶI ,p`Ba/f,sc]E~%"D @"75_u)Ƕ;>1cAz/^ոA16c8#mD @"] ioUimH e2>y\Qo"cKO _˰\8sڞG,@"D U?b zl9D @"MԿ7glnzţV7 e2>HH F{Kkf,91a/?d@"D [ӿhS:MO}>ɘHL!5@ka\\ 3˘!=>D @"Mz\3uNr:6y=㭀1\cY7ǬE?!~Y"D @BE:E_-=o5p f3`8igϡUa ><ǰYyl}rd@"D ؛CԷ_|c7g39lyl3{1/*fN5slSqD @"G`՟eů6}|=W=}Hp"DAuA%k0!Xgr_gd@"D ؛^տ}-&%9OΦ(ǏFh{q>zP1k;ab/̹\R'@"D 5 ՟[}E'?Dgޞ>,뜋Y[ l$@O;Ucs{O@"D ؟Vz\kܥ}VwۯtL:b3uii{Y5<yzD @"\-s7ڛcOWfW+هg>q}g^set ?c|A0%UD @" OѰ/l/ $)yX;CX/dF~cv/cj>HE @"D*f;)zT}Ϻ+$`bn vbѧ7 s^T*y989}ɻG&@"D nUy`Vm`F OQ̞5IYgcaϫOLD @" Vˣ5gsO0b+恂)Mjb:kƍz`>IWkyșE @"DZk_t/Z=U=qԍ9 ̹$W̳9c"޷ ck䣑o?e@"D ؝Yo|f6>3l$21k|~0q!`>E![?1΍X3OsN֬o]{ּp?@"D ЫTRK`gm/zjLCq10 =k@OR sz io>Aon/cZv>k棷aD @"8?_R=k3gy9GTq?'#~b#bM#qc^,[L :[D @"N@^%{,W i{à f2'4bfNa>˶>ssckD @" _oQo~HE<9Hg Ӹ x=X<{ؿiD @"JM{FOm[@R/Wz^zb(~׼Zuј?e@"D ؝_4)v7`ߌS;g#Y/ØK䧷1'pǘC^#ED @" ӿVֿs룯+E|6bC?`U$b3ıZ֦'I=@"D Uҿ\^C믐P a\ #KeOOb0ۈ=g3@"D 8Aҿo{%D98oL}cPR>|-p%½ĘɑE @"D`o/u^=93gCw-pI/AB&7ړ?_X77cɩgu.s}Oi%@"D ܚECpil|1LƜ@Ff 1ƘD1v\ssb1\| ɕE @"D`oh[Կo4V5 s#бGqo\˺y< =f-9>֦?"D @"p/vֱ/ZO{ŭ `y9=΂]gc#@"D Ю/uаe|Hp_=p<=Yg3g̃f#1Ky `W0s2fȯc[Xs]}F @"D`?[/c5Ƈ/~5KC{;da$ w <B,Xw%1=2>s*=>>'@"D ԼϭOk_u6/ϙ0l|p6E9~6B[Y?0BY# =<{YgE#|,dmSpŁީe{@"D s֫_.տ{h}4~c1#ƈvo-3OȇOc7!G/c}ֻHE @"D*nQޜg|:6_q>=8s2ۘ.d{Q )Mq*ܹhJ&@IDAT2z)&4{SG,@"D W!0kyLۧ{֭_!Dt0VK>HIs RYg9hcL=4Y"D @v'pW-5$5NGo;V׽8_ {^1LoRcC Y3n c0QfNm}d^cC,@"D "pH^S{Ѻiso͵ſ(ntae%Abu|M\'|<>5]H.@"D nU΂3ў1g#Y[y {(Bo.>(!vnĺ?ysf}ڳ慃Y"D @$^m:ZU;k{߇|mW{f2`IY~bc]gLcx xs{[İSY3m D @"\!/A_9ˁ>9/Cn9bA ~8gֹؚE @"D`w_-KVfQ:Oc1g,=>c<0s'ַY|[D @"NzW|LC{4/d1c-g Ϝ=x>[#ED @" ի{_`geXE?cbb/ >ǰ'޵m}?_.?d@"D ؝S[} ^)upuz5Ř0sD0c}|aMv[D @"NzHM)|LsKݿ $D8{/[Ƈs0g߱C]@"D Цh_`y!o[}M`-E#9=I9oLuzlb5sxa0q~bcsc<}D @"D`GZG9Wo]1m&`n,y? q z|!={k>e\OƶX"D @";cSJN}<6֡g&F"|=7 P؋X׼iѳkƲvI}D @"M@M{kW|JOly`E:kXeKo5zP|m}/?HE @"D`Wh[տ7zm~ŸbWԛXC%236$Ɯg.@"D nUOof9l|ǍƜ_"'?995>&=)D @"NU_U?[}^!m/ ,1$x%3֯"K'5"6=1KY"D @B2/Z͇ǼPbo^>D<~/`}1]FY>s@"D ؟1_D+!̦GycB4.{b 3okhN/%|O,@"D {82)͙9oՇM|7ў4<KN>csy7~K-Y"D @F/FNSgSf20z6S14$b%>{'2kHO,@"D {@ޢ=W{ḙax=bަgx+b Xa1ky16GhD @"8Ѱ}|>AK[M>F &"u*s(nU1w:{[Y"D @&v=4-CX<&Y/xL:1?c5)^zKcJ1{G~bԟk3@"D _c1>񫩍E_GO}o ks"Ìgl}.Ng/؜g"D @'՟^=WweC룹+10F{ka1~F>|{^y !>zxqG;ޥG,@"D W!pج=ձ({!p\gřt]Xr0_I}sG @"D`oS4KA&ۋIisV@c'<&K5Y˘?Rd@"D  Yc,>U߳n $:ؠXGXb_EMœk?J^:cAscQ"D @";[տji!lu:z۱~2|(qCSgFRǘC{{ƘOE @"D`o/Co{d0y` ~%jΚqc^.:6so$krf@"D C݋=OGOc{k-EusC,s. cΘm.=hCtY"D @v'pw[=Y8L<"k\؃Fz|~cp@O s#}1Ӝ5[מ5/"D @"'*m?ձR*YK>lǿ3c\ LBǜ:ckƛOPƛKز'}ϚmcE @"D*ygYg?Fl^UHra bk`>>.Υ,@"D PWoI^49x0( >c ぇ?Eϲܜ;ؚE @"D`w[Կc+y's=kAV&>Yߺ)D @"N@^-KV:}`;s/*sK~95?mgpi&@"D nUk`l HÄxWc=,ƴ7 _'‡y{|30kC}ؒE @"D`whCSmjOcKN^Z_]m}_&O?x'l$ǘ6_ Ł_lC,F.x0>9՟z}"D @ 6E>VT߭&?Ued|h{n)1I}c{` 9{;Vyl#@"D ;8?ղԿ<1{z=Vx9l3scisVsqXclnO.:~o5RD @" ӟTztC78_ŷ=s61m70AY̅^XƺM]3KE @"D`oj[ӿSmw|"gc+Y3Ƃ4.^"4xq փcl>o{q0!G,@"D @ު=hoV/d|(n,01=mi1\1&71Đ׽HE @"D`wU=k i{Q`9$A3O,1~Xu?qa1o>_Rl"D @"p/+$l>=%BLjx!{ Sgb6b@"D _~%[=^ d6<"~6Bq9T9}0\+@szp/1{h}rd@"D ؛1KOo~G>\od|@6ɍ$)ϗXr*ce\9_Zl"D @"p5Ч7:u:| 71'ѳB1&k7.>1?g 1_Czl}re@"D ؛ +gn tl6<{[/cƲnCY~Cϭ?BD @"\!uֿhS9Zzj7f7q|UϞCq,.|xa`}"D @"7!K4,&oҿo4?W9+OOgrٌ) وgLAc^U"̜8k';\~W@"D ؏V?gs!_Mm,{&?z{EX#?:K>s `Cw̭1뿊aϫC:"D @"75/sSZWMKs&L}}?$MQ|9cֈ1v>r=^֙s_/'OD @"kP?={Y|>#D @"?׸K/Zͭ_tuf1[ 0kyċ>X߱.?Re@"D  [Կo7gf}.@!Wܳq|:(Μ6>~`Kꛫ>@"D {PaoE^2^HJS w.L?y1^ :ƨ^|l"@"D U̚wSe_uWH&:O?>*o\ýTrpsw#MD @" ܪUK| IͭFgێu/ΗC!"=k4>xCg݃0\wT}bW,@"D {xwGkߋ `ļWSX/Pu֌r5}Ա~[߯&X3@"D ҟԿ^){>z[smo/ >sbsIЯgs4Dop1G#<'nMR"D @";[տjm|gHdba^B|4C;ϷbÏg本Yߺy`D @"= Wi[zU^=g>՞ /&b`zր>~X3|2^"Ɩ>1cT}Go,@"D W!pH(=>{g:17fr$>~NFrGĐFpX_#qA u.?f@"D ؝zK+Y1@XAAdKOh<̜-|m}4߹,@"D @ޢU/^!͋8+yxX *YC3gl!9F=4ֵ?HE @"D`w_*nA^ס@#ؙ{ VϘX0 Ȭ1)wm[8ϗK4Y"D @v'pV_cW@ t&Żbca1q4\:>c61uXo}oCǖ,@"D @ҟjS{ ӿ܇_rzo_2y`>?g#>ƴb>/bb1rܷwP}#D @")Z<إwwHn79,p_&EsKшaNOR0eX^y܃Xرkec@"D ؑ)QCi׷{Cly` o^OC㷰{clcsxrg.|?D @"NTңS98M*u(9m䀱_f.b275oZǬ]R,@"D {PޚU7h|l1>sXΚ1q[{<cy8[ߋ?f@"D ؕV)F{۶{_&C1&2ֽPy !1Y"D @";[տhS>o/w&3Gij>_ qc1痈OocNNsẏ1'uϥG,@"D 8խG_WHۋ l)ŀ$ 1~bHgc 9MO ~c{D @"8(LK_!!g1/¸8Fᅲ9Xg<`L#{ֿg"D @'pL/yJ$)sqޘ4壟}[ZK{1C#@"D _L{JsfΆ[c94b 1Xcw =cc+@"D Юh^=sk^$Gcs)> x5uxzZs}̭MnE @"D*_4c_E+yҳV`6fc }[fqs {Ξ'GD @" ]_a141M}ŧ=V>O{9^xz:fLϘaF9@"D ~W9_Ƙk_jjcǗs7Ӈpw,ITypXFKcR{en1|&\U,{^}}aOD @" y՟[ҿl_R3a$lrm糨'~a F<{y(Μ%Gz9`?yD @"\Xտ_tC/{YoBι[pFB $s|Y0[sS:6D @" lWտ]hnuJǤc ,F0co?ZXg^o^Cȳ ^wi*@"D Uܢ=G9;6{tqul y}{3Gqe>1]y@3ָ_R\@"D ؛ {+R}@R✇Us1X?d;R`Mi0Fm2cY"D @B`ּb/KO[B26(&``'}W}0OΘsǘ{iD @"NVZkHjn7:[v{q 6 ylYu1s8?1cd@"D ؛п{o<[c^|0#= b(ߤz f Ƭa͜~5ɼƚY"D @EEuOSޚk{QA˜K~<3!}0FO>9y|pk#]D @" ܪVgVk=c,F"6Q1\|PC܈u~?4dֵg D @"IJOu,ԫ vҿ8۬dx94г$1Θƚ1akf>zf@"D  CE_!كF?sY0}$As2g/_>"4r7łq5τ si5@"D Կ[ҿ_!͢|uƺ7 b&ïXz|B#xaOol37έ?f@"D ؝z i^\ncZP19{fc1ɇ}ַG,@"D PW)p +$ſ:~~<_@f}aMOkY4\Z"D @";[տ[R0,k~1퍣a׉a Ú~;gP}s?d@"D ؝ZTSE>DW׻[*ƗAI>>1yq57^=`ξc}^D @"=MѲտ.տCwy>gY2.[F szryߘ.9DLO~zsrk }M =1u{.?Rd@"D ؝1nUh~>>ZB^XgcN/<$IK f_E"8cOkEamzb۳D @"\!Ee_j? 1>Ey 1"x|x^:/c1س}>#D @"?ct,{VϫWB$M!ƄЧi\0x/gN" М^"KZY"D @&pLReS3s6t7Qכ2$$ nr= h y5|s3}{Y0o[D @"\_4)gƧ>d alchIcͿK}50O..eא[\Y"D @&vE{Fo[:'9{ļMVc֢?cnms_%Y[Ȳ1 5o!.q n, OfgSuO=]OwNĊ+reduiXE`XE`!sz[^z" &0%ntqU*0t-x,T?_[_E`XE`XEл"=QK~EZ'gOQ?م5,G}U"TN^/?E`XE`XC_?~k-~U}/rq"lԸA»>.2}1W9 A_UG",","7?ϖ# __㧄j5bϦ̑Bd6Ee7!@I$Dp yU΂٦_MCÁ}{Xv4],","|>sWsw8q&CִN7|t^ݴiÁN'WTK",",Ag{[;9~f|(nB| ~ͽ8ͽ'8ŚqLϸ8Hr-_E`XE`X>S=~~CARָ0_Qzy̷j],Y_[H,","f;e~~?@*I 5kI 7 3ס~RpvuőGE`XE`XEYzi!sjOFZ +lѷzBFٓӿWYZE`XE`X>ߢ^^O]N9LY3byG5; N~5GΥE`XE`XEG!W^^}4;e;.GByv:s xR6\>C9 f[ZE`XE`X> kצ3 Imo:CNß!~ Pχ|GgfNW7E`XE`XE3Я>Vv~볶?ɡhȇAIp6 KqDl_ʿ}D!|ıW|xE`XE`X/FӋ8L $]hL&yz܆Â}o | ]?BE`XE`XOGW3ٔ?7P>]8]x|-\˽y9ХE`XE`XEпo[w~45q`<\$1-o اOoщ~uZH,","|: G{?E :}a7coM?B×?@f>l5hh#",","{w50%{:{Xd?_'C-&N'5aK_lU#diXE`XE`tzӸo?sOא(٘p#1|\Ǐ\[gܫٗ/",",T/k_yG[ow[ˣq?'Ǐ%JZ;o3O1|[%[3p,",",{g][I.Q|馝МW~rD.wqʯ\~qE`XE`XOG>ק{o뉬:w{sA=PrT_7 l(bQfK -_翴,","|6?[[^G?5]pM:[> }DWM1-o #ʼn߇CSH,","|*zڟ}O?jk]xM}-@2rH~tK",",#zoSM>yxA狅Gĸx\r#,7GE`XE`XExosZ_]@0W)Lϗʷė_cCZЗ?—E`XE`Xׇo i'uQ8#@! Y:M<}rg~ӓmgֿ2E`XE`XExݿU~$j594FJ}T+gE8TGD|XZE`XE`X>_u~ۚMߍxճ?' 9 (F.^j3g^m[K",",AU}쟻+Wzҳ'?I0)/?v_U[*TkGLfr,-",",U鉍[.o=y_=seu%gj.`8#rN|ѷԟ5,","|sdW[oӯC}{Eaƽ jvޅ O@v׼EYoZ}-:bE`XE`XFQo}oM?%TSNh|6g|"7'X.J,?YZE`XE`X~$W?W=Y~{_.rN$!KsN"t46j]ʟ\}{ŲE`XE`XE_7⾷;@!T3v2䣋M#/HtT?zZZE`XE`X~?c-/3Cqjkki'8)n.|czƵl@(Gk",","ԟaKL 5.݇A;e}TݐHbjGE`XE`XE 0{)+[oRIRYנ\ΗOtHxI?*(,g?,-",",K` []N?TWs~ 5&^Qg3$eG-Eг2ʞ|V",","g\}rarΚ4>Ζ!>>.l8uIͷ̳ә M|M8ē͹<PSH,","|:QkΆ5W5|$J6@ NO]wѣ3O3'[g㻴,","ƽU~mbrh-3aP ":sg'l//wGȣ>ql>[!.-",",?Wx_|譍u!}8LbY 慗<Â}o } ХE`XE`XEկLG{i6!h 0D%O/Nh|*'oZYg7E`XE`X@G_W￵u_חk'M# to <s1wq.}}N'Ս5--",",@o\nuy4)r0hΖP@>}jvϯaֿf.",",[^gU{gkHo*0tIcap $u j1q:q:걥xW,","|:5oTlVWoq<5Gj럶Ȝ%C\]CLO`6Gb'E!PCuR~{`.WԵW/_E`XE`X>^3U{wꟋq?'cq%J$0%Gm!ZfbO>9iiXE`XE`T?ߢu1;ǟB%0vz++9Nƫ_N~^.o,-",",@oWU''G^lիO~U_|ѽ~/tʒ-O0׃8⻨C|ůlxrB^Sq~7[,","|zWou5GœP/V=muy{[_~1z&<'ǏS3jKo(P|> ;\bƷfTbQiiXE`XE`WO?,GR(<A$:dwq ,!>jw|)>>%~}ziXE`XE`gߪ4w}}KW0?z5{;51Kbadz|P-{. &l.",",[zzo[:кPkClKӋk58<[mF4K",",AwzX/]w$=r/{}^]?<ϹD6$Cb,:j˩W`9q)_y5GߪgiXE`XE`lg}T{Ms_р hDlts+-Of_?>h]xP=gCE`XE`XS/[YZj3zj9Mז˰6}19 wd zD+)o gcN/-Oo4ׯ`YS",","Y5Co:(h*=fO~x^[\g[\yTg^(!>A>Ψœ]b4,rL qaoM=]QZ!2+\>qݘC<}E`XE`XEG w__0GzV*p}/*9?&I-ya7\T 9]@_q0r+!~th:䟱t",",'"|z^|f/7[,/Yt$NȢ R"Wb5x9b4GƬ^,,","(S_RwUzs3go-ל9=kIDAT8#|OO.9*5;~**&IgP[lcÓ}|'t1d@a[ZE`XE`X>{g+KԳl ps1}O7/!~! ?_~Q0/ȢQXRAn>{O;>9唇߼g_ZE`XE`X~zNޔg07U?bȆzŤ ӱ5PM|pB-(:vć]7V#tiXE`XE`!QMk ٯ֔~^ׇCor5?ćLǎFيՍJ&[anE,E«] Y=ԜZ#<ĥE`XE`XE{Nz(Y_L!N_KǕ=Lg\o-0y=TC>e9Woy1'On@|i-}X jiXE`XE`!?gy/=6g==\o\<;GB t7$ ͏p-<d\.jl]}Tn8|E`XE`X@>^Gտ 4[OL9gNIV]| k+C|&9'Ǐ$ j$Wp烀N|Fqd>x5ťFW}u_<1YZE`XE`X[5X:}|̳oOgY\o=}8>}ryյS(@őGlͿiR\"g?{K",",G@o<2_ǸzS}h}!_=l}i9fjɞϗ%GDn]9LYQt;GWG vYE#6bq=\^~Κtw'",","[1LV}o}2}m>|ï=wvgNт l.)_wd{s0}͘#ţd\WwǾ,","|7zJ7FQMC}ГѫM7@#OuŜԂO.$Q7*jA5/Vbk8ʖ,<7ۿ;nO?}ORܖE`XE`X!?WocbXzbDӟ_l8td?gg{nADO{ G|%gFoj -1j%o'RS] //ſώ񟎛_C,","|4_7?$;|$ YGQϪEЛ㆜<9ꃫ_ll >-d],G9?dD#%7Cl]1cwǺIFumw#>|[ūzFΛ==@/|g{1c@ߏPw ӡ tK>֕ g˧q_H_kN5ky_~pD%C3 YYo7?G^>W6c^1Faˋ!vgwgCGa=]Szd~j71_g.Xқ'^Uc/Sߞ?At?;>-ݞpc=owg3E2gћ 6WӍ+cOxq"-{}sF"Oׁ{gȝ?dk]npzE.0NW|O߅e#sˉg.x)U}[9@=c xdԦfWnW\Qa~ԧĩ_lqq;bԧ\쌟r9o=2>=|oax}7˽D{G㾥=+WgL$M|~ųqsm=3OoOWN~pq]'2^_q3y5;ID>adz~śCu^?V\kuLZs8b 7hv/s7D,su[skÑ 2I‹i6ǫ/W1Sz[}'Kx{f߅Px=̞?ϳ&{^ggg?}u*g>ޓWqbؚlbP|qwgޘOߠW_py\?9:ɽW5'wmGNP=֝8'JW,[~lğlcA3rSnryQ~dւ7ǛWP}W _y[c*^,nЋCd:~՞C}bGba NlG WMgC[gnϾ~DQc] Í͇x[W3mӿ^_φ!1gt୅γ='kg&(\i~T`K~O{wӡ|2GjU/._[9[ >}-!!>s=,6NOonB`ə?y3ɭ5ÕbOfCɳ~>]̕VgƳϟă:?|W߿4Ѽ٬߇\E6ʓo)f[5~ϼΧL6G仯ևu7UOx>|Pq ?C(*+q6?$gE.ּ}8@6w@ˆX:dzrӵ/9\,Ntl(sW̥b빋|>~{}? y->bѻb'gK/az\+<;9txU֗;L \ɥ9]z/H š8;9ނ,l5-o㇗&}է+_{zHCuE'tFv_7ަC#.?s~pO/b߫/GqCNtFگw=']ޫ)O~pZgr]sazĖ5%Ɛͥk.oy}y'_}trq9s'O2 ^Yd=__|翽N. p8Θ\l=n5Fw_zy~>y?]ө $2ݼ9΍yIFf@#2 Zt 8=]7Y\<ꌗˠwťg#C!>Bu7 lœ[ՙ'ހ z\L{'9y8$ܸxnֆ"rj}:ߏO^5d?t=Ykϖ0$&=N/~NYƇ|&US'чKϟ\ֈI\ LdIk]XpN٪1Ip\Pxq]htC@7g3ʅ:G|M]ć>LQfz0Ӛ^6XvǐzT-b>9.WG}a_b>{}>s?PvThސ ͞ȼ\qxvC> I'\ Q1g3~\ň7NC(o{ݛ[(.0+k[$[zdǶbM\R.c71Z}~숝mC9;TMn7ṣ/'s5\Z ުYø:Gs/Ͻa_oϟ݁]F}޿'Iz ȼ/cUS^ƑٍYɯsMPqէ;oN@'V5/,_}yr37_3sɻÍ4?T9|?oއLlZzYlO,{uY˜o\ᘍңdm b[71SY_\$ig>?{һ#aG>`{8sNӜM\{B_y}+~&OzsTX -Dl;[g/_dCsޚ.ˋ0}pɐ."+V\L7f{n1Q2_/=h Vt>ߺr"9 \[ן_:לozuS cCf{ߪ_@ϕgXoɾ<{w?f?sN/_yaiqUzGUO'V.<i]9[xů xZ+?.\#:~x:yk[tp9|g'7Ճ>].gM_y>wZK~BГk3GqDW?_6UxUޙ' =VYg{؜ύ}aH]6GǻoygֳyHO,HQ' DCke7K,O2=j[Ր#Nsy̭Mta8k+'~oQZE$-̟tl.@LS.cΫٺZ:K>.7_k,gs59q`[9k~k|Bw>pGw]=o>"{\8|z6{W~;+έ9f۾AtF}No zr[[~qz>S\uzoM?Yw?>~z?ts. iBFs# mQtFv̟3>\@bZ?V17__8YCzhجݼW򸎮A6kZc}u/w鍭g#c{{}=<wEg/޳{\7<N)!z~lׇ͘|GxSqPy'o~~Շçx>dqzFKC}/Weח{3J>]qtgoΎ'˅I|Ft[Ӵ٫^蕗$HW,D_^ HEd-٦C属 >գX1byg.l~rPuŸM/͵Mw~׸/ {=go${>Þ#} {<=}9]G|>=yz(6Tdxc{..bkn=bKVr)ޕ1ҳ7G[;Yy_[C&0X R-bx]ŸБУ|or^!5+nZ\tQ1Oy}m bk#;>'WSۜuE5'O[3W0η\bge}w?g{Gg+,{֣u8xo :Gl|圾dCN4?0ʕ^?}׬k+!o^6ԵwMՏ.-?ŘOO9q|#'@ekri^mr%nް*?Qri9ʍO9ؼ\[n?O>{οލM ʯ9]5f3/_%>JXE<ɆEdbي5a?G?eG3Ƀ5#`e3omb2O.\TL&N>T]ꋙrv#gT}'gkaCt5}럐-~s\Ş?P3w}Gdzzc\uF=]v\,"ۚ7/Ovs&?T=Eq:W~~Bfz([@ҳpǷ =ē瓌W3Cu#gtbGbceKGN2Ώ`G5҉AM-:ŵ֏sq =G\!9{O(}$GQrVwpcbbģ;KW~>toMr{'VLdyH^jIb\|:kM|smIwO=^/Nd_yc}gn6:nZ8Gg'wOT}=gc/!}~f94?Ssكta/6{ϯCOU>Hѩ!>s^~򙹒OI[Կ)]Eu1 z1w1Gs.9[uʛ}'ㆉWu9|;}[S媎\ŰgN>go\n-\Lc? Ī{v1_?<~ UOy~ʹP1ykps>c?FuakCWO9e*^tPr_w,@ {뽂W=pp9귪oo{jGI=oV}>ɇ yQ3#'}^>dV6\~D}ZxTHoA]`9ْy[l@=o{hkj-6?>j5&Ifk\)>_C>+?[~7ͨ>I[gzwoy6M|=̫i?|"k뜚:2?uWϼ:6SuZ7fjw֘zbQwŝǏrȳ|^{N/dDo"͍.7*pzħ'atr$9ȳ< dvɮ3(!_rˋ~+3<ֿp^{מߞ?N=]}?]^z?g.2̢' džXbPx2қ`ߪU=kͳf9Pkf` lj)n^<嬾q5~V5Z7Sm:i]+˛!9eim kSѵVY_,竾O97ZWkh?-z{{\g枿_#{u.vFltf~wk}Γ|\?%ÿ\#^.sTzǺbxTj[.>͆(Μ(xՙu36rMbaa>?vkk?M)d6ӗk,;sV7<3_w]|fg;;wy?׻;n|%G}{_c<0kj~FӼtŔ{#Eꑫ/p>"gc-J?D݈΁)E%8ȅ EUMy|${ hm_>zԼ+5m+W5g Z/&va>{|zzguC_/^ GΨJahcr!\#Cbs'm'.b>bϟ繹i}>{{cϠ{~3{1tb?5UgK_mqtO>۬IF$I_\rgok9hQ"E[0tyArpŰ|o}Qn cߜgnFkW:d]txD5fGf㫮<r̵s-Dlي}o=>C=C='fag^#^^[z|ǏxЌ5f}雧;T'v ~Zgq\XqŚ{?D਋1'mq]! fs3Z% |+m\<_6׫~|ewmջ?5_M|r)$~ѬO6OOg_XĻoϟ=_Ó+h~DQηzY>~|_n}f9*'d~9)?;w{&BZX@E5G]lx4QnX6s>\D^s1t*&'>{Y#N: }^}4GL[۫7]֮BePNOFܚl{GSym|7)k,[E]DeNj§On@:suZ?bhjvm7XO?c˧֫_|_X5l.}ߞ?{9ey:Gѥ?Gl:o^7uW7/Y 9AtMsj4C'|ƋVzy#~MWe- » 7gsCuPw3/;/E&YC!gt.z̭2wE j=0q 4Fy,9_9[4MN5P\/wr9q~]SP}|ŵn/~O3{p=|t8?q8?&=}6wH{gzǵ]Ξ<.;-֑o x=n2oW?\N[, 8:5 > E7cad' t|pzn]rU}֯k37S֌4gWm{}s#~o\=쏨fB%L4sc'N{\X{^E '^ķW,<9s{-}5_՟~?\Org E|#~HW4̛܂,x.0ӹX7ѱ[Π+!14ןW#н>ݬz4O'Ʀ:2GsM5ѷiP/?x^/{{ p}g/bn^Ax쵲w|7r\Q_?/[_`xʸ:uOaMr84/2@ spz܈ CN7Ɨ>9RWnA;up;Y}vQC|\5F|~~t[gg}›rԃx/Ь_E/uˇ_:rt~j.-R'ػŅPd/!jFvC|@ xq{{;}~n?U{?oyuMŔ C|鳫_rrF1GZ񌙾tni>-N]x.8@ 6@ zҙ7 Nv1ݰ|yYl5"IWx4m\6[ߨZX|_h,>v= oϟ=~yNxy]?{_g4kAU}ޯɸ9Jvd׳M T]؟f@1e6!tVCXY\f}5!D/^H}1}'dϟ/^|]d7?7[z>:Ԫ_:Q<˯|:WvmG.>C hr "x闏dn6VC<}jy1[Gv̍⺱l3볙r5sM^j㇧_Ǯ?x=ƞ?יvSCNϝ>GkMz9:5 ç^3O-s Tҵy@+&_<0ӧ?:rf높ٌISb/U}bkCk}9G[ߞ?yg?3w'3ƾ/~{o?T?4s)'ʗ~."{V+gCy]t|ՏWᙹ rSxV|bn|f i]|!v'S}՜)v[|_mߞ?{^¾,~G=G׎>rC8]{{{7s-?:c~{j뇽+70̑9M2gOtbf}gkPpQAʇrdGSGxGͳED6TTyu[S7/ݽ~ؗk/5^կ[kjMt[|{f]Ht+&>>]>-_5u?bު5?;@1uSْgS^W^6T-\.:Uk*Ouң|ae!>0np\]gŞ?s{9}9[@⑽<2y=c+/&U}~'CRg-l`8Dvi5Ho6vs oo3Q5ޫ_5K=|o oŞ?z_|w?x>?skmQ3/j}?s٫hnlGeF(s9\W>]\`n| *Z,wk?}\9ev|||Ugf)o -g}\}Sq߿=ǽdWė?ApգkaQ3'W7% h@o}nt2 !\s\  %KaK.'Y6BϞ/%FFCu}y)ػOwӽoΚ<3^~ )"cX[ 2OMlݘǍGNn.yڪѵ3oÉ˷q[-Ω=^/~O߷!9P6rkST8aQhėOypW|壛y驓ծ޽~6~r!{[AU}w?={@7:ZC4~^ʷpMtށx~x^|uZ ioCtF|d'w1/׬ uLO^19j6[og-.f9>{s }>{ X_r{rtϧ,믷`Puqiҟ5?X<:78ē(\lFm1_:տoGij9Yoϟ=z8zGC<.g朼}3q=C}ģ6{Ɨg,\C{~Mg?y?=ѼF/"n﫮0`.^J٦>)N?_B/SGgg.a3Yʯgn'Faߵg3sg>Yʯ=O窽a.=恟srazO8_yPj5OL=r:|g|i9S`zV:o^h??SnO|}&(;/u?ʇn]_78s]zʖ^8\m6tsL{h=}=Ϟ='NΆp< 3]=>PN:ЧO壬Tɿ.Utɋy+=.tv"{c= ߾HK?w5r~|XE`XE`XE`XE`XE`XE`XE`XE`XE`XE`XE`XE`XE`XE`XE"G{IENDB`http-party-http-server-af0ac3e/test/000077500000000000000000000000001424550403000176275ustar00rootroot00000000000000http-party-http-server-af0ac3e/test/304.test.js000066400000000000000000000134031424550403000214520ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const ecstatic = require('../lib/core'); const http = require('http'); const request = require('request'); const path = require('path'); const portfinder = require('portfinder'); const root = `${__dirname}/public`; const baseDir = 'base'; test('304_not_modified_strong', (t) => { portfinder.getPort((err, port) => { const file = 'a.txt'; const server = http.createServer( ecstatic({ root, gzip: true, baseDir, autoIndex: true, showDir: true, weakEtags: false, weakCompare: false, }) ); server.listen(port, () => { const uri = `http://localhost:${port}${path.join('/', baseDir, file)}`; request.get({ uri, followRedirect: false, }, (err, res) => { if (err) { t.fail(err); } t.equal(res.statusCode, 200, 'first request should be a 200'); request.get({ uri, followRedirect: false, headers: { 'if-modified-since': res.headers['last-modified'] }, }, (err2, res2) => { if (err2) { t.fail(err2); } t.equal(res2.statusCode, 304, 'second request should be a 304'); t.equal(res2.headers.etag.indexOf('"'), 0, 'should return a strong etag'); server.close(); t.end(); }); }); }); }); }); test('304_not_modified_weak', (t) => { portfinder.getPort((err, port) => { const file = 'b.txt'; const server = http.createServer( ecstatic({ root, gzip: true, baseDir, autoIndex: true, showDir: true, weakCompare: false, }) ); server.listen(port, () => { const uri = `http://localhost:${port}${path.join('/', baseDir, file)}`; const now = (new Date()).toString(); request.get({ uri, followRedirect: false, }, (err, res) => { if (err) { t.fail(err); } t.equal(res.statusCode, 200, 'first request should be a 200'); request.get({ uri, followRedirect: false, headers: { 'if-modified-since': now }, }, (err2, res2) => { if (err2) t.fail(err2); t.equal(res2.statusCode, 304, 'second request should be a 304'); t.equal(res2.headers.etag.indexOf('W/'), 0, 'should return a weak etag'); server.close(); t.end(); }); }); }); }); }); test('304_not_modified_strong_compare', (t) => { portfinder.getPort((err, port) => { const file = 'b.txt'; const server = http.createServer( ecstatic({ root, gzip: true, baseDir, autoIndex: true, showDir: true, weakEtags: false, weakCompare: false, }) ); server.listen(port, () => { const uri = `http://localhost:${port}${path.join('/', baseDir, file)}`; const now = (new Date()).toString(); let etag = null; request.get({ uri, followRedirect: false, }, (err, res) => { if (err) { t.fail(err); } t.equal(res.statusCode, 200, 'first request should be a 200'); etag = res.headers.etag; request.get({ uri, followRedirect: false, headers: { 'if-modified-since': now, 'if-none-match': etag }, }, (err2, res2) => { if (err2) { t.fail(err2); } t.equal(res2.statusCode, 304, 'second request with a strong etag should be 304'); request.get({ uri, followRedirect: false, headers: { 'if-modified-since': now, 'if-none-match': `W/${etag}` }, }, (err3, res3) => { if (err3) { t.fail(err3); } // Note that if both if-modified-since and if-none-match are // provided, the server MUST NOT return a response status of 304 // unless doing so is consistent with all of the conditional // header fields in the request // https://www.ietf.org/rfc/rfc2616.txt t.equal(res3.statusCode, 200, 'third request with a weak etag should be 200'); server.close(); t.end(); }); }); }); }); }); }); test('304_not_modified_weak_compare', (t) => { portfinder.getPort((err, port) => { const file = 'c.js'; const server = http.createServer( ecstatic({ root, gzip: true, baseDir, autoIndex: true, showDir: true, weakEtags: false, }) ); server.listen(port, () => { const uri = `http://localhost:${port}${path.join('/', baseDir, file)}`; const now = (new Date()).toString(); let etag = null; request.get({ uri, followRedirect: false, }, (err, res) => { if (err) { t.fail(err); } t.equal(res.statusCode, 200, 'first request should be a 200'); etag = res.headers.etag; request.get({ uri, followRedirect: false, headers: { 'if-modified-since': now, 'if-none-match': etag }, }, (err2, res2) => { if (err2) { t.fail(err2); } t.equal(res2.statusCode, 304, 'second request with a strong etag should be 304'); request.get({ uri, followRedirect: false, headers: { 'if-modified-since': now, 'if-none-match': `W/${etag}` }, }, (err3, res3) => { if (err3) { t.fail(err3); } t.equal(res3.statusCode, 304, 'third request with a weak etag should be 304'); server.close(); t.end(); }); }); }); }); }); }); http-party-http-server-af0ac3e/test/accept-encoding.test.js000066400000000000000000000025701424550403000241720ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const ecstatic = require('../lib/core'); const http = require('http'); const request = require('request'); const root = `${__dirname}/public`; test('properly handles whitespace in accept-encoding', (t) => { t.plan(3); const server = http.createServer(ecstatic({ root, autoIndex: true, gzip: true })); server.listen(() => { const port = server.address().port; const options = { uri: `http://localhost:${port}/gzip`, headers: { 'accept-encoding': ' gzip, deflate' } }; request.get(options, (err, res) => { t.ifError(err); t.equal(res.statusCode, 200); t.equal(res.headers['content-encoding'], 'gzip'); }); }); t.once('end', () => { server.close(); }); }); test('properly handles single accept-encoding entry', (t) => { t.plan(3); const server = http.createServer(ecstatic({ root, autoIndex: true, gzip: true })); server.listen(() => { const port = server.address().port; const options = { uri: `http://localhost:${port}/gzip`, headers: { 'accept-encoding': 'gzip' } }; request.get(options, (err, res) => { t.ifError(err); t.equal(res.statusCode, 200); t.equal(res.headers['content-encoding'], 'gzip'); }); }); t.once('end', () => { server.close(); }); }); http-party-http-server-af0ac3e/test/cache.test.js000066400000000000000000000061051424550403000222100ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const http = require('http'); const request = require('request'); const ecstatic = require('../lib/core'); test('custom cache option number', (t) => { let server = null; try { server = http.createServer(ecstatic({ root: `${__dirname}/public/`, cache: 3600, })); } catch (e) { t.fail(e.message); t.end(); } t.plan(3); server.listen(0, () => { const port = server.address().port; request.get(`http://localhost:${port}/a.txt`, (err, res) => { t.ifError(err); t.equal(res.statusCode, 200, 'a.txt should be found'); t.equal(res.headers['cache-control'], 'max-age=3600'); server.close(() => { t.end(); }); }); }); }); test('custom cache option string', (t) => { let server = null; try { server = http.createServer(ecstatic({ root: `${__dirname}/public/`, cache: 'max-whatever=3600', })); } catch (e) { t.fail(e.message); t.end(); } t.plan(3); server.listen(0, () => { const port = server.address().port; request.get(`http://localhost:${port}/a.txt`, (err, res) => { t.ifError(err); t.equal(res.statusCode, 200, 'a.txt should be found'); t.equal(res.headers['cache-control'], 'max-whatever=3600'); server.close(() => { t.end(); }); }); }); }); test('custom cache option function returning a number', (t) => { let i = 0; let server = null; try { server = http.createServer(ecstatic({ root: `${__dirname}/public/`, cache() { i += 1; return i; }, })); } catch (e) { t.fail(e.message); t.end(); } t.plan(6); server.listen(0, () => { const port = server.address().port; request.get(`http://localhost:${port}/a.txt`, (err, res) => { t.ifError(err); t.equal(res.statusCode, 200, 'a.txt should be found'); t.equal(res.headers['cache-control'], 'max-age=1'); request.get(`http://localhost:${port}/a.txt`, (err2, res2) => { t.ifError(err2); t.equal(res2.statusCode, 200, 'a.txt should be found'); t.equal(res2.headers['cache-control'], 'max-age=2'); server.close(() => { t.end(); }); }); }); }); }); test('custom cache option function returning a string', (t) => { let i = 0; let server = null; try { server = http.createServer(ecstatic({ root: `${__dirname}/public/`, cache() { i += 1; return `max-meh=${i}`; }, })); } catch (e) { t.fail(e.message); t.end(); } t.plan(6); server.listen(0, () => { const port = server.address().port; request.get(`http://localhost:${port}/a.txt`, (err, res) => { t.ifError(err); t.equal(res.statusCode, 200, 'a.txt should be found'); t.equal(res.headers['cache-control'], 'max-meh=1'); request.get(`http://localhost:${port}/a.txt`, (err2, res2) => { t.ifError(err2); t.equal(res2.statusCode, 200, 'a.txt should be found'); t.equal(res2.headers['cache-control'], 'max-meh=2'); server.close(() => { t.end(); }); }); }); }); }); http-party-http-server-af0ac3e/test/check-headers.js000066400000000000000000000006131424550403000226530ustar00rootroot00000000000000const request = require('request'); module.exports = (t, server, path, check) => { server.listen(() => { const port = server.address().port; const uri = `http://localhost:${port}/${path}`; request.get({ uri }, (err, res) => { t.ifError(err); t.equal(res.statusCode, 200); check(t, res.headers); }); }); t.once('end', () => { server.close(); }); } http-party-http-server-af0ac3e/test/cli.test.js000066400000000000000000000056321424550403000217200ustar00rootroot00000000000000'use strict'; /* this test suit is incomplete 2015-12-18 */ const test = require('tap').test; const request = require('request'); const spawn = require('child_process').spawn; const path = require('path'); const portfinder = require('portfinder'); const node = process.execPath; const defaultPort = 8080; function startServer(args) { return spawn(node, [require.resolve('../bin/http-server')].concat(args)); } function checkServerIsRunning(url, msg, t, _cb) { if (!msg.toString().match(/Starting up/)) { return; } t.pass('http-server started'); const cb = _cb || (() => {}); request(url, (err, res) => { if (!err && res.statusCode !== 500) { t.pass('a successful request from the server was made'); cb(null, res); } else { t.fail(`the server could not be reached @ ${url}`); cb(err); } }); } function tearDown(ps, t) { t.tearDown(() => { ps.kill('SIGTERM'); }); } const getPort = () => new Promise((resolve, reject) => { portfinder.getPort((err, port) => { if (err) reject(err); resolve(port); }); }); test('setting port via cli - custom port', (t) => { t.plan(2); getPort().then((port) => { const options = ['.', '--port', port]; const server = startServer(options); tearDown(server, t); server.stdout.on('data', (msg) => { checkServerIsRunning(`http://localhost:${port}`, msg, t); }); }); }); test('setting mimeTypes via cli - .types file', (t) => { t.plan(4); getPort().then((port) => { const root = path.resolve(__dirname, 'public/'); const pathMimetypeFile = path.resolve(__dirname, 'fixtures/custom_mime_type.types'); const options = [root, '--port', port, '--mimetypes', pathMimetypeFile]; const server = startServer(options); tearDown(server, t); server.stdout.on('data', (msg) => { checkServerIsRunning(`http://localhost:${port}/custom_mime_type.opml`, msg, t, (err, res) => { t.error(err); t.equal(res.headers['content-type'], 'application/secret'); }); }); }); }); test('setting mimeTypes via cli - directly', (t) => { t.plan(4); getPort().then((port) => { const root = path.resolve(__dirname, 'public/'); const mimeType = ['--mimetypes', '{ "application/x-my-type": ["opml"] }']; const options = [root, '--port', port].concat(mimeType); const server = startServer(options); // TODO: remove error handler tearDown(server, t); server.stdout.on('data', (msg) => { checkServerIsRunning(`http://localhost:${port}/custom_mime_type.opml`, msg, t, (err, res) => { t.error(err); t.equal(res.headers['content-type'], 'application/x-my-type'); }); }); }); }); test('--proxy requires you to specify a protocol', (t) => { t.plan(1); const options = ['.', '--proxy', 'google.com']; const server = startServer(options); tearDown(server, t); server.on('exit', (code) => { t.equal(code, 1); }); });http-party-http-server-af0ac3e/test/compression.test.js000066400000000000000000000075761424550403000235230ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const ecstatic = require('../lib/core'); const http = require('http'); const request = require('request'); const root = `${__dirname}/public`; test('serves brotli-encoded file when available', (t) => { t.plan(3); const server = http.createServer(ecstatic({ root, brotli: true, autoIndex: true })); server.listen(() => { const port = server.address().port; const options = { uri: `http://localhost:${port}/brotli`, headers: { 'accept-encoding': 'gzip, deflate, br' } }; request.get(options, (err, res) => { t.ifError(err); t.equal(res.statusCode, 200); t.equal(res.headers['content-encoding'], 'br'); }); }); t.once('end', () => { server.close(); }); }); test('serves gzip-encoded file when brotli not available', (t) => { t.plan(3); const server = http.createServer(ecstatic({ root, brotli: true, gzip: true, autoIndex: true })); server.listen(() => { const port = server.address().port; const options = { uri: `http://localhost:${port}/gzip`, headers: { 'accept-encoding': 'gzip, deflate, br' } }; request.get(options, (err, res) => { t.ifError(err); t.equal(res.statusCode, 200); t.equal(res.headers['content-encoding'], 'gzip'); }); }); t.once('end', () => { server.close(); }); }); test('serves gzip-encoded file when brotli not accepted', (t) => { t.plan(3); const server = http.createServer(ecstatic({ root, brotli: true, gzip: true, autoIndex: true })); server.listen(() => { const port = server.address().port; const options = { uri: `http://localhost:${port}/brotli`, headers: { 'accept-encoding': 'gzip, deflate' } }; request.get(options, (err, res) => { t.ifError(err); t.equal(res.statusCode, 200); t.equal(res.headers['content-encoding'], 'gzip'); }); }); t.once('end', () => { server.close(); }); }); test('serves gzip-encoded file when brotli not enabled', (t) => { t.plan(3); const server = http.createServer(ecstatic({ root, brotli: false, gzip: true, autoIndex: true })); server.listen(() => { const port = server.address().port; const options = { uri: `http://localhost:${port}/brotli`, headers: { 'accept-encoding': 'gzip, deflate, br' } }; request.get(options, (err, res) => { t.ifError(err); t.equal(res.statusCode, 200); t.equal(res.headers['content-encoding'], 'gzip'); }); }); t.once('end', () => { server.close(); }); }); test('serves unencoded file when compression not accepted', (t) => { t.plan(3); const server = http.createServer(ecstatic({ root, brotli: true, gzip: true, autoIndex: true })); server.listen(() => { const port = server.address().port; const options = { uri: `http://localhost:${port}/brotli`, headers: { 'accept-encoding': '' } }; request.get(options, (err, res) => { t.ifError(err); t.equal(res.statusCode, 200); t.equal(res.headers['content-encoding'], undefined); }); }); t.once('end', () => { server.close(); }); }); test('serves unencoded file when compression not enabled', (t) => { t.plan(3); const server = http.createServer(ecstatic({ root, brotli: false, gzip: false, autoIndex: true })); server.listen(() => { const port = server.address().port; const options = { uri: `http://localhost:${port}/brotli`, headers: { 'accept-encoding': 'gzip, deflate, br' } }; request.get(options, (err, res) => { t.ifError(err); t.equal(res.statusCode, 200); t.equal(res.headers['content-encoding'], undefined); }); }); t.once('end', () => { server.close(); }); }); http-party-http-server-af0ac3e/test/content-type.test.js000066400000000000000000000030771424550403000236030ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const http = require('http'); const ecstatic = require('../lib/core'); const checkHeaders = require('./check-headers.js'); const root = `${__dirname}/public/`; test('global default contentType', (t) => { let server = null; try { server = http.createServer(ecstatic({ root, contentType: 'text/plain', })); } catch (e) { t.fail(e.message); t.end(); } t.plan(3); checkHeaders(t, server, 'f_f', (t, headers) => { t.equal(headers['content-type'], 'text/plain; charset=UTF-8'); }); }); test('content type text', (t) => { t.plan(3); const server = http.createServer( ecstatic({root}) ); checkHeaders(t, server, 'subdir/e.html', (t, headers) => { t.equal(headers['content-type'], 'text/html; charset=UTF-8'); }); }); test('content type binary', (t) => { t.plan(3); const server = http.createServer( ecstatic({root}) ); checkHeaders(t, server, 'subdir/app.wasm', (t, headers) => { t.equal(headers['content-type'], 'application/wasm'); }); }); test('charset arabic', (t) => { t.plan(3); const server = http.createServer( ecstatic({root}) ); checkHeaders(t, server, 'charset/arabic.html', (t, headers) => { t.equal(headers['content-type'], 'text/html; charset=ISO-8859-6'); }); }); test('charset Shift_JIS', (t) => { t.plan(3); const server = http.createServer( ecstatic({root}) ); checkHeaders(t, server, 'charset/shift_jis.html', (t, headers) => { t.equal(headers['content-type'], 'text/html; charset=Shift_JIS'); }); }); http-party-http-server-af0ac3e/test/core-error.test.js000066400000000000000000000034531424550403000232270ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const ecstatic = require('../lib/core'); const http = require('http'); const request = require('request'); const path = require('path'); const root = `${__dirname}/public`; const baseDir = 'base'; require('fs').mkdirSync(`${root}/emptyDir`, {recursive: true}); const cases = require('./fixtures/common-cases-error'); test('core', (t) => { require('portfinder').getPort((err, port) => { const filenames = Object.keys(cases); const server = http.createServer( ecstatic({ root, gzip: true, baseDir, autoIndex: true, showDir: true, handleError: false, }) ); server.listen(port, () => { let pending = filenames.length; filenames.forEach((file) => { const uri = `http://localhost:${port}${path.join('/', baseDir, file)}`; const headers = cases[file].headers || {}; request.get({ uri, followRedirect: false, headers, }, (err, res, body) => { if (err) { t.fail(err); } const r = cases[file]; t.equal(res.statusCode, r.code, `status code for \`${file}\``); if (r.type !== undefined) { t.equal( res.headers['content-type'].split(';')[0], r.type, `content-type for \`${file}\`` ); } if (r.body !== undefined) { t.equal(body, r.body, `body for \`${file}\``); } if (r.location !== undefined) { t.equal(res.headers.location, path.join('/', baseDir, r.location), `location for \`${file}\``); } pending -= 1; if (pending === 0) { server.close(); t.end(); } }); }); }); }); }); http-party-http-server-af0ac3e/test/core.test.js000066400000000000000000000035641424550403000221030ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const ecstatic = require('../lib/core'); const http = require('http'); const request = require('request'); const path = require('path'); const eol = require('eol'); const root = `${__dirname}/public`; const baseDir = 'base'; require('fs').mkdirSync(`${root}/emptyDir`, {recursive: true}); const cases = require('./fixtures/common-cases'); test('core', (t) => { require('portfinder').getPort((err, port) => { const filenames = Object.keys(cases); const server = http.createServer( ecstatic({ root, gzip: true, baseDir, autoIndex: true, showDir: true, defaultExt: 'html', handleError: true, }) ); server.listen(port, () => { let pending = filenames.length; filenames.forEach((file) => { const uri = `http://localhost:${port}${path.join('/', baseDir, file)}`; const headers = cases[file].headers || {}; request.get({ uri, followRedirect: false, headers, }, (err, res, body) => { if (err) { t.fail(err); } const r = cases[file]; t.equal(res.statusCode, r.code, `status code for \`${file}\``); if (r.type !== undefined) { t.equal( res.headers['content-type'].split(';')[0], r.type, `content-type for \`${file}\`` ); } if (r.body !== undefined) { t.equal(eol.lf(body), r.body, `body for \`${file}\``); } if (r.location !== undefined) { t.equal(path.normalize(res.headers.location), path.join('/', baseDir, r.location), `location for \`${file}\``); } pending -= 1; if (pending === 0) { server.close(); t.end(); } }); }); }); }); }); http-party-http-server-af0ac3e/test/cors.test.js000066400000000000000000000056001424550403000221120ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const server = require('../lib/core'); const http = require('http'); const path = require('path'); const request = require('request'); const root = path.join(__dirname, 'public'); test('cors defaults to false', (t) => { t.plan(4); const httpServer = http.createServer( server({ root, autoIndex: true, defaultExt: 'html', }) ); httpServer.listen(() => { const port = httpServer.address().port; const uri = `http://localhost:${port}/subdir/index.html`; request.get({ uri }, (err, res) => { t.ifError(err); t.equal(res.statusCode, 200); t.type(res.headers['access-control-allow-origin'], 'undefined'); t.type(res.headers['access-control-allow-headers'], 'undefined'); }); }); t.once('end', () => { httpServer.close(); }); }); test('cors set to false', (t) => { t.plan(4); const httpServer = http.createServer( server({ root, cors: false, autoIndex: true, defaultExt: 'html', }) ); httpServer.listen(() => { const port = httpServer.address().port; const uri = `http://localhost:${port}/subdir/index.html`; request.get({ uri }, (err, res) => { t.ifError(err); t.equal(res.statusCode, 200); t.type(res.headers['access-control-allow-origin'], 'undefined'); t.type(res.headers['access-control-allow-headers'], 'undefined'); }); }); t.once('end', () => { httpServer.close(); }); }); test('cors set to true', (t) => { t.plan(4); const httpServer = http.createServer( server({ root, cors: true, autoIndex: true, defaultExt: 'html', }) ); httpServer.listen(() => { const port = httpServer.address().port; const uri = `http://localhost:${port}/subdir/index.html`; request.get({ uri }, (err, res) => { t.ifError(err); t.equal(res.statusCode, 200); t.equal(res.headers['access-control-allow-origin'], '*'); t.equal(res.headers['access-control-allow-headers'], 'Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since'); }); }); t.once('end', () => { httpServer.close(); }); }); test('CORS set to true', (t) => { t.plan(4); const httpServer = http.createServer( server({ root, CORS: true, autoIndex: true, defaultExt: 'html', }) ); httpServer.listen(() => { const port = httpServer.address().port; const uri = `http://localhost:${port}/subdir/index.html`; request.get({ uri }, (err, res) => { t.ifError(err); t.equal(res.statusCode, 200); t.equal(res.headers['access-control-allow-origin'], '*'); t.equal(res.headers['access-control-allow-headers'], 'Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since'); }); }); t.once('end', () => { httpServer.close(); }); }); http-party-http-server-af0ac3e/test/custom-content-type-file-secret.test.js000066400000000000000000000015011424550403000273010ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const http = require('http'); const request = require('request'); const ecstatic = require('../lib/core'); test('custom contentType via .types file', (t) => { let server = null; try { server = http.createServer(ecstatic({ root: `${__dirname}/public/`, mimetypes: `${__dirname}/fixtures/custom_mime_type.types`, })); } catch (e) { t.fail(e.message); t.end(); } t.plan(3); server.listen(0, () => { const port = server.address().port; request.get(`http://localhost:${port}/custom_mime_type.opml`, (err, res) => { t.ifError(err); t.equal(res.statusCode, 200, 'custom_mime_type.opml should be found'); t.equal(res.headers['content-type'], 'application/secret'); server.close(() => { t.end(); }); }); }); }); http-party-http-server-af0ac3e/test/custom-content-type-file.test.js000066400000000000000000000021231424550403000260170ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const http = require('http'); const request = require('request'); const ecstatic = require('../lib/core'); function setup(opts) { return http.createServer(ecstatic(opts)); } test('throws when custom contentType .types file does not exist', (t) => { t.plan(1); t.throws( setup.bind(null, { root: `${__dirname}/public/`, mimeTypes: 'this_file_does_not_exist.types', }) ); }); test('custom contentType via .types file', (t) => { let server = null; try { server = setup({ root: `${__dirname}/public`, 'mime-types': `${__dirname}/public/custom_mime_type.types`, }); } catch (e) { t.fail(e.message); t.end(); } t.plan(3); server.listen(0, () => { const port = server.address().port; request.get(`http://localhost:${port}/custom_mime_type.opml`, (err, res) => { t.ifError(err); t.equal(res.statusCode, 200, 'custom_mime_type.opml should be found'); t.equal(res.headers['content-type'], 'application/foo'); server.close(() => { t.end(); }); }); }); }); http-party-http-server-af0ac3e/test/custom-content-type.test.js000066400000000000000000000014551424550403000251110ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const http = require('http'); const request = require('request'); const ecstatic = require('../lib/core'); test('custom contentType', (t) => { let server = null; try { server = http.createServer(ecstatic({ root: `${__dirname}/public/`, mimetype: { 'application/jon': ['opml'], }, })); } catch (e) { t.fail(e.message); t.end(); } t.plan(3); server.listen(0, () => { const port = server.address().port; request.get(`http://localhost:${port}/custom_mime_type.opml`, (err, res) => { t.ifError(err); t.equal(res.statusCode, 200, 'custom_mime_type.opml should be found'); t.equal(res.headers['content-type'], 'application/jon'); server.close(() => { t.end(); }); }); }); }); http-party-http-server-af0ac3e/test/default-default-ext.test.js000066400000000000000000000011331424550403000250050ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const ecstatic = require('../lib/core'); const http = require('http'); const request = require('request'); const eol = require('eol'); test('default defaultExt', (t) => { t.plan(3); const server = http.createServer(ecstatic(`${__dirname}/public/subdir`)); server.listen(0, () => { const port = server.address().port; request.get(`http://localhost:${port}`, (err, res, body) => { t.ifError(err); t.equal(res.statusCode, 200); t.equal(eol.lf(body), 'index!!!\n'); server.close(() => { t.end(); }); }); }); }); http-party-http-server-af0ac3e/test/enotdir.test.js000066400000000000000000000011331424550403000226050ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const ecstatic = require('../lib/core'); const http = require('http'); const request = require('request'); test('should handle ENOTDIR as 404', (t) => { t.plan(3); const server = http.createServer(ecstatic(`${__dirname}/public/subdir`)); t.on('end', () => { server.close(); }); server.listen(0, () => { const port = server.address().port; request.get(`http://localhost:${port}/index.html/hello`, (err, res, body) => { t.ifError(err); t.equal(res.statusCode, 404); t.equal(body, 'File not found. :('); }); }); }); http-party-http-server-af0ac3e/test/escaping.test.js000066400000000000000000000011561424550403000227370ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const ecstatic = require('../lib/core'); const http = require('http'); const request = require('request'); const eol = require('eol'); test('escaping special characters', (t) => { const server = http.createServer(ecstatic(`${__dirname}/public`)); server.listen(0, () => { const port = server.address().port; request.get(`http://localhost:${port}/curimit%40gmail.com%20(40%25)`, (err, res, body) => { t.ifError(err); t.equal(res.statusCode, 200); t.equal(eol.lf(body), 'index!!!\n'); server.close(() => { t.end(); }); }); }); }); http-party-http-server-af0ac3e/test/express-error.test.js000066400000000000000000000035171424550403000237710ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const ecstatic = require('../lib/core'); const http = require('http'); const express = require('express'); const request = require('request'); const path = require('path'); const root = `${__dirname}/public`; const baseDir = 'base'; require('fs').mkdirSync(`${root}/emptyDir`, {recursive: true}); const cases = require('./fixtures/common-cases-error'); test('express', (t) => { require('portfinder').getPort((err, port) => { const filenames = Object.keys(cases); const app = express(); app.use(ecstatic({ root, gzip: true, baseDir, autoIndex: true, showDir: true, cache: 'no-cache', handleError: false, })); const server = http.createServer(app); server.listen(port, () => { let pending = filenames.length; filenames.forEach((file) => { const uri = `http://localhost:${port}${path.join('/', baseDir, file)}`; const headers = cases[file].headers || {}; request.get({ uri, followRedirect: false, headers, }, (err, res, body) => { if (err) t.fail(err); const r = cases[file]; t.equal(res.statusCode, r.code, `status code for \`${file}\``); if (r.code === 200) { t.equal(res.headers['cache-control'], 'no-cache', `cache control for \`${file}\``); } if (r.type !== undefined) { t.equal( res.headers['content-type'].split(';')[0], r.type, `content-type for \`${file}\`` ); } if (r.body !== undefined) { t.equal(body, r.body, `body for \`${file}\``); } pending -= 1; if (pending === 0) { server.close(); t.end(); } }); }); }); }); }); http-party-http-server-af0ac3e/test/express.test.js000066400000000000000000000036071424550403000226420ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const ecstatic = require('../lib/core'); const http = require('http'); const express = require('express'); const request = require('request'); const path = require('path'); const eol = require('eol'); const root = `${__dirname}/public`; const baseDir = 'base'; require('fs').mkdirSync(`${root}/emptyDir`, {recursive: true}); const cases = require('./fixtures/common-cases'); test('express', (t) => { require('portfinder').getPort((err, port) => { const filenames = Object.keys(cases); const app = express(); app.use(ecstatic({ root, gzip: true, baseDir, autoIndex: true, showDir: true, defaultExt: 'html', cache: 'no-cache', handleError: true, })); const server = http.createServer(app); server.listen(port, () => { let pending = filenames.length; filenames.forEach((file) => { const uri = `http://localhost:${port}${path.join('/', baseDir, file)}`; const headers = cases[file].headers || {}; request.get({ uri, followRedirect: false, headers, }, (err, res, body) => { if (err) t.fail(err); const r = cases[file]; t.equal(res.statusCode, r.code, `status code for \`${file}\``); if (r.code === 200) { t.equal(res.headers['cache-control'], 'no-cache', `cache control for \`${file}\``); } if (r.type !== undefined) { t.equal( res.headers['content-type'].split(';')[0], r.type, `content-type for \`${file}\`` ); } if (r.body !== undefined) { t.equal(eol.lf(body), r.body, `body for \`${file}\``); } pending -= 1; if (pending === 0) { server.close(); t.end(); } }); }); }); }); }); http-party-http-server-af0ac3e/test/fixtures/000077500000000000000000000000001424550403000215005ustar00rootroot00000000000000http-party-http-server-af0ac3e/test/fixtures/common-cases-error.js000066400000000000000000000003551424550403000255540ustar00rootroot00000000000000'use strict'; module.exports = { 404: { code: 200, }, 'something non-existant': { code: 404, }, }; if (require.main === module) { /* eslint-disable no-console */ console.log('ok 1 - test cases (error) included'); } http-party-http-server-af0ac3e/test/fixtures/common-cases.js000077500000000000000000000075041424550403000244330ustar00rootroot00000000000000'use strict'; const fs = require('fs'); const path = require('path'); const eol = require('eol'); module.exports = { 'a.txt': { code: 200, type: 'text/plain', body: 'A!!!\n', }, 'b.txt': { code: 200, type: 'text/plain', body: 'B!!!\n', }, 'c.js': { code: 200, type: 'application/javascript', body: 'console.log(\'C!!!\');\n', }, 'd.js': { code: 200, type: 'application/javascript', body: 'd.js\n', }, 'e.js': { code: 200, type: 'application/javascript', body: 'console.log(\'π!!!\');\n', }, 'subdir/e.html': { code: 200, type: 'text/html', body: 'e!!\n', }, // test for defaultExt 'subdir/e?foo=bar': { code: 200, type: 'text/html', body: 'e!!\n', }, // test for defaultExt with noisy query param 'subdir/e?foo=bar.ext': { code: 200, type: 'text/html', body: 'e!!\n', }, 'subdir/index.html': { code: 200, type: 'text/html', body: 'index!!!\n', }, subdir: { code: 302, location: 'subdir/', }, 'subdir?foo=bar': { code: 302, location: 'subdir/?foo=bar', }, // test for url-encoded paths '%E4%B8%AD%E6%96%87': { // '/中文' code: 302, location: '%E4%B8%AD%E6%96%87/', }, '%E4%B8%AD%E6%96%87?%E5%A4%AB=%E5%B7%B4': { // '中文?夫=巴' code: 302, location: '%E4%B8%AD%E6%96%87/?%E5%A4%AB=%E5%B7%B4', }, 'subdir/': { code: 200, type: 'text/html', body: 'index!!!\n', }, 404: { code: 200, type: 'text/html', body: '

404

\n', }, 'something-non-existant': { code: 404, type: 'text/html', body: '

404

\n', }, 'compress/foo.js': { code: 200, file: 'compress/foo.js.gz', headers: { 'accept-encoding': 'compress, gzip' }, body: fs.readFileSync(path.join(__dirname, '../', 'public', 'compress', 'foo.js.gz'), 'utf8'), }, // no accept-encoding of gzip, so serve regular file 'compress/foo_2.js': { code: 200, file: 'compress/foo_2.js', }, 'emptyDir/': { code: 404, body: '

404

\n', }, 'subdir_with space': { code: 302, location: 'subdir_with%20space/', }, 'subdir_with space/index.html': { code: 200, type: 'text/html', body: 'index :)\n', }, 'containsSymlink/': { code: 404, body: '

404

\n', }, 'gzip/': { code: 200, headers: { 'accept-encoding': 'compress, gzip' }, type: 'text/html', body: fs.readFileSync(path.join(__dirname, '../', 'public', 'gzip', 'index.html.gz'), 'utf8'), }, 'gzip/a': { code: 404, headers: { 'accept-encoding': 'compress, gzip' }, type: 'text/html', body: eol.lf(fs.readFileSync(path.join(__dirname, '../', 'public', '404.html.gz'), 'utf8')), }, 'gzip/real_ecstatic': { code: 200, file: 'gzip/real_ecstatic', headers: { 'accept-encoding': 'compress, gzip' }, type: 'application/octet-stream', body: fs.readFileSync(path.join(__dirname, '../', 'public', 'gzip', 'real_ecstatic.gz'), 'utf8'), }, 'gzip/real_ecstatic.gz': { code: 200, file: 'gzip/real_ecstatic.gz', headers: { 'accept-encoding': 'compress, gzip' }, type: 'application/gzip', body: fs.readFileSync(path.join(__dirname, '../', 'public', 'gzip', 'real_ecstatic.gz'), 'utf8'), }, 'gzip/fake_ecstatic': { code: 200, file: 'gzip/fake_ecstatic', type: 'application/octet-stream', headers: { 'accept-encoding': 'compress, gzip' }, body: 'ecstatic\n', }, 'gzip/fake_ecstatic.gz': { code: 200, file: 'gzip/fake_ecstatic.gz', type: 'application/gzip', headers: { 'accept-encoding': 'compress, gzip' }, body: fs.readFileSync(path.join(__dirname, '../', 'public', 'gzip', 'fake_ecstatic.gz'), 'utf8'), }, }; if (require.main === module) { /* eslint-disable no-console */ console.log('ok 1 - test cases included'); } http-party-http-server-af0ac3e/test/fixtures/custom_mime_type.types000066400000000000000000000003261424550403000261510ustar00rootroot00000000000000# This file is an example of the Apache .types file format for describing mime-types. # Other example: http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types application/secret opml http-party-http-server-af0ac3e/test/fixtures/https/000077500000000000000000000000001424550403000226425ustar00rootroot00000000000000http-party-http-server-af0ac3e/test/fixtures/https/agent2-cert.pem000066400000000000000000000027251424550403000254660ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIEIDCCAggCCQChRDh/XiBF+zANBgkqhkiG9w0BAQsFADBUMQswCQYDVQQGEwJ1 czETMBEGA1UECAwKV2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEeMBwGA1UE AwwVRHVtbXkgSW50ZXJtZWRpYXRlIENBMB4XDTE4MDYyMjIwMzEwNFoXDTMyMDIy OTIwMzEwNFowUDELMAkGA1UEBhMCdXMxEzARBgNVBAgMCldhc2hpbmd0b24xEDAO BgNVBAcMB1NlYXR0bGUxGjAYBgNVBAMMEWR1bW15LmV4YW1wbGUuY29tMIIBIjAN BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvSQq3d8AeZMTvtqZ13jWCckikyXJ SACvkGCQUCJqOceESbg6IHdRzQdoccE4P3sbvNsf9BlbdJKM+neCxabqKaU1PPje 4P0tHT57t6yJrMuUh9NxEz3Bgh1srNHVS7saKvwHmcKm79jc+wxlioPmEQvQagjn y7oTkyLt0sn4LGxBjrcv2JoHOC9f1pxX7l47MaiN0/ctRau7Nr3PFn+pkB4Yf6Z0 VyicVJbaUSz39Qo4HQWl1L2hiBP3CS1oKs2Yk0O1aOCMExWrhZQan+ZgHqL1rhgm kPpw2/zwwPt5Vf9CSakvHwg198EXuTTXtkzYduuIJAm8yp969iEIiG2xTwIDAQAB MA0GCSqGSIb3DQEBCwUAA4ICAQBnMSIo+kujkeXPh+iErFBmNtu/7EA+i/QnFPbN lSLngclYYBJAGQI+DhirJI8ghDi6vmlHB2THewDaOJXEKvC1czE8064wioIcA9HJ l3QJ3YYOFRctYdSHBU4TWdJbPgkLWDzYP5smjOfw8nDdr4WO/5jh9qRFcFpTFmQf DyU3xgWLsQnNK3qXLdJjWG75pEhHR+7TGo+Ob/RUho/1RX/P89Ux7/oVbzdKqqFu SErXAsjEIEFzWOM2uDOt6hrxDF6q+8/zudwQNEo422poEcTT9tDEFxMQ391CzZRi nozBm4igRn1f5S3YZzLI6VEUns0s76BNy2CzvFWn40DziTqNBExAMfFFj76wiMsX 6fTIdcvkaTBa0S9SZB0vN99qahBdcG17rt4RssMHVRH1Wn7NXMwe476L0yXZ6gO7 Z4uNAPxgaI3BRP75EPfslLutCLZ+BC4Zzu6MY0Salbpfl0Go462EhsKCxvYhE2Dg T477pICLfETZfA499Fd1tOaIsoLCrILAia/+Yd76uf94MuXUIqykDng/4H7xCc47 BZhNFJiPC6XHaXzN7NYSEUNX9VOwY8ncxKwtP6TXga96PdMUy/p98KIM8RZlDoxB Xy9dcZBFNn/zrqjW7R0CCWCUriDIFSmEP0wDZ91YYa6BVuJMb5uL/USkTLpjZS4/ HNGvug== -----END CERTIFICATE----- http-party-http-server-af0ac3e/test/fixtures/https/agent2-key.pem000066400000000000000000000032171424550403000253160ustar00rootroot00000000000000-----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEAvSQq3d8AeZMTvtqZ13jWCckikyXJSACvkGCQUCJqOceESbg6 IHdRzQdoccE4P3sbvNsf9BlbdJKM+neCxabqKaU1PPje4P0tHT57t6yJrMuUh9Nx Ez3Bgh1srNHVS7saKvwHmcKm79jc+wxlioPmEQvQagjny7oTkyLt0sn4LGxBjrcv 2JoHOC9f1pxX7l47MaiN0/ctRau7Nr3PFn+pkB4Yf6Z0VyicVJbaUSz39Qo4HQWl 1L2hiBP3CS1oKs2Yk0O1aOCMExWrhZQan+ZgHqL1rhgmkPpw2/zwwPt5Vf9CSakv Hwg198EXuTTXtkzYduuIJAm8yp969iEIiG2xTwIDAQABAoIBAGPIw/C/qJF7HYyv 6T+7GTiaa2o0IiehbP3/Y8NTFLWc49a8obXlHTvMr7Zr2I/tE+ojtIzkH9K1SjkN eelqsNj9tsOPDI6oIvftsflpxkxqLtclnt8m0oMhoObf4OaONDT/N8dP4SBiSdsM ZDmacnMFx5NZVWiup4sVf2CYexx7qks9FhyN2K5PArCQ4S9LHjFhSJVH4DSEpv7E Ykbp30rhpqV7wSwjgUsm8ZYvI2NOlmffzLSiPdt3vy2K5Q25S/MVEAicg83rfDgK 6EluHjeygRI1xU6DJ0hU7tnU7zE9KURoHPUycO3BKzZnzUH26AA36I58Pu4fXWw/ Cgmbv2ECgYEA+og9E4ziKCEi3p8gqjIfwTRgWZxDLjEzooB/K0UhEearn/xiX29A FiSzEHKfCB4uSrw5OENg2ckDs8uy08Qmxx7xFXL7AtufAl5fIYaWa0sNSqCaIk7p ebbUmPcaYhKiLzIEd1EYEL38sXVZ62wvSVMRSWvEMq44g1qnoRlDa/8CgYEAwUTt talYNwVmR9ZdkVEWm9ZxirdzoM6NaM6u4Tf34ygptpapdmIFSUhfq4iOiEnRGNg/ tuNqhNCIb3LNpJbhRPEzqN7E7qiF/mp7AcJgbuxLZBm12QuLuJdG3nrisKPFXcY1 lA4A7CFmNgH3E4THFfgwzyDXsBOxVLXleTqn+rECgYEA9up1P6J3dtOJuV2d5P/3 ugRz/X173LfTSxJXw36jZDAy8D/feG19/RT4gnplcKvGNhQiVOhbOOnbw0U8n2fQ TCmbs+cZqyxnH/+AxNsPvvk+RVHZ93xMsY/XIldP4l65B8jFDA+Zp06IESI2mEeM pzi+bd1Phh+dRSCA2865W2MCgYEAlxYsgmQ1WyX0dFpHYU+zzfXRYzDQyrhOYc2Z duVK+yCto1iad7pfCY/zgmRJkI+sT7DV9kJIRjXDQuTLkEyHJF8vFGe6KhxCS8aw DIsI2g4NTd6vg1J8UryoIUqNpqsQoqNNxUVBQVdG0ReuMGsPO8R/W50AIFz0txVP o/rP0LECgYEA7e/mOwCnR+ovmS/CAksmos3oIqvkRkXNKpKe513FVmp3TpTU38ex cBkFNU3hEO31FyrX1hGIKp3N5mHYSQ1lyODHM6teHW0OLWWTwIe8rIGvR2jfRLe0 bbkdj40atYVkfeFmpz9uHHG24CUYxJdPc360jbXTVp4i3q8zqgL5aMY= -----END RSA PRIVATE KEY----- http-party-http-server-af0ac3e/test/fixtures/root/000077500000000000000000000000001424550403000224635ustar00rootroot00000000000000http-party-http-server-af0ac3e/test/fixtures/root/canYouSeeMe000066400000000000000000000000431424550403000245600ustar00rootroot00000000000000I bet you can. I'm in your index. http-party-http-server-af0ac3e/test/fixtures/root/compression/000077500000000000000000000000001424550403000250245ustar00rootroot00000000000000http-party-http-server-af0ac3e/test/fixtures/root/compression/index.html000066400000000000000000000000241424550403000270150ustar00rootroot00000000000000I'm not compressed! http-party-http-server-af0ac3e/test/fixtures/root/compression/index.html.br000066400000000000000000000000361424550403000274220ustar00rootroot00000000000000 �im brotli compressed!!  http-party-http-server-af0ac3e/test/fixtures/root/compression/index.html.gz000066400000000000000000000000641424550403000274400ustar00rootroot00000000000000\index.htmlTUH,PH-(J-.NMQbhttp-party-http-server-af0ac3e/test/fixtures/root/file000066400000000000000000000000311424550403000233170ustar00rootroot00000000000000hello, I know nodejitsu http-party-http-server-af0ac3e/test/fixtures/root/htmlButNot000066400000000000000000000001011424550403000244760ustar00rootroot00000000000000

I am HTML?

yeah i guess
http-party-http-server-af0ac3e/test/headers.test.js000066400000000000000000000032211424550403000225540ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const ecstatic = require('../lib/core'); const http = require('http'); const checkHeaders = require('./check-headers.js'); const root = `${__dirname}/public`; test('headers object', (t) => { t.plan(4); const server = http.createServer( ecstatic({ root, headers: { Wow: 'sweet', Cool: 'beans', }, autoIndex: true, defaultExt: 'html', }) ); checkHeaders(t, server, 'subdir', (t, headers) => { t.equal(headers.wow, 'sweet'); t.equal(headers.cool, 'beans'); }); }); test('header string', (t) => { t.plan(3); const server = http.createServer( ecstatic({ root, header: 'beep: boop', // for command-line --header 'beep: boop' autoIndex: true, defaultExt: 'html', }) ); checkHeaders(t, server, 'subdir', (t, headers) => { t.equal(headers.beep, 'boop'); }); }); test('header array', (t) => { t.plan(3); const server = http.createServer( ecstatic({ root, header: [ 'beep: boop', // --header 'beep: boop' 'what: ever', // --header 'what: ever' ], autoIndex: true, defaultExt: 'html', }) ); checkHeaders(t, server, 'subdir', (t, headers) => { t.equal(headers.beep, 'boop'); }); }); test('H array', (t) => { t.plan(3); const server = http.createServer( ecstatic({ root, H: [ 'beep: boop', // -H 'beep: boop' 'what: ever', // -H 'what: ever' ], autoIndex: true, defaultExt: 'html', }) ); checkHeaders(t, server, 'subdir', (t, headers) => { t.equal(headers.beep, 'boop'); }); }); http-party-http-server-af0ac3e/test/illegal-access-date.test.js000066400000000000000000000012471424550403000247320ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const ecstatic = require('../lib/core'); const http = require('http'); const path = require('path'); const request = require('request'); test('if-modified-since illegal access date', (t) => { const dir = path.join(__dirname, 'public'); const server = http.createServer(ecstatic(dir)); t.plan(2); server.listen(0, () => { const opts = { url: `http://localhost:${server.address().port}/a.txt`, headers: { 'if-modified-since': '275760-09-24' }, }; request.get(opts, (err, res) => { t.ifError(err); t.equal(res.statusCode, 200); server.close(() => { t.end(); }); }); }); }); http-party-http-server-af0ac3e/test/main.test.js000066400000000000000000000251421424550403000220730ustar00rootroot00000000000000const test = require('tap').test; const path = require('path'); const fs = require('fs'); const request = require('request'); const httpServer = require('../lib/http-server'); const promisify = require('util').promisify; const requestAsync = promisify(request); const fsReadFile = promisify(fs.readFile); // Prevent errors from being swallowed process.on('uncaughtException', console.error); const root = path.join(__dirname, 'fixtures', 'root'); // Tests are grouped into those which can run together. The groups are given // their own port to run on and live inside a Promise. Tests are done when all // Promise test groups complete. test('http-server main', (t) => { Promise.all([ new Promise((resolve) => { const server = httpServer.createServer({ root, robots: true, headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true' }, cors: true, corsHeaders: 'X-Test', ext: true, brotli: true, gzip: true }); server.listen(8080, async () => { try { // Since none of these depend on anything not already declared, they // can run on the event loop at their own leisure await Promise.all([ // request file from root requestAsync("http://localhost:8080/file").then(async (res) => { // files should be served from the root t.equal(res.statusCode, 200); const fileData = await fsReadFile(path.join(root, 'file'), 'utf8'); t.equal(res.body.trim(), fileData.trim(), 'root file content matches'); }).catch(err => t.fail(err.toString())), // Request non-existent file requestAsync("http://localhost:8080/404").then(res => { t.ok(res); t.equal(res.statusCode, 404); }).catch(err => t.fail(err.toString())), // Request root requestAsync("http://localhost:8080/").then(res => { t.ok(res); t.equal(res.statusCode, 200); t.includes(res.body, './file'); t.includes(res.body, './canYouSeeMe'); // Custom headers t.equal(res.headers['access-control-allow-origin'], '*'); t.equal(res.headers['access-control-allow-credentials'], 'true'); }).catch(err => t.fail(err.toString())), // Get robots requestAsync("http://localhost:8080/robots.txt").then(res => { t.equal(res.statusCode, 200); }).catch(err => t.fail(err.toString())), // CORS time requestAsync({ uri: 'http://localhost:8080', method: 'OPTIONS', headers: { 'Access-Control-Request-Method': 'GET', Origin: 'http://example.com', 'Access-Control-Request-Headers': 'Foobar' } }).then(res => { t.equal(res.statusCode, 204); t.ok( res.headers['access-control-allow-headers'] .split(/\s*,\s*/g) .indexOf('X-Test') >= 0, 204); }).catch(err => t.fail(err.toString())), t.test( "Regression: don't crash on control characters in query strings", {}, (t) => { requestAsync({ uri: encodeURI('http://localhost:8080/file?\x0cfoo'), }).then(res => { t.equal(res.statusCode, 200); }).catch(err => t.fail(err.toString())) .finally(() => t.end()); } ), // Light compression testing. Heavier compression tests exist in // compression.test.js requestAsync({ uri: 'http://localhost:8080/compression/', headers: { 'accept-encoding': 'gzip' } }).then(res => { t.equal(res.statusCode, 200); t.equal(res.headers['content-encoding'], 'gzip'); }).catch(err => t.fail(err.toString())), requestAsync({ uri: 'http://localhost:8080/compression/', headers: { 'accept-encoding': 'gzip, br' } }).then(res => { t.equal(res.statusCode, 200); t.equal(res.headers['content-encoding'], 'br'); }).catch(err => t.fail(err.toString())), requestAsync("http://localhost:8080/htmlButNot").then(res => { t.equal(res.statusCode, 200); t.match(res.headers['content-type'], /^text\/html/); }).catch(err => t.fail(err.toString())) ]); // Another server proxies 8081 to 8080 const proxyServer = httpServer.createServer({ proxy: "http://localhost:8080", root: path.join(__dirname, 'fixtures') }); await new Promise((resolve) => { proxyServer.listen(8081, async () => { try { // Serve files from proxy root await requestAsync("http://localhost:8081/root/file").then(async (res) => { t.ok(res); t.equal(res.statusCode, 200); // File content matches const fileData = await fsReadFile(path.join(root, 'file'), 'utf8'); t.equal(res.body.trim(), fileData.trim(), 'proxied root file content matches'); }).catch(err => t.fail(err.toString())); // Proxy fallback await requestAsync("http://localhost:8081/file").then(async (res) => { t.ok(res); t.equal(res.statusCode, 200); // File content matches const fileData = await fsReadFile(path.join(root, 'file'), 'utf8'); t.equal(res.body.trim(), fileData.trim(), 'proxy fallback root file content matches'); }).catch(err => t.fail(err.toString())); } catch (err) { t.fail(err.toString()); } finally { proxyServer.close(); resolve(); } }); }); } catch (err) { t.fail(err.toString()); } finally { server.close(); resolve(); } }); }), new Promise((resolve) => { const server = httpServer.createServer({ root, username: 'correct_username', password: 'correct_password' }); server.listen(8082, async () => { try { await Promise.all([ // Bad request with no auth requestAsync("http://localhost:8082/file").then((res) => { t.equal(res.statusCode, 401); t.equal(res.body, 'Access denied', 'Bad auth returns expected body'); }).catch(err => t.fail(err.toString())), // bad user requestAsync("http://localhost:8082/file", { auth: { user: 'wrong_username', pass: 'correct_password' } }).then((res) => { t.equal(res.statusCode, 401); t.equal(res.body, 'Access denied', 'Bad auth returns expected body'); }).catch(err => t.fail(err.toString())), // bad password requestAsync("http://localhost:8082/file", { auth: { user: 'correct_username', pass: 'wrong_password' } }).then((res) => { t.equal(res.statusCode, 401); t.equal(res.body, 'Access denied', 'Bad auth returns expected body'); }).catch(err => t.fail(err.toString())), // nonexistant file, and bad auth requestAsync("http://localhost:8082/404", { auth: { user: 'correct_username', pass: 'wrong_password' } }).then((res) => { t.equal(res.statusCode, 401); t.equal(res.body, 'Access denied', 'Bad auth returns expected body'); }).catch(err => t.fail(err.toString())), // good path, good auth requestAsync("http://localhost:8082/file", { auth: { user: 'correct_username', pass: 'correct_password' } }).then(async (res) => { t.equal(res.statusCode, 200); const fileData = await fsReadFile(path.join(root, 'file'), 'utf8'); t.equal(res.body.trim(), fileData.trim(), 'auth-protected file with good auth has expected file content'); }).catch(err => t.fail(err.toString())), ]); } catch (err) { t.fail(err.toString()); } finally { server.close(); resolve(); } }); }), new Promise((resolve) => { const server = httpServer.createServer({ root, username: 'correct_username', password: 123456 }); server.listen(8083, async () => { try { await Promise.all([ // regression test requestAsync("http://localhost:8083/file").then(res => { t.equal(res.statusCode, 401); t.equal(res.body, 'Access denied', 'Bad auth returns expected body'); }).catch(err => t.fail(err.toString())), // regression test, bad username requestAsync("http://localhost:8083/file", { auth: { user: 'wrong_username', pass: '123456' } }).then(res => { t.equal(res.statusCode, 401); t.equal(res.body, 'Access denied', 'Bad auth returns expected body'); }).catch(err => t.fail(err.toString())), // regression test, correct auth, even though the password is a // different type. requestAsync("http://localhost:8083/file", { auth: { user: 'correct_username', pass: '123456' } }).then(async (res) => { t.equal(res.statusCode, 200); const fileData = await fsReadFile(path.join(root, 'file'), 'utf8'); t.equal(res.body.trim(), fileData.trim(), 'numeric auth with good auth has expected file content'); }).catch(err => t.fail(err.toString())) ]); } catch (err) { t.fail(err.toString()); } finally { server.close(); resolve(); } }); }), ]).then(() => t.end()) .catch(err => { t.fail(err.toString()); t.end(); }); }); http-party-http-server-af0ac3e/test/malformed-dir.test.js000066400000000000000000000007761424550403000236770ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const ecstatic = require('../lib/core'); const http = require('http'); const request = require('request'); test('malformed showdir uri', (t) => { const server = http.createServer(ecstatic(__dirname, { showDir: true })); t.plan(2); server.listen(0, () => { request.get(`http://localhost:${server.address().port}/?%`, (err, res) => { t.ifError(err); t.equal(res.statusCode, 400); server.close(() => { t.end(); }); }); }); }); http-party-http-server-af0ac3e/test/malformed.test.js000066400000000000000000000007431424550403000231150ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const ecstatic = require('../lib/core'); const http = require('http'); const request = require('request'); test('malformed uri', (t) => { const server = http.createServer(ecstatic(__dirname)); t.plan(2); server.listen(0, () => { request.get(`http://localhost:${server.address().port}/%`, (err, res) => { t.ifError(err); t.equal(res.statusCode, 400); server.close(() => { t.end(); }); }); }); }); http-party-http-server-af0ac3e/test/mime.test.js000066400000000000000000000021551424550403000220750ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const mime = require('mime'); test('mime package lookup', (t) => { t.plan(7); t.equal(mime.lookup('/path/to/file.css'), 'text/css'); t.equal(mime.lookup('/path/to/file.js'), 'application/javascript'); t.equal(mime.lookup('/path/to/file.mjs'), 'application/javascript'); t.equal(mime.lookup('/path/to/file.txt'), 'text/plain'); t.equal(mime.lookup('file.txt'), 'text/plain'); t.equal(mime.lookup('.TXT'), 'text/plain'); t.equal(mime.lookup('htm'), 'text/html'); t.end(); }); test('custom definition of mime-type with the mime package', (t) => { t.plan(1); mime.define({ 'application/xml': ['opml'], }); t.equal(mime.lookup('.opml'), 'application/xml'); t.end(); }); test('custom definition of mime-type with a .types file', (t) => { t.plan(2); try { mime.load('test/public/custom_mime_type.types'); } catch (e) { t.fail(e.message); t.end(); } t.equal(mime.lookup('.opml'), 'application/foo'); // see public/custom_mime_type.types t.throws(mime.load.bind(mime, 'public/this_file_does_not_exist.types')); t.end(); }); http-party-http-server-af0ac3e/test/pathname-encoding.test.js000066400000000000000000000034451424550403000245320ustar00rootroot00000000000000'use strict'; const tap = require('tap'); const ecstatic = require('../lib/core'); const http = require('http'); const request = require('request'); const path = require('path'); const portfinder = require('portfinder'); const test = tap.test; const root = `${__dirname}/public`; const baseDir = 'base'; if (process.platform === 'win32') { tap.plan(0, 'Windows is allergic to < in path names'); return; } const fs = require('fs'); test('create test directory', (t) => { fs.mkdirSync(`${root}/
`, '0755'); t.end(); }); test('directory listing with pathname including HTML characters', (t) => { portfinder.getPort((err, port) => { const uri = `http://localhost:${port}${path.join('/', baseDir, '/%3Cdir%3E')}`; const server = http.createServer( ecstatic({ root, baseDir, showDir: true, autoIndex: false, }) ); server.listen(port, () => { request.get({ uri, }, (err, res, body) => { t.notMatch(body, //, 'We didn\'t find the unencoded pathname'); t.match(body, /<dir>/, 'We found the encoded pathname'); server.close(); t.end(); }); }); }); }); test('NULL byte in request path does not crash server', (t) => { portfinder.getPort((err, port) => { const uri = `http://localhost:${port}${path.join('/', baseDir, '/%00')}`; const server = http.createServer( ecstatic({ root, baseDir, }) ); try { server.listen(port, () => { request.get({uri}, (err, res, body) => { t.pass('server did not crash') server.close(); t.end(); }); }); } catch (err) { t.fail(err.toString()); } }); }); test('remove test directory', (t) => { fs.rmdirSync(`${root}/`); t.end(); }); http-party-http-server-af0ac3e/test/process-env-port.test.js000066400000000000000000000030171424550403000243720ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const request = require('request'); const spawn = require('child_process').spawn; function getRandomInt(min, max) { return Math.floor((Math.random() * ((max - min) + 1))) + min; } const sanePort = getRandomInt(1025, 65536); const floatingPointPort = 9090.86; const insanePorts = [-1, 65537]; function checkServerIsRunning(url, msg, ps, t) { if (!msg.toString().match(/Starting up/)) { return; } t.pass('http-server was started'); request(url, (err, res) => { if (!err && res.statusCode !== 500) { t.pass('a successful request from the server was made'); } else { t.fail('the server could not be reached'); } ps.kill('SIGTERM'); }); } function startServer(url, port, t) { const ecstatic = spawn(process.execPath, [require.resolve('../bin/http-server')], { env: { PORT: String(port), }, }); if (!insanePorts.includes(port)) { ecstatic.stdout.on('data', (msg) => { checkServerIsRunning(url, msg, ecstatic, t); }); } else { ecstatic.on('exit', (evt) => { t.notEqual(evt.code, 0, 'err:Running on invalid port not allowed'); }); } } test('sane port', (t) => { t.plan(2); startServer(`http://127.0.0.1:${sanePort}`, sanePort, t); }); test('floating point port', (t) => { t.plan(2); startServer('http://127.0.0.1:9090', floatingPointPort, t); }); insanePorts.forEach((port) => { test(`insane port: ${port}`, (t) => { t.plan(1); startServer('http://127.0.0.1:8000', port, t); }); }); http-party-http-server-af0ac3e/test/proxy-options.test.js000066400000000000000000000060361424550403000240220ustar00rootroot00000000000000const test = require('tap').test const path = require('path') const fs = require('fs') const request = require('request') const httpServer = require('../lib/http-server') const promisify = require('util').promisify const requestAsync = promisify(request) const fsReadFile = promisify(fs.readFile) // Prevent errors from being swallowed process.on('uncaughtException', console.error) const root = path.join(__dirname, 'fixtures', 'root') const httpsOpts = { key: path.join(__dirname, 'fixtures', 'https', 'agent2-key.pem'), cert: path.join(__dirname, 'fixtures', 'https', 'agent2-cert.pem') } // Tests are grouped into those which can run together. The groups are given // their own port to run on and live inside a Promise. Tests are done when all // Promise test groups complete. test('proxy options', (t) => { new Promise((resolve) => { const server = httpServer.createServer({ root, robots: true, headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true' }, cors: true, corsHeaders: 'X-Test', ext: true, brotli: true, gzip: true }) // TODO #723 we should use portfinder server.listen(8080, async () => { try { // Another server proxies 8081 to 8080 const proxyServer = httpServer.createServer({ proxy: 'http://localhost:8080', root: path.join(__dirname, 'fixtures'), tls: true, https: httpsOpts, proxyOptions: { secure: false } }) await new Promise((resolve) => { proxyServer.listen(8081, async () => { try { // Serve files from proxy root await requestAsync('https://localhost:8081/root/file', { rejectUnauthorized: false }).then(async (res) => { t.ok(res) t.equal(res.statusCode, 200) // File content matches const fileData = await fsReadFile(path.join(root, 'file'), 'utf8') t.equal(res.body.trim(), fileData.trim(), 'proxied root file content matches') }).catch(err => t.fail(err.toString())) // Proxy fallback await requestAsync('https://localhost:8081/file', { rejectUnauthorized: false }).then(async (res) => { t.ok(res) t.equal(res.statusCode, 200) // File content matches const fileData = await fsReadFile(path.join(root, 'file'), 'utf8') t.equal(res.body.trim(), fileData.trim(), 'proxy fallback root file content matches') }).catch(err => t.fail(err.toString())) } catch (err) { t.fail(err.toString()) } finally { proxyServer.close() resolve() } }) }) } catch (err) { t.fail(err.toString()) } finally { server.close() resolve() } }) }) .then(() => t.end()) .catch(err => { t.fail(err.toString()) t.end() }) }) http-party-http-server-af0ac3e/test/public/000077500000000000000000000000001424550403000211055ustar00rootroot00000000000000http-party-http-server-af0ac3e/test/public/404.html000066400000000000000000000000151424550403000222760ustar00rootroot00000000000000

404

http-party-http-server-af0ac3e/test/public/404.html.gz000066400000000000000000000000501424550403000227140ustar00rootroot00000000000000qh(Y404.html0310\> http-party-http-server-af0ac3e/test/public/a.txt000066400000000000000000000000051424550403000220610ustar00rootroot00000000000000A!!! http-party-http-server-af0ac3e/test/public/another-subdir/000077500000000000000000000000001424550403000240335ustar00rootroot00000000000000http-party-http-server-af0ac3e/test/public/another-subdir/scripts.js000066400000000000000000000000171424550403000260560ustar00rootroot00000000000000var foo = bar; http-party-http-server-af0ac3e/test/public/b.txt000066400000000000000000000000051424550403000220620ustar00rootroot00000000000000B!!! http-party-http-server-af0ac3e/test/public/brotli/000077500000000000000000000000001424550403000224005ustar00rootroot00000000000000http-party-http-server-af0ac3e/test/public/brotli/fake_ecstatic000066400000000000000000000000111424550403000251000ustar00rootroot00000000000000ecstatic http-party-http-server-af0ac3e/test/public/brotli/fake_ecstatic.br000066400000000000000000000000131424550403000255040ustar00rootroot00000000000000ʂhttp-party-http-server-af0ac3e/test/public/brotli/index.html000066400000000000000000000000421424550403000243710ustar00rootroot00000000000000brotli, but I'm not compressed!!! http-party-http-server-af0ac3e/test/public/brotli/index.html.br000066400000000000000000000000311424550403000247710ustar00rootroot00000000000000 brotli, compressed!! http-party-http-server-af0ac3e/test/public/brotli/index.html.gz000066400000000000000000000000621424550403000250120ustar00rootroot00000000000000t[index.htmlT/KUHJMSH,(HMQ7http-party-http-server-af0ac3e/test/public/brotli/not_actually_brotli.br000066400000000000000000000000531424550403000267740ustar00rootroot00000000000000You've been duped! This is not compressed! http-party-http-server-af0ac3e/test/public/brotli/real_ecstatic000066400000000000000000000000111424550403000251150ustar00rootroot00000000000000ecstatic http-party-http-server-af0ac3e/test/public/brotli/real_ecstatic.br000066400000000000000000000000151424550403000255230ustar00rootroot00000000000000 ecstatic http-party-http-server-af0ac3e/test/public/c.js000066400000000000000000000000251424550403000216620ustar00rootroot00000000000000console.log('C!!!'); http-party-http-server-af0ac3e/test/public/charset/000077500000000000000000000000001424550403000225365ustar00rootroot00000000000000http-party-http-server-af0ac3e/test/public/charset/arabic.html000066400000000000000000000012271424550403000246470ustar00rootroot00000000000000 HTML

Kokoro - Natsume Soseki

. . . "". . .

http-party-http-server-af0ac3e/test/public/charset/shift_jis.html000066400000000000000000000011651424550403000254110ustar00rootroot00000000000000 {HTMLt@C

- Ėڟ

@搶Ǝ

͂̐lɐ搶ƌĂłB炱ł搶ƏŖ{͑łȂB͐Ԃ݂鉓ƂA̕ɂƂĎRłB͂̐l̋LĂыNƂɁAu搶vƂȂBMĂS͓łB悻悻Ȃǂ͂ƂĂgCɂȂȂB

http-party-http-server-af0ac3e/test/public/compress/000077500000000000000000000000001424550403000227405ustar00rootroot00000000000000http-party-http-server-af0ac3e/test/public/compress/foo.js000066400000000000000000000000251424550403000240560ustar00rootroot00000000000000exports.foo = "baz"; http-party-http-server-af0ac3e/test/public/compress/foo.js.gz000066400000000000000000000000511424550403000244740ustar00rootroot00000000000000HSK(/*)KWUPJJRꈥ:http-party-http-server-af0ac3e/test/public/compress/foo_2.js000066400000000000000000000000251424550403000242770ustar00rootroot00000000000000exports.foo = "baz"; http-party-http-server-af0ac3e/test/public/curimit@gmail.com (40%)/000077500000000000000000000000001424550403000250425ustar00rootroot00000000000000http-party-http-server-af0ac3e/test/public/curimit@gmail.com (40%)/index.html000066400000000000000000000000111424550403000270270ustar00rootroot00000000000000index!!! http-party-http-server-af0ac3e/test/public/custom_mime_type.opml000066400000000000000000000016251424550403000253640ustar00rootroot00000000000000 Tue 9 May 2006 06:44:27 GMT+00:00 BKN Sat 20 May 2006 00:17:25 GMT+00:00 http-party-http-server-af0ac3e/test/public/custom_mime_type.types000066400000000000000000000003231424550403000255530ustar00rootroot00000000000000# This file is an example of the Apache .types file format for describing mime-types. # Other example: http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types application/foo opml http-party-http-server-af0ac3e/test/public/d.js000066400000000000000000000000051424550403000216610ustar00rootroot00000000000000d.js http-party-http-server-af0ac3e/test/public/e.js000066400000000000000000000000261424550403000216650ustar00rootroot00000000000000console.log('π!!!'); http-party-http-server-af0ac3e/test/public/f_f000066400000000000000000000000041424550403000215540ustar00rootroot00000000000000f!! http-party-http-server-af0ac3e/test/public/gzip/000077500000000000000000000000001424550403000220565ustar00rootroot00000000000000http-party-http-server-af0ac3e/test/public/gzip/fake_ecstatic000066400000000000000000000000111424550403000245560ustar00rootroot00000000000000ecstatic http-party-http-server-af0ac3e/test/public/gzip/fake_ecstatic.gz000066400000000000000000000000001424550403000251730ustar00rootroot00000000000000http-party-http-server-af0ac3e/test/public/gzip/index.html000066400000000000000000000000071424550403000240500ustar00rootroot00000000000000gzip!! http-party-http-server-af0ac3e/test/public/gzip/index.html.gz000066400000000000000000000000451424550403000244710ustar00rootroot000000000000004(Yindex.htmlK,PTKxhttp-party-http-server-af0ac3e/test/public/gzip/real_ecstatic000066400000000000000000000000111424550403000245730ustar00rootroot00000000000000ecstatic http-party-http-server-af0ac3e/test/public/gzip/real_ecstatic.gz000066400000000000000000000000531424550403000252200ustar00rootroot00000000000000 r(Yreal_ecstaticKM..I,LJ http-party-http-server-af0ac3e/test/public/show-dir$$href_encoding$$/000077500000000000000000000000001424550403000255745ustar00rootroot00000000000000http-party-http-server-af0ac3e/test/public/show-dir$$href_encoding$$/aname+aplus.txt000066400000000000000000000002411424550403000305330ustar00rootroot00000000000000It should generate an href of
.. http://stackoverflow.com/a/1006074/147079 http://tools.ietf.org/html/rfc1738 http-party-http-server-af0ac3e/test/public/subdir/000077500000000000000000000000001424550403000223755ustar00rootroot00000000000000http-party-http-server-af0ac3e/test/public/subdir/app.wasm000066400000000000000000000000261424550403000240440ustar00rootroot00000000000000Fake WebAssemble file http-party-http-server-af0ac3e/test/public/subdir/e.html000066400000000000000000000000131424550403000235010ustar00rootroot00000000000000e!! http-party-http-server-af0ac3e/test/public/subdir/index.html000066400000000000000000000000111424550403000243620ustar00rootroot00000000000000index!!! http-party-http-server-af0ac3e/test/public/subdir_with space/000077500000000000000000000000001424550403000245045ustar00rootroot00000000000000http-party-http-server-af0ac3e/test/public/subdir_with space/file_with space.html000066400000000000000000000000221424550403000304120ustar00rootroot00000000000000spacious!! http-party-http-server-af0ac3e/test/public/subdir_with space/index.html000066400000000000000000000000111424550403000264710ustar00rootroot00000000000000index :) http-party-http-server-af0ac3e/test/public/中文/000077500000000000000000000000001424550403000233005ustar00rootroot00000000000000http-party-http-server-af0ac3e/test/public/中文/檔案.html000066400000000000000000000000161424550403000263250ustar00rootroot00000000000000file!! http-party-http-server-af0ac3e/test/range.test.js000066400000000000000000000075121424550403000222440ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const ecstatic = require('../lib/core'); const http = require('http'); const request = require('request'); const eol = require('eol'); test('range', (t) => { t.plan(4); const server = http.createServer(ecstatic(`${__dirname}/public/subdir`)); t.on('end', () => { server.close(); }); server.listen(0, () => { const port = server.address().port; const opts = { uri: `http://localhost:${port}/e.html`, headers: { range: '3-5' }, }; request.get(opts, (err, res, body) => { t.ifError(err); t.equal(res.statusCode, 206, 'partial content status code'); t.equal(body, 'e!!'); t.equal(parseInt(res.headers['content-length'], 10), body.length); }); }); }); test('range past the end', (t) => { t.plan(4); const server = http.createServer(ecstatic(`${__dirname}/public/subdir`)); t.on('end', () => { server.close(); }); server.listen(0, () => { const port = server.address().port; const opts = { uri: `http://localhost:${port}/e.html`, headers: { range: '3-500' }, }; request.get(opts, (err, res, body) => { t.ifError(err); t.equal(res.statusCode, 206, 'partial content status code'); t.equal(eol.lf(body), 'e!!\n'); t.equal(parseInt(res.headers['content-length'], 10), body.length); }); }); }); test('NaN range', (t) => { t.plan(3); const server = http.createServer(ecstatic(`${__dirname}/public/subdir`)); t.on('end', () => { server.close(); }); server.listen(0, () => { const port = server.address().port; const opts = { uri: `http://localhost:${port}/e.html`, headers: { range: 'abc-def' }, }; request.get(opts, (err, res, body) => { t.ifError(err); t.equal(res.statusCode, 416, 'range error status code'); t.equal(body, 'Requested range not satisfiable'); }); }); }); test('flipped range', (t) => { t.plan(3); const server = http.createServer(ecstatic(`${__dirname}/public/subdir`)); t.on('end', () => { server.close(); }); server.listen(0, () => { const port = server.address().port; const opts = { uri: `http://localhost:${port}/e.html`, headers: { range: '333-222' }, }; request.get(opts, (err, res, body) => { t.ifError(err); t.equal(res.statusCode, 416, 'range error status code'); t.equal(body, 'Requested range not satisfiable'); }); }); }); test('partial range', (t) => { // 1 test is platform depedent "res.headers['content-range']" t.plan(5); const server = http.createServer(ecstatic(`${__dirname}/public/subdir`)); t.on('end', () => { server.close(); }); server.listen(0, () => { const port = server.address().port; const opts = { uri: `http://localhost:${port}/e.html`, headers: { range: '3-' }, }; request.get(opts, (err, res, body) => { t.ifError(err); t.equal(res.statusCode, 206, 'partial content status code'); t.equal(eol.lf(body), 'e!!\n'); t.equal(parseInt(res.headers['content-length'], 10), body.length); if (eol.lf(body) != body) { // on Windows, depending on Git settings t.equal(res.headers['content-range'], 'bytes 3-11/12'); } else { t.equal(res.headers['content-range'], 'bytes 3-10/11'); } }); }); }); test('include last-modified, etag and cache-control headers', (t) => { t.plan(4); const server = http.createServer(ecstatic(`${__dirname}/public/subdir`)); t.on('end', () => { server.close(); }); server.listen(0, () => { const port = server.address().port; const opts = { uri: `http://localhost:${port}/e.html`, headers: { range: '3-5' }, }; request.get(opts, (err, res) => { t.ifError(err); t.ok(res.headers['cache-control']); t.ok(res.headers['last-modified']); t.ok(res.headers.etag); }); }); }); http-party-http-server-af0ac3e/test/showdir-href-encoding.test.js000066400000000000000000000015121424550403000253270ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const ecstatic = require('../lib/core'); const http = require('http'); const request = require('request'); const path = require('path'); const root = `${__dirname}/public`; const baseDir = 'base'; test('url encoding in href', (t) => { require('portfinder').getPort((err, port) => { const uri = `http://localhost:${port}${path.join('/', baseDir, 'show-dir%24%24href_encoding%24%24')}`; const server = http.createServer( ecstatic({ root, baseDir, showDir: true, autoIndex: false, }) ); server.listen(port, () => { request.get({ uri, }, (err, res, body) => { t.match(body, /href="\.\/aname%2Baplus.txt"/, 'We found the right href'); server.close(); t.end(); }); }); }); }); http-party-http-server-af0ac3e/test/showdir-search-encoding.test.js000066400000000000000000000016521424550403000256550ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const ecstatic = require('../lib/core'); const http = require('http'); const request = require('request'); const path = require('path'); const root = `${__dirname}/public`; const baseDir = 'base'; test('directory listing with query string specified', (t) => { require('portfinder').getPort((err, port) => { const uri = `http://localhost:${port}${path.join('/', baseDir, '?a=1&b=2')}`; const server = http.createServer( ecstatic({ root, baseDir, showDir: true, autoIndex: false, }) ); server.listen(port, () => { request.get({ uri, }, (err, res, body) => { t.match(body, /href="\.\/subdir\/\?a=1&b=2"/, 'We found the encoded href'); t.notMatch(body, /a=1&b=2/, 'We didn\'t find the unencoded query string value'); server.close(); t.end(); }); }); }); }); http-party-http-server-af0ac3e/test/showdir-with-spaces.test.js000066400000000000000000000015301424550403000250460ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const ecstatic = require('../lib/core'); const http = require('http'); const request = require('request'); const path = require('path'); const root = `${__dirname}/public`; const baseDir = 'base'; test('directory listing when directory name contains spaces', (t) => { require('portfinder').getPort((err, port) => { const uri = `http://localhost:${port}${path.join('/', baseDir, 'subdir_with%20space')}`; const server = http.createServer( ecstatic({ root, baseDir, showDir: true, autoIndex: false, }) ); server.listen(port, () => { request.get({ uri, }, (err, res, body) => { t.ok(/href="\.\/index.html"/.test(body), 'We found the right href'); server.close(); t.end(); }); }); }); }); http-party-http-server-af0ac3e/test/trailing-slash.test.js000066400000000000000000000012671424550403000240720ustar00rootroot00000000000000'use strict'; const test = require('tap').test; const ecstatic = require('../lib/core'); const http = require('http'); const request = require('request'); test('should not add trailing slash when showDir and autoIndex are off', (t) => { t.plan(3); const server = http.createServer( ecstatic({ root: `${__dirname}/public`, autoIndex: false, showDir: false, }) ); t.on('end', () => { server.close(); }); server.listen(0, () => { const port = server.address().port; request.get(`http://localhost:${port}/subdir`, (err, res) => { t.ifError(err); t.equal(res.statusCode, 404); t.equal(res.body, 'File not found. :('); }); }); });