From b2f13984736e077adeaa789606d24e709c286ca1 Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Wed, 6 May 2020 02:46:56 +0000 Subject: [PATCH 01/37] initial commit --- .editorconfig | 13 + .gitignore | 39 + .prettierignore | 4 + .prettierrc | 3 + .vscode/extensions.json | 6 + README.md | 76 ++ apps/.gitkeep | 1 + libs/.gitkeep | 0 nx.json | 22 + package-lock.json | 2480 +++++++++++++++++++++++++++++++++++++ package.json | 40 + tools/schematics/.gitkeep | 0 tools/tsconfig.tools.json | 11 + tsconfig.json | 21 + workspace.json | 63 + 15 files changed, 2779 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 .vscode/extensions.json create mode 100644 README.md create mode 100644 apps/.gitkeep create mode 100644 libs/.gitkeep create mode 100644 nx.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 tools/schematics/.gitkeep create mode 100644 tools/tsconfig.tools.json create mode 100644 tsconfig.json create mode 100644 workspace.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..6e87a003da --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +# Editor configuration, see http://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..ee5c9d8336 --- /dev/null +++ b/.gitignore @@ -0,0 +1,39 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/dist +/tmp +/out-tsc + +# dependencies +/node_modules + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +# misc +/.sass-cache +/connect.lock +/coverage +/libpeerconnection.log +npm-debug.log +yarn-error.log +testem.log +/typings + +# System Files +.DS_Store +Thumbs.db diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000000..d0b804da2a --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ +# Add files here to ignore them from prettier formatting + +/dist +/coverage diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000000..544138be45 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,3 @@ +{ + "singleQuote": true +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000000..37d5544a20 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,6 @@ +{ + "recommendations": [ + "ms-vscode.vscode-typescript-tslint-plugin", + "esbenp.prettier-vscode" + ] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000000..5e54e0a098 --- /dev/null +++ b/README.md @@ -0,0 +1,76 @@ +# RemixProject + +This project was generated using [Nx](https://nx.dev). + +

+ +🔎 **Nx is a set of Extensible Dev Tools for Monorepos.** + +## Adding capabilities to your workspace + +Nx supports many plugins which add capabilities for developing different types of applications and different tools. + +These capabilities include generating applications, libraries, etc as well as the devtools to test, and build projects as well. + +Below are some plugins which you can add to your workspace: + +- [React](https://reactjs.org) + - `npm install --save-dev @nrwl/react` +- Web (no framework frontends) + - `npm install --save-dev @nrwl/web` +- [Angular](https://angular.io) + - `npm install --save-dev @nrwl/angular` +- [Nest](https://nestjs.com) + - `npm install --save-dev @nrwl/nest` +- [Express](https://expressjs.com) + - `npm install --save-dev @nrwl/express` +- [Node](https://nodejs.org) + - `npm install --save-dev @nrwl/node` + +## Generate an application + +Run `nx g @nrwl/react:app my-app` to generate an application. + +> You can use any of the plugins above to generate applications as well. + +When using Nx, you can create multiple applications and libraries in the same workspace. + +## Generate a library + +Run `nx g @nrwl/react:lib my-lib` to generate a library. + +> You can also use any of the plugins above to generate libraries as well. + +Libraries are sharable across libraries and applications. They can be imported from `@remix-project/mylib`. + +## Development server + +Run `nx serve my-app` for a dev server. Navigate to http://localhost:4200/. The app will automatically reload if you change any of the source files. + +## Code scaffolding + +Run `nx g @nrwl/react:component my-component --project=my-app` to generate a new component. + +## Build + +Run `nx build my-app` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build. + +## Running unit tests + +Run `nx test my-app` to execute the unit tests via [Jest](https://jestjs.io). + +Run `nx affected:test` to execute the unit tests affected by a change. + +## Running end-to-end tests + +Run `ng e2e my-app` to execute the end-to-end tests via [Cypress](https://www.cypress.io). + +Run `nx affected:e2e` to execute the end-to-end tests affected by a change. + +## Understand your workspace + +Run `nx dep-graph` to see a diagram of the dependencies of your projects. + +## Further help + +Visit the [Nx Documentation](https://nx.dev) to learn more. diff --git a/apps/.gitkeep b/apps/.gitkeep new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/apps/.gitkeep @@ -0,0 +1 @@ + diff --git a/libs/.gitkeep b/libs/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/nx.json b/nx.json new file mode 100644 index 0000000000..5b0794fc40 --- /dev/null +++ b/nx.json @@ -0,0 +1,22 @@ +{ + "npmScope": "remix-project", + "implicitDependencies": { + "workspace.json": "*", + "package.json": { + "dependencies": "*", + "devDependencies": "*" + }, + "tsconfig.json": "*", + "tslint.json": "*", + "nx.json": "*" + }, + "tasksRunnerOptions": { + "default": { + "runner": "@nrwl/workspace/tasks-runners/default", + "options": { + "cacheableOperations": ["build", "lint", "test", "e2e"] + } + } + }, + "projects": {} +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..9048208946 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2480 @@ +{ + "name": "remix-project", + "version": "0.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@angular-devkit/architect": { + "version": "0.901.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.901.4.tgz", + "integrity": "sha512-w4RMj7eLhUSh70HUy5tW4EXjLQFXk0Lfr9WiSy5gvPGp+zzYxknI+Wn4Xid1wU/WS+4tuMv5nJIaNaH2sABESQ==", + "dev": true, + "requires": { + "@angular-devkit/core": "9.1.4", + "rxjs": "6.5.4" + }, + "dependencies": { + "rxjs": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + } + } + }, + "@angular-devkit/core": { + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-9.1.4.tgz", + "integrity": "sha512-OPFQDmT4XabLMSRDgmnzedlOrc83DzQIgLcfoh/UhZ7aJKf/2Vq4l09p/DkMNI36vN5BRL0zDZt7TjvKNgyYgA==", + "dev": true, + "requires": { + "ajv": "6.12.0", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.5.4", + "source-map": "0.7.3" + }, + "dependencies": { + "rxjs": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + } + } + }, + "@angular-devkit/schematics": { + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-9.1.4.tgz", + "integrity": "sha512-RAbdnUEZ3JTLmWSBiXT5trsVx8Fi72fxN9CiRaluM09Cytg6BUc1wC5XCO0YPvhI400+3Ro1nwjPXezjg7LXzQ==", + "dev": true, + "requires": { + "@angular-devkit/core": "9.1.4", + "ora": "4.0.3", + "rxjs": "6.5.4" + }, + "dependencies": { + "rxjs": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + } + } + }, + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", + "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", + "dev": true + }, + "@babel/highlight": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.9.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@nrwl/cli": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-9.2.4.tgz", + "integrity": "sha512-4OPyS8OnWLqkRmTrh0PdB6mLlk9ViG6D3KwMojoucn1G5WG3qnr0QSjF9mteAJxegwRHvblG1FstuYnGaPkxuQ==", + "dev": true, + "requires": { + "@nrwl/tao": "9.2.4", + "chalk": "2.4.2", + "tmp": "0.0.33", + "yargs": "^11.0.0", + "yargs-parser": "10.0.0" + } + }, + "@nrwl/tao": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-9.2.4.tgz", + "integrity": "sha512-Ia0YvyVITBPM+qs4QWCHBKCYtOQ0hHp/by9W3aCB02B8iI1SpjRwCWebjsAo3/8CnbAps8QlGvOfSdNDGcCuNg==", + "dev": true, + "requires": { + "@angular-devkit/architect": "~0.901.0", + "@angular-devkit/core": "~9.1.0", + "@angular-devkit/schematics": "~9.1.0", + "fast-levenshtein": "2.0.6", + "inquirer": "^6.3.1", + "minimist": "^1.2.0", + "strip-json-comments": "2.0.1" + } + }, + "@nrwl/workspace": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@nrwl/workspace/-/workspace-9.2.4.tgz", + "integrity": "sha512-j3eHYHfBlhivKxvjn5VWtAt8YyrAFFV7FNQaUWoARqnHGME+FBJofUo2f/AxwJEhBbtMFYcSAAiG6AQ0gxvo3g==", + "dev": true, + "requires": { + "@angular-devkit/core": "~9.1.0", + "@angular-devkit/schematics": "~9.1.0", + "@nrwl/cli": "9.2.4", + "axios": "0.19.2", + "chalk": "2.4.2", + "cosmiconfig": "4.0.0", + "fs-extra": "6.0.0", + "hasha": "5.1.0", + "ignore": "5.0.4", + "npm-run-all": "4.1.5", + "opn": "^5.3.0", + "rxjs": "^6.5.4", + "semver": "5.4.1", + "strip-json-comments": "2.0.1", + "tmp": "0.0.33", + "yargs": "^11.0.0", + "yargs-parser": "10.0.0" + } + }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, + "@types/node": { + "version": "8.9.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.9.5.tgz", + "integrity": "sha512-jRHfWsvyMtXdbhnz5CVHxaBgnV6duZnPlQuRSo/dm/GnmikNcmZhxIES4E9OZjUmQ8C+HCl4KJux+cXN/ErGDQ==", + "dev": true + }, + "acorn": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", + "dev": true + }, + "acorn-jsx": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", + "dev": true + }, + "ajv": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", + "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", + "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": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "axios": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "dev": true, + "requires": { + "follow-redirects": "1.5.10" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "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 + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "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" + }, + "dependencies": { + "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" + } + }, + "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 + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "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" + } + } + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.3.0.tgz", + "integrity": "sha512-Xs2Hf2nzrvJMFKimOR7YR0QwZ8fc0u98kdtwN1eNAZzNQgH3vK2pXzff6GJtKh7S5hoJ87ECiAiZFS2fb5Ii2w==", + "dev": true + }, + "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", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "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", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "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" + } + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "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==", + "dev": true, + "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==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "cosmiconfig": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", + "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", + "dev": true, + "requires": { + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0", + "require-from-string": "^2.0.1" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "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" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dotenv": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", + "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "dev": true, + "requires": { + "type-fest": "^0.11.0" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "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 + }, + "inquirer": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", + "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.5.3", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "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 + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + } + } + }, + "strip-json-comments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", + "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", + "dev": true + }, + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true + } + } + }, + "eslint-scope": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "dev": true + }, + "espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.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 + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", + "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.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" + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "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": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "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" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "dev": true, + "requires": { + "debug": "=3.1.0" + } + }, + "fs-extra": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.0.tgz", + "integrity": "sha512-lk2cUCo8QzbiEWEbt7Cw3m27WMiRG321xsssbcIpfMhpRjrlC08WBOVQqj1/nQYYNnPtyIhP1oqLO3QwT2tPCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "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": "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 + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "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" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "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" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.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==", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "hasha": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.1.0.tgz", + "integrity": "sha512-OFPDWmzPN1l7atOV1TgBVmNtBxaIysToK6Ve9DK+vT6pYuklw/nPNT+HJbZi0KDcI6vWB+9tgvZ5YD7fA3CXcA==", + "dev": true, + "requires": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "dependencies": { + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + } + } + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.0.4.tgz", + "integrity": "sha512-WLsTMEhsQuXpCiG173+f3aymI43SXa+fB1rSfbzyP4GkPP+ZFVuO0/3sFUGNBtifisPeDcl/uD/Y2NxZ7xFq4g==", + "dev": true + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "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" + } + }, + "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 + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "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" + } + }, + "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" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "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 + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "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", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "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" + } + }, + "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" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2" + } + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "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 + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "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" + } + }, + "npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "dependencies": { + "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" + } + }, + "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 + } + } + }, + "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", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "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" + } + }, + "ora": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/ora/-/ora-4.0.3.tgz", + "integrity": "sha512-fnDebVFyz309A73cqCipVL1fBZewq4vwgSHfxh43vVy31mbyoQ8sCH3Oeaog/owYOs/lLlGVPCISQonTneg6Pg==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.2.0", + "is-interactive": "^1.0.0", + "log-symbols": "^3.0.0", + "mute-stream": "0.0.8", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "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-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + }, + "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 + }, + "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", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "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-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "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 + }, + "prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "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 + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "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" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "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 + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "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" + } + }, + "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 + }, + "rxjs": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", + "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "dev": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "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" + } + }, + "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 + } + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "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", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "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" + } + } + } + }, + "string.prototype.padend": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz", + "integrity": "sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimleft": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", + "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimstart": "^1.0.0" + } + }, + "string.prototype.trimright": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", + "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimend": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "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 + }, + "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": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "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", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.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", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "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" + } + }, + "ts-node": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", + "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", + "dev": true, + "requires": { + "arrify": "^1.0.0", + "buffer-from": "^1.1.0", + "diff": "^3.1.0", + "make-error": "^1.1.1", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map-support": "^0.5.6", + "yn": "^2.0.0" + } + }, + "tslib": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.2.tgz", + "integrity": "sha512-tTSkux6IGPnUGUd1XAZHcpu85MOkIl5zX49pO+jfsie3eP0B6pyhOlLXm3cAC6T7s+euSDDUUV+Acop5WmtkVg==", + "dev": true + }, + "tslint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.0.0.tgz", + "integrity": "sha512-9nLya8GBtlFmmFMW7oXXwoXS1NkrccqTqAtwXzdPV9e2mqSEvCki6iHL/Fbzi5oqbugshzgGPk7KBb2qNP1DSA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.10.0", + "tsutils": "^2.29.0" + }, + "dependencies": { + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + } + } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "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 + }, + "typescript": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", + "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "v8-compile-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "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" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "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", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "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" + } + }, + "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" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yargs": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.1.tgz", + "integrity": "sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.1.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": "^9.0.2" + }, + "dependencies": { + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.0.0.tgz", + "integrity": "sha512-+DHejWujTVYeMHLff8U96rLc4uE4Emncoftvn5AjhB1Jw1pWxLzgBUT/WYbPrHmy6YPEBTZQx5myHhVcuuu64g==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + }, + "yn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", + "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000000..2ca8d98e8c --- /dev/null +++ b/package.json @@ -0,0 +1,40 @@ +{ + "name": "remix-project", + "version": "0.0.0", + "license": "MIT", + "scripts": { + "nx": "nx", + "start": "nx serve", + "build": "nx build", + "test": "nx test", + "lint": "nx workspace-lint && nx lint", + "e2e": "nx e2e", + "affected:apps": "nx affected:apps", + "affected:libs": "nx affected:libs", + "affected:build": "nx affected:build", + "affected:e2e": "nx affected:e2e", + "affected:test": "nx affected:test", + "affected:lint": "nx affected:lint", + "affected:dep-graph": "nx affected:dep-graph", + "affected": "nx affected", + "format": "nx format:write", + "format:write": "nx format:write", + "format:check": "nx format:check", + "update": "nx migrate latest", + "workspace-schematic": "nx workspace-schematic", + "dep-graph": "nx dep-graph", + "help": "nx help" + }, + "private": true, + "dependencies": {}, + "devDependencies": { + "@nrwl/workspace": "9.2.4", + "@types/node": "~8.9.4", + "dotenv": "6.2.0", + "ts-node": "~7.0.0", + "tslint": "~6.0.0", + "eslint": "6.8.0", + "typescript": "~3.8.3", + "prettier": "1.19.1" + } +} diff --git a/tools/schematics/.gitkeep b/tools/schematics/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tools/tsconfig.tools.json b/tools/tsconfig.tools.json new file mode 100644 index 0000000000..82bd1f098d --- /dev/null +++ b/tools/tsconfig.tools.json @@ -0,0 +1,11 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../dist/out-tsc/tools", + "rootDir": ".", + "module": "commonjs", + "target": "es5", + "types": ["node"] + }, + "include": ["**/*.ts"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000000..a5099b5807 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "rootDir": ".", + "sourceMap": true, + "declaration": false, + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "importHelpers": true, + "target": "es2015", + "module": "esnext", + "typeRoots": ["node_modules/@types"], + "lib": ["es2017", "dom"], + "skipLibCheck": true, + "skipDefaultLibCheck": true, + "baseUrl": ".", + "paths": {} + }, + "exclude": ["node_modules", "tmp"] +} diff --git a/workspace.json b/workspace.json new file mode 100644 index 0000000000..c90f591f6f --- /dev/null +++ b/workspace.json @@ -0,0 +1,63 @@ +{ + "version": 1, + "projects": {}, + "cli": { + "defaultCollection": "@nrwl/workspace" + }, + "schematics": { + "@nrwl/workspace": { + "library": { + "linter": "eslint" + } + }, + "@nrwl/cypress": { + "cypress-project": { + "linter": "eslint" + } + }, + "@nrwl/react": { + "application": { + "linter": "eslint" + }, + "library": { + "linter": "eslint" + } + }, + "@nrwl/next": { + "application": { + "linter": "eslint" + } + }, + "@nrwl/web": { + "application": { + "linter": "eslint" + } + }, + "@nrwl/node": { + "application": { + "linter": "eslint" + }, + "library": { + "linter": "eslint" + } + }, + "@nrwl/nx-plugin": { + "plugin": { + "linter": "eslint" + } + }, + "@nrwl/nest": { + "application": { + "linter": "eslint" + } + }, + "@nrwl/express": { + "application": { + "linter": "eslint" + }, + "library": { + "linter": "eslint" + } + } + } +} From 905adadd23fe018364b11f9f1f51d606e3581766 Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Fri, 8 May 2020 14:58:40 +0000 Subject: [PATCH 03/37] moved remix-ide into subdirectory --- .babelrc => apps/remix-ide/.babelrc | 0 {.circleci => apps/remix-ide/.circleci}/config.yml | 0 .env => apps/remix-ide/.env | 0 .gitignore => apps/remix-ide/.gitignore | 0 .npmignore => apps/remix-ide/.npmignore | 0 .nvmrc => apps/remix-ide/.nvmrc | 0 .travis.yml => apps/remix-ide/.travis.yml | 0 LICENSE.md => apps/remix-ide/LICENSE.md | 0 README.md => apps/remix-ide/README.md | 0 _config.yml => apps/remix-ide/_config.yml | 0 background.js => apps/remix-ide/background.js | 0 .../remix-ide/best-practices.md | 0 {bin => apps/remix-ide/bin}/remix-ide | 0 {ci => apps/remix-ide/ci}/browser_tests.sh | 0 {ci => apps/remix-ide/ci}/browser_tests_chrome.sh | 0 {ci => apps/remix-ide/ci}/browser_tests_firefox.sh | 0 .../remix-ide/ci}/browser_tests_run_deploy.sh | 0 .../remix-ide/ci}/deploy_from_travis_remix-alpha.sh | 0 .../remix-ide/ci}/deploy_from_travis_remix-live.sh | 0 .../remix-ide/ci}/deploy_key_remix-live-alpha.enc | Bin {ci => apps/remix-ide/ci}/deploy_key_remix-live.enc | Bin {ci => apps/remix-ide/ci}/makeMockCompiler.js | 0 {ci => apps/remix-ide/ci}/sauceDisconnect.js | 0 .../contracts}/app/ethereum/constitution.sol | 0 .../remix-ide/contracts}/app/solidity/mode.sol | 0 {contracts => apps/remix-ide/contracts}/ballot.sol | 0 .../remix-ide/contracts}/contract1.sol | 0 .../remix-ide/contracts}/contract2.sol | 0 .../remix-ide/contracts}/folder1/contract1.sol | 0 .../remix-ide/contracts}/folder1/contract2.sol | 0 .../contracts}/folder1/contract_chrome.sol | 0 .../contracts}/folder1/contract_chrome_toremove.sol | 0 .../contracts}/folder1/contract_firefox.sol | 0 .../folder1/contract_firefox_toremove.sol | 0 .../contracts/math/SafeMath.sol | 0 .../openzeppelin-solidity/contracts/sample.sol | 0 .../remix-ide/contracts}/src/gmbh/company.sol | 0 .../remix-ide/contracts}/src/gmbh/contract.sol | 0 .../remix-ide/contracts}/src/gmbh/test.sol | 0 .../remix-ide/contracts}/src/leasing.sol | 0 .../remix-ide/contracts}/src/ug/finance.sol | 0 .../remix-ide/contracts}/src/voting.sol | 0 .../remix-ide/contracts}/test/client/credit.sol | 0 {assets => apps/remix-ide}/css/font-awesome.min.css | 0 {assets => apps/remix-ide}/css/pygment_trac.css | 0 {docs => apps/remix-ide/docs}/FAQ.md | 0 {docs => apps/remix-ide/docs}/Makefile | 0 {docs => apps/remix-ide/docs}/assert_library.md | 0 .../remix-ide/docs}/code_contribution_guide.md | 0 {docs => apps/remix-ide/docs}/community.md | 0 {docs => apps/remix-ide/docs}/compile.md | 0 {docs => apps/remix-ide/docs}/conf.py | 0 {docs => apps/remix-ide/docs}/contract_metadata.md | 0 {docs => apps/remix-ide/docs}/create_deploy.md | 0 {docs => apps/remix-ide/docs}/debugger.md | 0 {docs => apps/remix-ide/docs}/file_explorer.md | 0 .../docs}/images/a-Runtab-deploy-atAddress.png | Bin .../remix-ide/docs}/images/a-contract-inputs.png | Bin .../remix-ide/docs}/images/a-debug1-deploy.png | Bin .../remix-ide/docs}/images/a-debug2-udapp1.png | Bin .../remix-ide/docs}/images/a-debug2-udapp1a.png | Bin .../remix-ide/docs}/images/a-debug3-udapp2.png | Bin .../remix-ide/docs}/images/a-debug4-value-loc.png | Bin .../docs}/images/a-debug5-term-debug-but.png | Bin .../docs}/images/a-debug6-term-txn-hash.png | Bin .../remix-ide/docs}/images/a-debug7-debugger.png | Bin .../remix-ide/docs}/images/a-debug8-top3.png | Bin .../remix-ide/docs}/images/a-debug9-buttons.png | Bin {docs => apps/remix-ide/docs}/images/a-debugger.png | Bin .../docs}/images/a-file-ex-rt-click-folder.png | Bin .../remix-ide/docs}/images/a-file-ex-rt-click.png | Bin .../docs}/images/a-file-explorer-buttons-big.png | Bin .../docs}/images/a-file-explorer-buttons.png | Bin .../remix-ide/docs}/images/a-file-explorer1.png | Bin .../remix-ide/docs}/images/a-home-page.png | Bin {docs => apps/remix-ide/docs}/images/a-hometab.png | Bin .../remix-ide/docs}/images/a-icon-swap.png | Bin .../remix-ide/docs}/images/a-icons-at-load.png | Bin .../docs}/images/a-jvm-calling-instance.png | Bin .../remix-ide/docs}/images/a-jvm-instance.png | Bin {docs => apps/remix-ide/docs}/images/a-jvm.png | Bin {docs => apps/remix-ide/docs}/images/a-layout1.png | Bin {docs => apps/remix-ide/docs}/images/a-layout1c.png | Bin .../docs}/images/a-old-tuto_basicimport.png | Bin .../remix-ide/docs}/images/a-old-tuto_importgit.png | Bin .../docs}/images/a-old-tuto_importswarm.png | Bin {docs => apps/remix-ide/docs}/images/a-plug.png | Bin .../remix-ide/docs}/images/a-plugin-man-local.png | Bin .../remix-ide/docs}/images/a-receive-fun.png | Bin .../remix-ide/docs}/images/a-remixd-success.png | Bin {docs => apps/remix-ide/docs}/images/a-run-icon.png | Bin .../remix-ide/docs}/images/a-runtab-recorder.png | Bin {docs => apps/remix-ide/docs}/images/a-runtab1a.png | Bin .../remix-ide/docs}/images/a-sol-compiler.png | Bin .../remix-ide/docs}/images/a-sol-editor.png | Bin .../remix-ide/docs}/images/a-static-analysis.png | Bin .../remix-ide/docs}/images/a-terminal-and-more.png | Bin {docs => apps/remix-ide/docs}/images/a-themes.png | Bin .../remix-ide/docs}/images/a-udapp-inputs.png | Bin .../docs}/images/a-udapp-multi-param-man.png | Bin {docs => apps/remix-ide/docs}/images/a-udapp1.png | Bin {docs => apps/remix-ide/docs}/images/a-udapp2.png | Bin .../a-unit-testing-custom-compiler-config.png | Bin .../docs}/images/a-unit-testing-feature.png | Bin .../docs}/images/a-unit-testing-from-pm.png | Bin .../docs}/images/a-unit-testing-run-result.png | Bin .../remix-ide/docs}/images/a-user-testing-icon.png | Bin {docs => apps/remix-ide/docs}/import.md | 0 {docs => apps/remix-ide/docs}/index.rst | 0 {docs => apps/remix-ide/docs}/layout.md | 0 {docs => apps/remix-ide/docs}/locations.md | 0 {docs => apps/remix-ide/docs}/make.bat | 0 {docs => apps/remix-ide/docs}/plugin_manager.md | 0 {docs => apps/remix-ide/docs}/remix_commands.md | 0 .../remix-ide/docs}/remix_tutorials_github.md | 0 {docs => apps/remix-ide/docs}/remixd.md | 0 {docs => apps/remix-ide/docs}/run.md | 0 {docs => apps/remix-ide/docs}/settings.md | 0 {docs => apps/remix-ide/docs}/solidity_editor.md | 0 {docs => apps/remix-ide/docs}/static_analysis.md | 0 {docs => apps/remix-ide/docs}/support.md | 0 {docs => apps/remix-ide/docs}/terminal.md | 0 {docs => apps/remix-ide/docs}/tutorial_debug.md | 0 {docs => apps/remix-ide/docs}/udapp.md | 0 {docs => apps/remix-ide/docs}/unittesting.md | 0 .../remix-ide/docs}/unittesting_examples.md | 0 {embark => apps/remix-ide/embark}/README.md | 0 {embark => apps/remix-ide/embark}/index.js | 0 {embark => apps/remix-ide/embark}/package.json | 0 {assets => apps/remix-ide}/fonts/FontAwesome.otf | Bin .../remix-ide}/fonts/fontawesome-webfont.eot | Bin .../remix-ide}/fonts/fontawesome-webfont.svg | 0 .../remix-ide}/fonts/fontawesome-webfont.ttf | Bin .../remix-ide}/fonts/fontawesome-webfont.woff | Bin .../remix-ide}/fonts/fontawesome-webfont.woff2 | Bin icon.png => apps/remix-ide/icon.png | Bin {assets => apps/remix-ide}/img/debuggerLogo.webp | Bin {assets => apps/remix-ide}/img/gasStation_50.png | Bin .../img/hexagon-remix-greengrey-texture.png | Bin {assets => apps/remix-ide}/img/homeStickers.png | Bin {assets => apps/remix-ide}/img/moreLogo.webp | Bin {assets => apps/remix-ide}/img/mythxLogo.webp | Bin {assets => apps/remix-ide}/img/pipelineLogo.webp | Bin .../remix-ide}/img/sleepingRemiCroped.webp | Bin {assets => apps/remix-ide}/img/solidityLogo.webp | Bin .../remix-ide}/img/sourceVerifyLogo.webp | Bin {assets => apps/remix-ide}/img/vyperLogo.webp | Bin {assets => apps/remix-ide}/img/workshopLogo.webp | Bin index.html => apps/remix-ide/index.html | 0 {assets => apps/remix-ide}/js/0.7.7/app.js | 0 {assets => apps/remix-ide}/js/browserfs.min.js | 0 manifest.json => apps/remix-ide/manifest.json | 0 meetings.md => apps/remix-ide/meetings.md | 0 nightwatch.js => apps/remix-ide/nightwatch.js | 0 .../remix-ide/nightwatch_debugger.js | 0 .../remix-ide/package-lock.json | 0 package.json => apps/remix-ide/package.json | 0 .../remix-ide/release-process.md | 0 .../remix-ide/remix_screenshot.png | Bin .../remix-ide/research-project.md | 0 .../remix-ide/seleniumConfig.js | 0 {src => apps/remix-ide/src}/app.js | 0 .../src}/app/compiler/compiler-abstract.js | 0 .../src}/app/compiler/compiler-artefacts.js | 0 .../remix-ide/src}/app/compiler/compiler-helpers.js | 0 .../remix-ide/src}/app/compiler/compiler-imports.js | 0 .../remix-ide/src}/app/compiler/compiler-input.js | 0 .../compiler-sourceVerifier-fetchAndCompile.js | 0 .../remix-ide/src}/app/compiler/compiler-utils.js | 0 .../remix-ide/src}/app/components/hidden-panel.js | 0 .../remix-ide/src}/app/components/local-plugin.js | 0 .../remix-ide/src}/app/components/main-panel.js | 0 {src => apps/remix-ide/src}/app/components/panel.js | 0 .../src}/app/components/plugin-manager-component.js | 0 .../src}/app/components/plugin-manager-settings.js | 0 .../remix-ide/src}/app/components/side-panel.js | 0 .../remix-ide/src}/app/components/vertical-icons.js | 0 .../remix-ide/src}/app/editor/SourceHighlighters.js | 0 .../remix-ide/src}/app/editor/contextView.js | 0 .../remix-ide/src}/app/editor/contextualListener.js | 0 {src => apps/remix-ide/src}/app/editor/editor.js | 0 .../remix-ide/src}/app/editor/example-contracts.js | 0 .../remix-ide/src}/app/editor/sourceHighlighter.js | 0 .../src}/app/editor/styles/contextView-styles.js | 0 .../remix-ide/src}/app/files/compiler-metadata.js | 0 .../remix-ide/src}/app/files/file-explorer.js | 0 .../remix-ide/src}/app/files/fileManager.js | 0 .../remix-ide/src}/app/files/fileProvider.js | 0 .../remix-ide/src}/app/files/remixDProvider.js | 0 .../remix-ide/src}/app/files/remixd-handle.js | 0 .../src}/app/files/styles/file-explorer-styles.js | 0 .../remix-ide/src}/app/panels/file-panel.js | 0 {src => apps/remix-ide/src}/app/panels/main-view.js | 0 .../src}/app/panels/styles/file-panel-styles.js | 0 .../src}/app/panels/styles/terminal-styles.js | 0 {src => apps/remix-ide/src}/app/panels/tab-proxy.js | 0 {src => apps/remix-ide/src}/app/panels/terminal.js | 0 .../remix-ide/src}/app/tabs/analysis-tab.js | 0 {src => apps/remix-ide/src}/app/tabs/compile-tab.js | 0 .../src}/app/tabs/compileTab/compileTab.js | 0 .../src}/app/tabs/compileTab/compilerContainer.js | 0 .../src}/app/tabs/compileTab/contractParser.js | 0 .../remix-ide/src}/app/tabs/debugger-tab.js | 0 .../remix-ide/src}/app/tabs/debugger/debuggerUI.js | 0 .../app/tabs/debugger/debuggerUI/ButtonNavigator.js | 0 .../src}/app/tabs/debugger/debuggerUI/Slider.js | 0 .../app/tabs/debugger/debuggerUI/StepManager.js | 0 .../src}/app/tabs/debugger/debuggerUI/TxBrowser.js | 0 .../src}/app/tabs/debugger/debuggerUI/VmDebugger.js | 0 .../tabs/debugger/debuggerUI/styles/basicStyles.js | 0 .../debugger/debuggerUI/styles/dropdownPanel.js | 0 .../tabs/debugger/debuggerUI/styles/sliderStyles.js | 0 .../app/tabs/debugger/debuggerUI/styles/treeView.js | 0 .../debugger/debuggerUI/vmDebugger/CalldataPanel.js | 0 .../debuggerUI/vmDebugger/CallstackPanel.js | 0 .../debugger/debuggerUI/vmDebugger/CodeListView.js | 0 .../debugger/debuggerUI/vmDebugger/DropdownPanel.js | 0 .../debuggerUI/vmDebugger/FullStoragesChanges.js | 0 .../debugger/debuggerUI/vmDebugger/MemoryPanel.js | 0 .../debuggerUI/vmDebugger/SolidityLocals.js | 0 .../debugger/debuggerUI/vmDebugger/SolidityState.js | 0 .../debugger/debuggerUI/vmDebugger/StackPanel.js | 0 .../debugger/debuggerUI/vmDebugger/StepDetail.js | 0 .../debugger/debuggerUI/vmDebugger/StoragePanel.js | 0 .../vmDebugger/utils/SolidityTypeFormatter.js | 0 .../remix-ide/src}/app/tabs/network-module.js | 0 {src => apps/remix-ide/src}/app/tabs/plugin-tab.js | 0 .../src}/app/tabs/runTab/contractDropdown.js | 0 .../src}/app/tabs/runTab/model/dropdownlogic.js | 0 .../src}/app/tabs/runTab/model/recorder.js | 0 .../remix-ide/src}/app/tabs/runTab/recorder.js | 0 .../remix-ide/src}/app/tabs/runTab/settings.js | 0 .../remix-ide/src}/app/tabs/settings-tab.js | 0 .../app/tabs/staticanalysis/staticAnalysisView.js | 0 .../styles/staticAnalysisView-styles.js | 0 .../src}/app/tabs/styles/analysis-tab-styles.js | 0 .../src}/app/tabs/styles/compile-tab-styles.js | 0 .../src}/app/tabs/styles/debugger-tab-styles.js | 0 .../src}/app/tabs/styles/plugin-tab-styles.js | 0 .../src}/app/tabs/styles/run-tab-styles.js | 0 .../src}/app/tabs/styles/settings-tab-styles.js | 0 .../src}/app/tabs/styles/support-tab-styles.js | 0 .../src}/app/tabs/styles/tabbed-menu-styles.js | 0 .../src}/app/tabs/styles/test-tab-styles.js | 0 {src => apps/remix-ide/src}/app/tabs/test-tab.js | 0 .../remix-ide/src}/app/tabs/testTab/testTab.js | 0 .../remix-ide/src}/app/tabs/theme-module.js | 0 .../remix-ide/src}/app/tabs/web3-provider.js | 0 {src => apps/remix-ide/src}/app/udapp/index.js | 0 {src => apps/remix-ide/src}/app/udapp/make-udapp.js | 0 {src => apps/remix-ide/src}/app/udapp/run-tab.js | 0 {src => apps/remix-ide/src}/app/ui/TreeView.js | 0 .../remix-ide/src}/app/ui/auto-complete-popup.js | 0 {src => apps/remix-ide/src}/app/ui/card.js | 0 {src => apps/remix-ide/src}/app/ui/confirmDialog.js | 0 {src => apps/remix-ide/src}/app/ui/contextMenu.js | 0 .../remix-ide/src}/app/ui/copy-to-clipboard.js | 0 .../remix-ide/src}/app/ui/draggableContent.js | 0 {src => apps/remix-ide/src}/app/ui/dropdown.js | 0 .../src}/app/ui/landing-page/landing-page.js | 0 .../remix-ide/src}/app/ui/landing-page/workspace.js | 0 .../remix-ide/src}/app/ui/modal-dialog-custom.js | 0 {src => apps/remix-ide/src}/app/ui/modaldialog.js | 0 .../remix-ide/src}/app/ui/multiParamManager.js | 0 .../remix-ide/src}/app/ui/persmission-handler.js | 0 {src => apps/remix-ide/src}/app/ui/renderer.js | 0 .../remix-ide/src}/app/ui/sendTxCallbacks.js | 0 .../src}/app/ui/styles-guide/styleGuideClean.js | 0 .../app/ui/styles/auto-complete-popup-styles.js | 0 .../remix-ide/src}/app/ui/styles/dropdown-styles.js | 0 .../app/ui/styles/modal-dialog-custom-styles.js | 0 .../src}/app/ui/styles/modaldialog-styles.js | 0 .../remix-ide/src}/app/ui/styles/renderer-styles.js | 0 .../remix-ide/src}/app/ui/styles/tooltip-styles.js | 0 {src => apps/remix-ide/src}/app/ui/svgLogo.js | 0 {src => apps/remix-ide/src}/app/ui/tooltip.js | 0 {src => apps/remix-ide/src}/app/ui/txLogger.js | 0 .../remix-ide/src}/app/ui/universal-dapp-ui.js | 0 .../remix-ide/src}/blockchain/blockchain.js | 0 .../remix-ide/src}/blockchain/pluginUDapp.js | 0 .../remix-ide/src}/blockchain/providers/injected.js | 0 .../remix-ide/src}/blockchain/providers/node.js | 0 .../remix-ide/src}/blockchain/providers/vm.js | 0 .../remix-ide/src}/blockchain/txResultHelper.js | 0 {src => apps/remix-ide/src}/config.js | 0 {src => apps/remix-ide/src}/framingService.js | 0 {src => apps/remix-ide/src}/global/registry.js | 0 {src => apps/remix-ide/src}/index.js | 0 .../remix-ide/src}/lib/cmdInterpreterAPI.js | 0 {src => apps/remix-ide/src}/lib/commands.js | 0 {src => apps/remix-ide/src}/lib/events.js | 0 {src => apps/remix-ide/src}/lib/gist-handler.js | 0 {src => apps/remix-ide/src}/lib/helper.js | 0 .../src}/lib/offsetToLineColumnConverter.js | 0 {src => apps/remix-ide/src}/lib/panels-resize.js | 0 {src => apps/remix-ide/src}/lib/publishOnIpfs.js | 0 {src => apps/remix-ide/src}/lib/publishOnSwarm.js | 0 {src => apps/remix-ide/src}/lib/query-params.js | 0 {src => apps/remix-ide/src}/lib/remixd.js | 0 .../src}/lib/transactionReceiptResolver.js | 0 {src => apps/remix-ide/src}/loadFilesFromParent.js | 0 {src => apps/remix-ide/src}/migrateFileSystem.js | 0 {src => apps/remix-ide/src}/publishToStorage.js | 0 {src => apps/remix-ide/src}/registry.js | 0 {src => apps/remix-ide/src}/remixAppManager.js | 0 .../remix-ide/src}/universal-dapp-styles.js | 0 .../remix-ide/team-best-practices.md | 0 .../test-browser}/commands/addAtAddressInstance.js | 0 .../remix-ide/test-browser}/commands/addFile.js | 0 .../test-browser}/commands/checkElementStyle.js | 0 .../test-browser}/commands/checkTerminalFilter.js | 0 .../test-browser}/commands/checkVariableDebug.js | 0 .../commands/clickElementAtPosition.js | 0 .../test-browser}/commands/clickFunction.js | 0 .../test-browser}/commands/clickInstance.js | 0 .../test-browser}/commands/clickLaunchIcon.js | 0 .../test-browser}/commands/createContract.js | 0 .../test-browser}/commands/debugTransaction.js | 0 .../test-browser}/commands/executeScript.js | 0 .../test-browser}/commands/getAddressAtPosition.js | 0 .../test-browser}/commands/getEditorValue.js | 0 .../test-browser}/commands/getInstalledPlugins.js | 0 .../test-browser}/commands/getModalBody.js | 0 .../test-browser}/commands/goToVMTraceStep.js | 0 .../test-browser}/commands/journalChildIncludes.js | 0 .../test-browser}/commands/journalLastChild.js | 0 .../commands/journalLastChildIncludes.js | 0 .../commands/modalFooterCancelClick.js | 0 .../test-browser}/commands/modalFooterOKClick.js | 0 .../test-browser}/commands/notContainsText.js | 0 .../remix-ide/test-browser}/commands/removeFile.js | 0 .../remix-ide/test-browser}/commands/renameFile.js | 0 .../remix-ide/test-browser}/commands/rightClick.js | 0 .../test-browser}/commands/scrollAndClick.js | 0 .../remix-ide/test-browser}/commands/scrollInto.js | 0 .../test-browser}/commands/selectAccount.js | 0 .../test-browser}/commands/selectContract.js | 0 .../test-browser}/commands/sendLowLevelTx.js | 0 .../test-browser}/commands/setEditorValue.js | 0 .../commands/setSolidityCompilerVersion.js | 0 .../test-browser}/commands/setupMetamask.js | 0 .../remix-ide/test-browser}/commands/signMessage.js | 0 .../test-browser}/commands/switchBrowserTab.js | 0 .../test-browser}/commands/switchBrowserWindow.js | 0 .../remix-ide/test-browser}/commands/switchFile.js | 0 .../test-browser}/commands/testConstantFunction.js | 0 .../test-browser}/commands/testContracts.js | 0 .../test-browser}/commands/testEditorValue.js | 0 .../test-browser}/commands/testFunction.js | 0 .../test-browser}/commands/verifyCallReturnValue.js | 0 .../test-browser}/commands/verifyContracts.js | 0 .../commands/waitForElementContainsText.js | 0 .../test-browser}/extensions/chrome/metamask.crx | Bin .../test-browser}/helpers/applytestmode.js | 0 .../remix-ide/test-browser}/helpers/init.js | 0 .../test-browser}/mockcompiler/compiler.js | 0 .../remix-ide/test-browser}/tests/ballot.test.js | 0 .../remix-ide/test-browser}/tests/debugger.test.js | 0 .../test-browser}/tests/defaultLayout.test.js | 0 .../remix-ide/test-browser}/tests/editor.test.js | 0 .../test-browser}/tests/fileExplorer.test.js | 0 .../test-browser}/tests/generalSettings.test.js | 0 .../remix-ide/test-browser}/tests/gist.test.js | 0 .../test-browser}/tests/libraryDeployment.test.js | 0 .../test-browser}/tests/pluginManager.test.js | 0 .../test-browser}/tests/publishContract.test.js | 0 .../remix-ide/test-browser}/tests/recorder.test.js | 0 .../remix-ide/test-browser}/tests/remixd.test.js | 0 .../remix-ide/test-browser}/tests/runAndDeploy.js | 0 .../remix-ide/test-browser}/tests/sauce.js | 0 .../test-browser}/tests/signingMessage.test.js | 0 .../test-browser}/tests/solidityImport.test.js | 0 .../test-browser}/tests/solidityUnittests.test.js | 0 .../test-browser}/tests/specialFunctions.test.js | 0 .../test-browser}/tests/staticAnalysis.test.js | 0 .../remix-ide/test-browser}/tests/terminal.test.js | 0 .../tests/transactionExecution.test.js | 0 .../remix-ide/test-browser}/tests/workspace.test.js | 0 {test => apps/remix-ide/test}/compiler-test.js | 0 {test => apps/remix-ide/test}/gist-handler-test.js | 0 {test => apps/remix-ide/test}/index.js | 0 {test => apps/remix-ide/test}/query-params-test.js | 0 382 files changed, 0 insertions(+), 0 deletions(-) rename .babelrc => apps/remix-ide/.babelrc (100%) rename {.circleci => apps/remix-ide/.circleci}/config.yml (100%) rename .env => apps/remix-ide/.env (100%) rename .gitignore => apps/remix-ide/.gitignore (100%) rename .npmignore => apps/remix-ide/.npmignore (100%) rename .nvmrc => apps/remix-ide/.nvmrc (100%) rename .travis.yml => apps/remix-ide/.travis.yml (100%) rename LICENSE.md => apps/remix-ide/LICENSE.md (100%) rename README.md => apps/remix-ide/README.md (100%) rename _config.yml => apps/remix-ide/_config.yml (100%) rename background.js => apps/remix-ide/background.js (100%) rename best-practices.md => apps/remix-ide/best-practices.md (100%) rename {bin => apps/remix-ide/bin}/remix-ide (100%) rename {ci => apps/remix-ide/ci}/browser_tests.sh (100%) rename {ci => apps/remix-ide/ci}/browser_tests_chrome.sh (100%) rename {ci => apps/remix-ide/ci}/browser_tests_firefox.sh (100%) rename {ci => apps/remix-ide/ci}/browser_tests_run_deploy.sh (100%) rename {ci => apps/remix-ide/ci}/deploy_from_travis_remix-alpha.sh (100%) rename {ci => apps/remix-ide/ci}/deploy_from_travis_remix-live.sh (100%) rename {ci => apps/remix-ide/ci}/deploy_key_remix-live-alpha.enc (100%) rename {ci => apps/remix-ide/ci}/deploy_key_remix-live.enc (100%) rename {ci => apps/remix-ide/ci}/makeMockCompiler.js (100%) rename {ci => apps/remix-ide/ci}/sauceDisconnect.js (100%) rename {contracts => apps/remix-ide/contracts}/app/ethereum/constitution.sol (100%) rename {contracts => apps/remix-ide/contracts}/app/solidity/mode.sol (100%) rename {contracts => apps/remix-ide/contracts}/ballot.sol (100%) rename {contracts => apps/remix-ide/contracts}/contract1.sol (100%) rename {contracts => apps/remix-ide/contracts}/contract2.sol (100%) rename {contracts => apps/remix-ide/contracts}/folder1/contract1.sol (100%) rename {contracts => apps/remix-ide/contracts}/folder1/contract2.sol (100%) rename {contracts => apps/remix-ide/contracts}/folder1/contract_chrome.sol (100%) rename {contracts => apps/remix-ide/contracts}/folder1/contract_chrome_toremove.sol (100%) rename {contracts => apps/remix-ide/contracts}/folder1/contract_firefox.sol (100%) rename {contracts => apps/remix-ide/contracts}/folder1/contract_firefox_toremove.sol (100%) rename {contracts => apps/remix-ide/contracts}/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol (100%) rename {contracts => apps/remix-ide/contracts}/node_modules/openzeppelin-solidity/contracts/sample.sol (100%) rename {contracts => apps/remix-ide/contracts}/src/gmbh/company.sol (100%) rename {contracts => apps/remix-ide/contracts}/src/gmbh/contract.sol (100%) rename {contracts => apps/remix-ide/contracts}/src/gmbh/test.sol (100%) rename {contracts => apps/remix-ide/contracts}/src/leasing.sol (100%) rename {contracts => apps/remix-ide/contracts}/src/ug/finance.sol (100%) rename {contracts => apps/remix-ide/contracts}/src/voting.sol (100%) rename {contracts => apps/remix-ide/contracts}/test/client/credit.sol (100%) rename {assets => apps/remix-ide}/css/font-awesome.min.css (100%) rename {assets => apps/remix-ide}/css/pygment_trac.css (100%) rename {docs => apps/remix-ide/docs}/FAQ.md (100%) rename {docs => apps/remix-ide/docs}/Makefile (100%) rename {docs => apps/remix-ide/docs}/assert_library.md (100%) rename {docs => apps/remix-ide/docs}/code_contribution_guide.md (100%) rename {docs => apps/remix-ide/docs}/community.md (100%) rename {docs => apps/remix-ide/docs}/compile.md (100%) rename {docs => apps/remix-ide/docs}/conf.py (100%) rename {docs => apps/remix-ide/docs}/contract_metadata.md (100%) rename {docs => apps/remix-ide/docs}/create_deploy.md (100%) rename {docs => apps/remix-ide/docs}/debugger.md (100%) rename {docs => apps/remix-ide/docs}/file_explorer.md (100%) rename {docs => apps/remix-ide/docs}/images/a-Runtab-deploy-atAddress.png (100%) rename {docs => apps/remix-ide/docs}/images/a-contract-inputs.png (100%) rename {docs => apps/remix-ide/docs}/images/a-debug1-deploy.png (100%) rename {docs => apps/remix-ide/docs}/images/a-debug2-udapp1.png (100%) rename {docs => apps/remix-ide/docs}/images/a-debug2-udapp1a.png (100%) rename {docs => apps/remix-ide/docs}/images/a-debug3-udapp2.png (100%) rename {docs => apps/remix-ide/docs}/images/a-debug4-value-loc.png (100%) rename {docs => apps/remix-ide/docs}/images/a-debug5-term-debug-but.png (100%) rename {docs => apps/remix-ide/docs}/images/a-debug6-term-txn-hash.png (100%) rename {docs => apps/remix-ide/docs}/images/a-debug7-debugger.png (100%) rename {docs => apps/remix-ide/docs}/images/a-debug8-top3.png (100%) rename {docs => apps/remix-ide/docs}/images/a-debug9-buttons.png (100%) rename {docs => apps/remix-ide/docs}/images/a-debugger.png (100%) rename {docs => apps/remix-ide/docs}/images/a-file-ex-rt-click-folder.png (100%) rename {docs => apps/remix-ide/docs}/images/a-file-ex-rt-click.png (100%) rename {docs => apps/remix-ide/docs}/images/a-file-explorer-buttons-big.png (100%) rename {docs => apps/remix-ide/docs}/images/a-file-explorer-buttons.png (100%) rename {docs => apps/remix-ide/docs}/images/a-file-explorer1.png (100%) rename {docs => apps/remix-ide/docs}/images/a-home-page.png (100%) rename {docs => apps/remix-ide/docs}/images/a-hometab.png (100%) rename {docs => apps/remix-ide/docs}/images/a-icon-swap.png (100%) rename {docs => apps/remix-ide/docs}/images/a-icons-at-load.png (100%) rename {docs => apps/remix-ide/docs}/images/a-jvm-calling-instance.png (100%) rename {docs => apps/remix-ide/docs}/images/a-jvm-instance.png (100%) rename {docs => apps/remix-ide/docs}/images/a-jvm.png (100%) rename {docs => apps/remix-ide/docs}/images/a-layout1.png (100%) rename {docs => apps/remix-ide/docs}/images/a-layout1c.png (100%) rename {docs => apps/remix-ide/docs}/images/a-old-tuto_basicimport.png (100%) rename {docs => apps/remix-ide/docs}/images/a-old-tuto_importgit.png (100%) rename {docs => apps/remix-ide/docs}/images/a-old-tuto_importswarm.png (100%) rename {docs => apps/remix-ide/docs}/images/a-plug.png (100%) rename {docs => apps/remix-ide/docs}/images/a-plugin-man-local.png (100%) rename {docs => apps/remix-ide/docs}/images/a-receive-fun.png (100%) rename {docs => apps/remix-ide/docs}/images/a-remixd-success.png (100%) rename {docs => apps/remix-ide/docs}/images/a-run-icon.png (100%) rename {docs => apps/remix-ide/docs}/images/a-runtab-recorder.png (100%) rename {docs => apps/remix-ide/docs}/images/a-runtab1a.png (100%) rename {docs => apps/remix-ide/docs}/images/a-sol-compiler.png (100%) rename {docs => apps/remix-ide/docs}/images/a-sol-editor.png (100%) rename {docs => apps/remix-ide/docs}/images/a-static-analysis.png (100%) rename {docs => apps/remix-ide/docs}/images/a-terminal-and-more.png (100%) rename {docs => apps/remix-ide/docs}/images/a-themes.png (100%) rename {docs => apps/remix-ide/docs}/images/a-udapp-inputs.png (100%) rename {docs => apps/remix-ide/docs}/images/a-udapp-multi-param-man.png (100%) rename {docs => apps/remix-ide/docs}/images/a-udapp1.png (100%) rename {docs => apps/remix-ide/docs}/images/a-udapp2.png (100%) rename {docs => apps/remix-ide/docs}/images/a-unit-testing-custom-compiler-config.png (100%) rename {docs => apps/remix-ide/docs}/images/a-unit-testing-feature.png (100%) rename {docs => apps/remix-ide/docs}/images/a-unit-testing-from-pm.png (100%) rename {docs => apps/remix-ide/docs}/images/a-unit-testing-run-result.png (100%) rename {docs => apps/remix-ide/docs}/images/a-user-testing-icon.png (100%) rename {docs => apps/remix-ide/docs}/import.md (100%) rename {docs => apps/remix-ide/docs}/index.rst (100%) rename {docs => apps/remix-ide/docs}/layout.md (100%) rename {docs => apps/remix-ide/docs}/locations.md (100%) rename {docs => apps/remix-ide/docs}/make.bat (100%) rename {docs => apps/remix-ide/docs}/plugin_manager.md (100%) rename {docs => apps/remix-ide/docs}/remix_commands.md (100%) rename {docs => apps/remix-ide/docs}/remix_tutorials_github.md (100%) rename {docs => apps/remix-ide/docs}/remixd.md (100%) rename {docs => apps/remix-ide/docs}/run.md (100%) rename {docs => apps/remix-ide/docs}/settings.md (100%) rename {docs => apps/remix-ide/docs}/solidity_editor.md (100%) rename {docs => apps/remix-ide/docs}/static_analysis.md (100%) rename {docs => apps/remix-ide/docs}/support.md (100%) rename {docs => apps/remix-ide/docs}/terminal.md (100%) rename {docs => apps/remix-ide/docs}/tutorial_debug.md (100%) rename {docs => apps/remix-ide/docs}/udapp.md (100%) rename {docs => apps/remix-ide/docs}/unittesting.md (100%) rename {docs => apps/remix-ide/docs}/unittesting_examples.md (100%) rename {embark => apps/remix-ide/embark}/README.md (100%) rename {embark => apps/remix-ide/embark}/index.js (100%) rename {embark => apps/remix-ide/embark}/package.json (100%) rename {assets => apps/remix-ide}/fonts/FontAwesome.otf (100%) rename {assets => apps/remix-ide}/fonts/fontawesome-webfont.eot (100%) rename {assets => apps/remix-ide}/fonts/fontawesome-webfont.svg (100%) rename {assets => apps/remix-ide}/fonts/fontawesome-webfont.ttf (100%) rename {assets => apps/remix-ide}/fonts/fontawesome-webfont.woff (100%) rename {assets => apps/remix-ide}/fonts/fontawesome-webfont.woff2 (100%) rename icon.png => apps/remix-ide/icon.png (100%) rename {assets => apps/remix-ide}/img/debuggerLogo.webp (100%) rename {assets => apps/remix-ide}/img/gasStation_50.png (100%) rename {assets => apps/remix-ide}/img/hexagon-remix-greengrey-texture.png (100%) rename {assets => apps/remix-ide}/img/homeStickers.png (100%) rename {assets => apps/remix-ide}/img/moreLogo.webp (100%) rename {assets => apps/remix-ide}/img/mythxLogo.webp (100%) rename {assets => apps/remix-ide}/img/pipelineLogo.webp (100%) rename {assets => apps/remix-ide}/img/sleepingRemiCroped.webp (100%) rename {assets => apps/remix-ide}/img/solidityLogo.webp (100%) rename {assets => apps/remix-ide}/img/sourceVerifyLogo.webp (100%) rename {assets => apps/remix-ide}/img/vyperLogo.webp (100%) rename {assets => apps/remix-ide}/img/workshopLogo.webp (100%) rename index.html => apps/remix-ide/index.html (100%) rename {assets => apps/remix-ide}/js/0.7.7/app.js (100%) rename {assets => apps/remix-ide}/js/browserfs.min.js (100%) rename manifest.json => apps/remix-ide/manifest.json (100%) rename meetings.md => apps/remix-ide/meetings.md (100%) rename nightwatch.js => apps/remix-ide/nightwatch.js (100%) rename nightwatch_debugger.js => apps/remix-ide/nightwatch_debugger.js (100%) rename package-lock.json => apps/remix-ide/package-lock.json (100%) rename package.json => apps/remix-ide/package.json (100%) rename release-process.md => apps/remix-ide/release-process.md (100%) rename remix_screenshot.png => apps/remix-ide/remix_screenshot.png (100%) rename research-project.md => apps/remix-ide/research-project.md (100%) rename seleniumConfig.js => apps/remix-ide/seleniumConfig.js (100%) rename {src => apps/remix-ide/src}/app.js (100%) rename {src => apps/remix-ide/src}/app/compiler/compiler-abstract.js (100%) rename {src => apps/remix-ide/src}/app/compiler/compiler-artefacts.js (100%) rename {src => apps/remix-ide/src}/app/compiler/compiler-helpers.js (100%) rename {src => apps/remix-ide/src}/app/compiler/compiler-imports.js (100%) rename {src => apps/remix-ide/src}/app/compiler/compiler-input.js (100%) rename {src => apps/remix-ide/src}/app/compiler/compiler-sourceVerifier-fetchAndCompile.js (100%) rename {src => apps/remix-ide/src}/app/compiler/compiler-utils.js (100%) rename {src => apps/remix-ide/src}/app/components/hidden-panel.js (100%) rename {src => apps/remix-ide/src}/app/components/local-plugin.js (100%) rename {src => apps/remix-ide/src}/app/components/main-panel.js (100%) rename {src => apps/remix-ide/src}/app/components/panel.js (100%) rename {src => apps/remix-ide/src}/app/components/plugin-manager-component.js (100%) rename {src => apps/remix-ide/src}/app/components/plugin-manager-settings.js (100%) rename {src => apps/remix-ide/src}/app/components/side-panel.js (100%) rename {src => apps/remix-ide/src}/app/components/vertical-icons.js (100%) rename {src => apps/remix-ide/src}/app/editor/SourceHighlighters.js (100%) rename {src => apps/remix-ide/src}/app/editor/contextView.js (100%) rename {src => apps/remix-ide/src}/app/editor/contextualListener.js (100%) rename {src => apps/remix-ide/src}/app/editor/editor.js (100%) rename {src => apps/remix-ide/src}/app/editor/example-contracts.js (100%) rename {src => apps/remix-ide/src}/app/editor/sourceHighlighter.js (100%) rename {src => apps/remix-ide/src}/app/editor/styles/contextView-styles.js (100%) rename {src => apps/remix-ide/src}/app/files/compiler-metadata.js (100%) rename {src => apps/remix-ide/src}/app/files/file-explorer.js (100%) rename {src => apps/remix-ide/src}/app/files/fileManager.js (100%) rename {src => apps/remix-ide/src}/app/files/fileProvider.js (100%) rename {src => apps/remix-ide/src}/app/files/remixDProvider.js (100%) rename {src => apps/remix-ide/src}/app/files/remixd-handle.js (100%) rename {src => apps/remix-ide/src}/app/files/styles/file-explorer-styles.js (100%) rename {src => apps/remix-ide/src}/app/panels/file-panel.js (100%) rename {src => apps/remix-ide/src}/app/panels/main-view.js (100%) rename {src => apps/remix-ide/src}/app/panels/styles/file-panel-styles.js (100%) rename {src => apps/remix-ide/src}/app/panels/styles/terminal-styles.js (100%) rename {src => apps/remix-ide/src}/app/panels/tab-proxy.js (100%) rename {src => apps/remix-ide/src}/app/panels/terminal.js (100%) rename {src => apps/remix-ide/src}/app/tabs/analysis-tab.js (100%) rename {src => apps/remix-ide/src}/app/tabs/compile-tab.js (100%) rename {src => apps/remix-ide/src}/app/tabs/compileTab/compileTab.js (100%) rename {src => apps/remix-ide/src}/app/tabs/compileTab/compilerContainer.js (100%) rename {src => apps/remix-ide/src}/app/tabs/compileTab/contractParser.js (100%) rename {src => apps/remix-ide/src}/app/tabs/debugger-tab.js (100%) rename {src => apps/remix-ide/src}/app/tabs/debugger/debuggerUI.js (100%) rename {src => apps/remix-ide/src}/app/tabs/debugger/debuggerUI/ButtonNavigator.js (100%) rename {src => apps/remix-ide/src}/app/tabs/debugger/debuggerUI/Slider.js (100%) rename {src => apps/remix-ide/src}/app/tabs/debugger/debuggerUI/StepManager.js (100%) rename {src => apps/remix-ide/src}/app/tabs/debugger/debuggerUI/TxBrowser.js (100%) rename {src => apps/remix-ide/src}/app/tabs/debugger/debuggerUI/VmDebugger.js (100%) rename {src => apps/remix-ide/src}/app/tabs/debugger/debuggerUI/styles/basicStyles.js (100%) rename {src => apps/remix-ide/src}/app/tabs/debugger/debuggerUI/styles/dropdownPanel.js (100%) rename {src => apps/remix-ide/src}/app/tabs/debugger/debuggerUI/styles/sliderStyles.js (100%) rename {src => apps/remix-ide/src}/app/tabs/debugger/debuggerUI/styles/treeView.js (100%) rename {src => apps/remix-ide/src}/app/tabs/debugger/debuggerUI/vmDebugger/CalldataPanel.js (100%) rename {src => apps/remix-ide/src}/app/tabs/debugger/debuggerUI/vmDebugger/CallstackPanel.js (100%) rename {src => apps/remix-ide/src}/app/tabs/debugger/debuggerUI/vmDebugger/CodeListView.js (100%) rename {src => apps/remix-ide/src}/app/tabs/debugger/debuggerUI/vmDebugger/DropdownPanel.js (100%) rename {src => apps/remix-ide/src}/app/tabs/debugger/debuggerUI/vmDebugger/FullStoragesChanges.js (100%) rename {src => apps/remix-ide/src}/app/tabs/debugger/debuggerUI/vmDebugger/MemoryPanel.js (100%) rename {src => apps/remix-ide/src}/app/tabs/debugger/debuggerUI/vmDebugger/SolidityLocals.js (100%) rename {src => apps/remix-ide/src}/app/tabs/debugger/debuggerUI/vmDebugger/SolidityState.js (100%) rename {src => apps/remix-ide/src}/app/tabs/debugger/debuggerUI/vmDebugger/StackPanel.js (100%) rename {src => apps/remix-ide/src}/app/tabs/debugger/debuggerUI/vmDebugger/StepDetail.js (100%) rename {src => apps/remix-ide/src}/app/tabs/debugger/debuggerUI/vmDebugger/StoragePanel.js (100%) rename {src => apps/remix-ide/src}/app/tabs/debugger/debuggerUI/vmDebugger/utils/SolidityTypeFormatter.js (100%) rename {src => apps/remix-ide/src}/app/tabs/network-module.js (100%) rename {src => apps/remix-ide/src}/app/tabs/plugin-tab.js (100%) rename {src => apps/remix-ide/src}/app/tabs/runTab/contractDropdown.js (100%) rename {src => apps/remix-ide/src}/app/tabs/runTab/model/dropdownlogic.js (100%) rename {src => apps/remix-ide/src}/app/tabs/runTab/model/recorder.js (100%) rename {src => apps/remix-ide/src}/app/tabs/runTab/recorder.js (100%) rename {src => apps/remix-ide/src}/app/tabs/runTab/settings.js (100%) rename {src => apps/remix-ide/src}/app/tabs/settings-tab.js (100%) rename {src => apps/remix-ide/src}/app/tabs/staticanalysis/staticAnalysisView.js (100%) rename {src => apps/remix-ide/src}/app/tabs/staticanalysis/styles/staticAnalysisView-styles.js (100%) rename {src => apps/remix-ide/src}/app/tabs/styles/analysis-tab-styles.js (100%) rename {src => apps/remix-ide/src}/app/tabs/styles/compile-tab-styles.js (100%) rename {src => apps/remix-ide/src}/app/tabs/styles/debugger-tab-styles.js (100%) rename {src => apps/remix-ide/src}/app/tabs/styles/plugin-tab-styles.js (100%) rename {src => apps/remix-ide/src}/app/tabs/styles/run-tab-styles.js (100%) rename {src => apps/remix-ide/src}/app/tabs/styles/settings-tab-styles.js (100%) rename {src => apps/remix-ide/src}/app/tabs/styles/support-tab-styles.js (100%) rename {src => apps/remix-ide/src}/app/tabs/styles/tabbed-menu-styles.js (100%) rename {src => apps/remix-ide/src}/app/tabs/styles/test-tab-styles.js (100%) rename {src => apps/remix-ide/src}/app/tabs/test-tab.js (100%) rename {src => apps/remix-ide/src}/app/tabs/testTab/testTab.js (100%) rename {src => apps/remix-ide/src}/app/tabs/theme-module.js (100%) rename {src => apps/remix-ide/src}/app/tabs/web3-provider.js (100%) rename {src => apps/remix-ide/src}/app/udapp/index.js (100%) rename {src => apps/remix-ide/src}/app/udapp/make-udapp.js (100%) rename {src => apps/remix-ide/src}/app/udapp/run-tab.js (100%) rename {src => apps/remix-ide/src}/app/ui/TreeView.js (100%) rename {src => apps/remix-ide/src}/app/ui/auto-complete-popup.js (100%) rename {src => apps/remix-ide/src}/app/ui/card.js (100%) rename {src => apps/remix-ide/src}/app/ui/confirmDialog.js (100%) rename {src => apps/remix-ide/src}/app/ui/contextMenu.js (100%) rename {src => apps/remix-ide/src}/app/ui/copy-to-clipboard.js (100%) rename {src => apps/remix-ide/src}/app/ui/draggableContent.js (100%) rename {src => apps/remix-ide/src}/app/ui/dropdown.js (100%) rename {src => apps/remix-ide/src}/app/ui/landing-page/landing-page.js (100%) rename {src => apps/remix-ide/src}/app/ui/landing-page/workspace.js (100%) rename {src => apps/remix-ide/src}/app/ui/modal-dialog-custom.js (100%) rename {src => apps/remix-ide/src}/app/ui/modaldialog.js (100%) rename {src => apps/remix-ide/src}/app/ui/multiParamManager.js (100%) rename {src => apps/remix-ide/src}/app/ui/persmission-handler.js (100%) rename {src => apps/remix-ide/src}/app/ui/renderer.js (100%) rename {src => apps/remix-ide/src}/app/ui/sendTxCallbacks.js (100%) rename {src => apps/remix-ide/src}/app/ui/styles-guide/styleGuideClean.js (100%) rename {src => apps/remix-ide/src}/app/ui/styles/auto-complete-popup-styles.js (100%) rename {src => apps/remix-ide/src}/app/ui/styles/dropdown-styles.js (100%) rename {src => apps/remix-ide/src}/app/ui/styles/modal-dialog-custom-styles.js (100%) rename {src => apps/remix-ide/src}/app/ui/styles/modaldialog-styles.js (100%) rename {src => apps/remix-ide/src}/app/ui/styles/renderer-styles.js (100%) rename {src => apps/remix-ide/src}/app/ui/styles/tooltip-styles.js (100%) rename {src => apps/remix-ide/src}/app/ui/svgLogo.js (100%) rename {src => apps/remix-ide/src}/app/ui/tooltip.js (100%) rename {src => apps/remix-ide/src}/app/ui/txLogger.js (100%) rename {src => apps/remix-ide/src}/app/ui/universal-dapp-ui.js (100%) rename {src => apps/remix-ide/src}/blockchain/blockchain.js (100%) rename {src => apps/remix-ide/src}/blockchain/pluginUDapp.js (100%) rename {src => apps/remix-ide/src}/blockchain/providers/injected.js (100%) rename {src => apps/remix-ide/src}/blockchain/providers/node.js (100%) rename {src => apps/remix-ide/src}/blockchain/providers/vm.js (100%) rename {src => apps/remix-ide/src}/blockchain/txResultHelper.js (100%) rename {src => apps/remix-ide/src}/config.js (100%) rename {src => apps/remix-ide/src}/framingService.js (100%) rename {src => apps/remix-ide/src}/global/registry.js (100%) rename {src => apps/remix-ide/src}/index.js (100%) rename {src => apps/remix-ide/src}/lib/cmdInterpreterAPI.js (100%) rename {src => apps/remix-ide/src}/lib/commands.js (100%) rename {src => apps/remix-ide/src}/lib/events.js (100%) rename {src => apps/remix-ide/src}/lib/gist-handler.js (100%) rename {src => apps/remix-ide/src}/lib/helper.js (100%) rename {src => apps/remix-ide/src}/lib/offsetToLineColumnConverter.js (100%) rename {src => apps/remix-ide/src}/lib/panels-resize.js (100%) rename {src => apps/remix-ide/src}/lib/publishOnIpfs.js (100%) rename {src => apps/remix-ide/src}/lib/publishOnSwarm.js (100%) rename {src => apps/remix-ide/src}/lib/query-params.js (100%) rename {src => apps/remix-ide/src}/lib/remixd.js (100%) rename {src => apps/remix-ide/src}/lib/transactionReceiptResolver.js (100%) rename {src => apps/remix-ide/src}/loadFilesFromParent.js (100%) rename {src => apps/remix-ide/src}/migrateFileSystem.js (100%) rename {src => apps/remix-ide/src}/publishToStorage.js (100%) rename {src => apps/remix-ide/src}/registry.js (100%) rename {src => apps/remix-ide/src}/remixAppManager.js (100%) rename {src => apps/remix-ide/src}/universal-dapp-styles.js (100%) rename team-best-practices.md => apps/remix-ide/team-best-practices.md (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/addAtAddressInstance.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/addFile.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/checkElementStyle.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/checkTerminalFilter.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/checkVariableDebug.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/clickElementAtPosition.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/clickFunction.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/clickInstance.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/clickLaunchIcon.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/createContract.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/debugTransaction.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/executeScript.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/getAddressAtPosition.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/getEditorValue.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/getInstalledPlugins.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/getModalBody.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/goToVMTraceStep.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/journalChildIncludes.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/journalLastChild.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/journalLastChildIncludes.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/modalFooterCancelClick.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/modalFooterOKClick.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/notContainsText.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/removeFile.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/renameFile.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/rightClick.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/scrollAndClick.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/scrollInto.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/selectAccount.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/selectContract.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/sendLowLevelTx.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/setEditorValue.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/setSolidityCompilerVersion.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/setupMetamask.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/signMessage.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/switchBrowserTab.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/switchBrowserWindow.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/switchFile.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/testConstantFunction.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/testContracts.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/testEditorValue.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/testFunction.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/verifyCallReturnValue.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/verifyContracts.js (100%) rename {test-browser => apps/remix-ide/test-browser}/commands/waitForElementContainsText.js (100%) rename {test-browser => apps/remix-ide/test-browser}/extensions/chrome/metamask.crx (100%) rename {test-browser => apps/remix-ide/test-browser}/helpers/applytestmode.js (100%) rename {test-browser => apps/remix-ide/test-browser}/helpers/init.js (100%) rename {test-browser => apps/remix-ide/test-browser}/mockcompiler/compiler.js (100%) rename {test-browser => apps/remix-ide/test-browser}/tests/ballot.test.js (100%) rename {test-browser => apps/remix-ide/test-browser}/tests/debugger.test.js (100%) rename {test-browser => apps/remix-ide/test-browser}/tests/defaultLayout.test.js (100%) rename {test-browser => apps/remix-ide/test-browser}/tests/editor.test.js (100%) rename {test-browser => apps/remix-ide/test-browser}/tests/fileExplorer.test.js (100%) rename {test-browser => apps/remix-ide/test-browser}/tests/generalSettings.test.js (100%) rename {test-browser => apps/remix-ide/test-browser}/tests/gist.test.js (100%) rename {test-browser => apps/remix-ide/test-browser}/tests/libraryDeployment.test.js (100%) rename {test-browser => apps/remix-ide/test-browser}/tests/pluginManager.test.js (100%) rename {test-browser => apps/remix-ide/test-browser}/tests/publishContract.test.js (100%) rename {test-browser => apps/remix-ide/test-browser}/tests/recorder.test.js (100%) rename {test-browser => apps/remix-ide/test-browser}/tests/remixd.test.js (100%) rename {test-browser => apps/remix-ide/test-browser}/tests/runAndDeploy.js (100%) rename {test-browser => apps/remix-ide/test-browser}/tests/sauce.js (100%) rename {test-browser => apps/remix-ide/test-browser}/tests/signingMessage.test.js (100%) rename {test-browser => apps/remix-ide/test-browser}/tests/solidityImport.test.js (100%) rename {test-browser => apps/remix-ide/test-browser}/tests/solidityUnittests.test.js (100%) rename {test-browser => apps/remix-ide/test-browser}/tests/specialFunctions.test.js (100%) rename {test-browser => apps/remix-ide/test-browser}/tests/staticAnalysis.test.js (100%) rename {test-browser => apps/remix-ide/test-browser}/tests/terminal.test.js (100%) rename {test-browser => apps/remix-ide/test-browser}/tests/transactionExecution.test.js (100%) rename {test-browser => apps/remix-ide/test-browser}/tests/workspace.test.js (100%) rename {test => apps/remix-ide/test}/compiler-test.js (100%) rename {test => apps/remix-ide/test}/gist-handler-test.js (100%) rename {test => apps/remix-ide/test}/index.js (100%) rename {test => apps/remix-ide/test}/query-params-test.js (100%) diff --git a/.babelrc b/apps/remix-ide/.babelrc similarity index 100% rename from .babelrc rename to apps/remix-ide/.babelrc diff --git a/.circleci/config.yml b/apps/remix-ide/.circleci/config.yml similarity index 100% rename from .circleci/config.yml rename to apps/remix-ide/.circleci/config.yml diff --git a/.env b/apps/remix-ide/.env similarity index 100% rename from .env rename to apps/remix-ide/.env diff --git a/.gitignore b/apps/remix-ide/.gitignore similarity index 100% rename from .gitignore rename to apps/remix-ide/.gitignore diff --git a/.npmignore b/apps/remix-ide/.npmignore similarity index 100% rename from .npmignore rename to apps/remix-ide/.npmignore diff --git a/.nvmrc b/apps/remix-ide/.nvmrc similarity index 100% rename from .nvmrc rename to apps/remix-ide/.nvmrc diff --git a/.travis.yml b/apps/remix-ide/.travis.yml similarity index 100% rename from .travis.yml rename to apps/remix-ide/.travis.yml diff --git a/LICENSE.md b/apps/remix-ide/LICENSE.md similarity index 100% rename from LICENSE.md rename to apps/remix-ide/LICENSE.md diff --git a/README.md b/apps/remix-ide/README.md similarity index 100% rename from README.md rename to apps/remix-ide/README.md diff --git a/_config.yml b/apps/remix-ide/_config.yml similarity index 100% rename from _config.yml rename to apps/remix-ide/_config.yml diff --git a/background.js b/apps/remix-ide/background.js similarity index 100% rename from background.js rename to apps/remix-ide/background.js diff --git a/best-practices.md b/apps/remix-ide/best-practices.md similarity index 100% rename from best-practices.md rename to apps/remix-ide/best-practices.md diff --git a/bin/remix-ide b/apps/remix-ide/bin/remix-ide similarity index 100% rename from bin/remix-ide rename to apps/remix-ide/bin/remix-ide diff --git a/ci/browser_tests.sh b/apps/remix-ide/ci/browser_tests.sh similarity index 100% rename from ci/browser_tests.sh rename to apps/remix-ide/ci/browser_tests.sh diff --git a/ci/browser_tests_chrome.sh b/apps/remix-ide/ci/browser_tests_chrome.sh similarity index 100% rename from ci/browser_tests_chrome.sh rename to apps/remix-ide/ci/browser_tests_chrome.sh diff --git a/ci/browser_tests_firefox.sh b/apps/remix-ide/ci/browser_tests_firefox.sh similarity index 100% rename from ci/browser_tests_firefox.sh rename to apps/remix-ide/ci/browser_tests_firefox.sh diff --git a/ci/browser_tests_run_deploy.sh b/apps/remix-ide/ci/browser_tests_run_deploy.sh similarity index 100% rename from ci/browser_tests_run_deploy.sh rename to apps/remix-ide/ci/browser_tests_run_deploy.sh diff --git a/ci/deploy_from_travis_remix-alpha.sh b/apps/remix-ide/ci/deploy_from_travis_remix-alpha.sh similarity index 100% rename from ci/deploy_from_travis_remix-alpha.sh rename to apps/remix-ide/ci/deploy_from_travis_remix-alpha.sh diff --git a/ci/deploy_from_travis_remix-live.sh b/apps/remix-ide/ci/deploy_from_travis_remix-live.sh similarity index 100% rename from ci/deploy_from_travis_remix-live.sh rename to apps/remix-ide/ci/deploy_from_travis_remix-live.sh diff --git a/ci/deploy_key_remix-live-alpha.enc b/apps/remix-ide/ci/deploy_key_remix-live-alpha.enc similarity index 100% rename from ci/deploy_key_remix-live-alpha.enc rename to apps/remix-ide/ci/deploy_key_remix-live-alpha.enc diff --git a/ci/deploy_key_remix-live.enc b/apps/remix-ide/ci/deploy_key_remix-live.enc similarity index 100% rename from ci/deploy_key_remix-live.enc rename to apps/remix-ide/ci/deploy_key_remix-live.enc diff --git a/ci/makeMockCompiler.js b/apps/remix-ide/ci/makeMockCompiler.js similarity index 100% rename from ci/makeMockCompiler.js rename to apps/remix-ide/ci/makeMockCompiler.js diff --git a/ci/sauceDisconnect.js b/apps/remix-ide/ci/sauceDisconnect.js similarity index 100% rename from ci/sauceDisconnect.js rename to apps/remix-ide/ci/sauceDisconnect.js diff --git a/contracts/app/ethereum/constitution.sol b/apps/remix-ide/contracts/app/ethereum/constitution.sol similarity index 100% rename from contracts/app/ethereum/constitution.sol rename to apps/remix-ide/contracts/app/ethereum/constitution.sol diff --git a/contracts/app/solidity/mode.sol b/apps/remix-ide/contracts/app/solidity/mode.sol similarity index 100% rename from contracts/app/solidity/mode.sol rename to apps/remix-ide/contracts/app/solidity/mode.sol diff --git a/contracts/ballot.sol b/apps/remix-ide/contracts/ballot.sol similarity index 100% rename from contracts/ballot.sol rename to apps/remix-ide/contracts/ballot.sol diff --git a/contracts/contract1.sol b/apps/remix-ide/contracts/contract1.sol similarity index 100% rename from contracts/contract1.sol rename to apps/remix-ide/contracts/contract1.sol diff --git a/contracts/contract2.sol b/apps/remix-ide/contracts/contract2.sol similarity index 100% rename from contracts/contract2.sol rename to apps/remix-ide/contracts/contract2.sol diff --git a/contracts/folder1/contract1.sol b/apps/remix-ide/contracts/folder1/contract1.sol similarity index 100% rename from contracts/folder1/contract1.sol rename to apps/remix-ide/contracts/folder1/contract1.sol diff --git a/contracts/folder1/contract2.sol b/apps/remix-ide/contracts/folder1/contract2.sol similarity index 100% rename from contracts/folder1/contract2.sol rename to apps/remix-ide/contracts/folder1/contract2.sol diff --git a/contracts/folder1/contract_chrome.sol b/apps/remix-ide/contracts/folder1/contract_chrome.sol similarity index 100% rename from contracts/folder1/contract_chrome.sol rename to apps/remix-ide/contracts/folder1/contract_chrome.sol diff --git a/contracts/folder1/contract_chrome_toremove.sol b/apps/remix-ide/contracts/folder1/contract_chrome_toremove.sol similarity index 100% rename from contracts/folder1/contract_chrome_toremove.sol rename to apps/remix-ide/contracts/folder1/contract_chrome_toremove.sol diff --git a/contracts/folder1/contract_firefox.sol b/apps/remix-ide/contracts/folder1/contract_firefox.sol similarity index 100% rename from contracts/folder1/contract_firefox.sol rename to apps/remix-ide/contracts/folder1/contract_firefox.sol diff --git a/contracts/folder1/contract_firefox_toremove.sol b/apps/remix-ide/contracts/folder1/contract_firefox_toremove.sol similarity index 100% rename from contracts/folder1/contract_firefox_toremove.sol rename to apps/remix-ide/contracts/folder1/contract_firefox_toremove.sol diff --git a/contracts/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol b/apps/remix-ide/contracts/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol similarity index 100% rename from contracts/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol rename to apps/remix-ide/contracts/node_modules/openzeppelin-solidity/contracts/math/SafeMath.sol diff --git a/contracts/node_modules/openzeppelin-solidity/contracts/sample.sol b/apps/remix-ide/contracts/node_modules/openzeppelin-solidity/contracts/sample.sol similarity index 100% rename from contracts/node_modules/openzeppelin-solidity/contracts/sample.sol rename to apps/remix-ide/contracts/node_modules/openzeppelin-solidity/contracts/sample.sol diff --git a/contracts/src/gmbh/company.sol b/apps/remix-ide/contracts/src/gmbh/company.sol similarity index 100% rename from contracts/src/gmbh/company.sol rename to apps/remix-ide/contracts/src/gmbh/company.sol diff --git a/contracts/src/gmbh/contract.sol b/apps/remix-ide/contracts/src/gmbh/contract.sol similarity index 100% rename from contracts/src/gmbh/contract.sol rename to apps/remix-ide/contracts/src/gmbh/contract.sol diff --git a/contracts/src/gmbh/test.sol b/apps/remix-ide/contracts/src/gmbh/test.sol similarity index 100% rename from contracts/src/gmbh/test.sol rename to apps/remix-ide/contracts/src/gmbh/test.sol diff --git a/contracts/src/leasing.sol b/apps/remix-ide/contracts/src/leasing.sol similarity index 100% rename from contracts/src/leasing.sol rename to apps/remix-ide/contracts/src/leasing.sol diff --git a/contracts/src/ug/finance.sol b/apps/remix-ide/contracts/src/ug/finance.sol similarity index 100% rename from contracts/src/ug/finance.sol rename to apps/remix-ide/contracts/src/ug/finance.sol diff --git a/contracts/src/voting.sol b/apps/remix-ide/contracts/src/voting.sol similarity index 100% rename from contracts/src/voting.sol rename to apps/remix-ide/contracts/src/voting.sol diff --git a/contracts/test/client/credit.sol b/apps/remix-ide/contracts/test/client/credit.sol similarity index 100% rename from contracts/test/client/credit.sol rename to apps/remix-ide/contracts/test/client/credit.sol diff --git a/assets/css/font-awesome.min.css b/apps/remix-ide/css/font-awesome.min.css similarity index 100% rename from assets/css/font-awesome.min.css rename to apps/remix-ide/css/font-awesome.min.css diff --git a/assets/css/pygment_trac.css b/apps/remix-ide/css/pygment_trac.css similarity index 100% rename from assets/css/pygment_trac.css rename to apps/remix-ide/css/pygment_trac.css diff --git a/docs/FAQ.md b/apps/remix-ide/docs/FAQ.md similarity index 100% rename from docs/FAQ.md rename to apps/remix-ide/docs/FAQ.md diff --git a/docs/Makefile b/apps/remix-ide/docs/Makefile similarity index 100% rename from docs/Makefile rename to apps/remix-ide/docs/Makefile diff --git a/docs/assert_library.md b/apps/remix-ide/docs/assert_library.md similarity index 100% rename from docs/assert_library.md rename to apps/remix-ide/docs/assert_library.md diff --git a/docs/code_contribution_guide.md b/apps/remix-ide/docs/code_contribution_guide.md similarity index 100% rename from docs/code_contribution_guide.md rename to apps/remix-ide/docs/code_contribution_guide.md diff --git a/docs/community.md b/apps/remix-ide/docs/community.md similarity index 100% rename from docs/community.md rename to apps/remix-ide/docs/community.md diff --git a/docs/compile.md b/apps/remix-ide/docs/compile.md similarity index 100% rename from docs/compile.md rename to apps/remix-ide/docs/compile.md diff --git a/docs/conf.py b/apps/remix-ide/docs/conf.py similarity index 100% rename from docs/conf.py rename to apps/remix-ide/docs/conf.py diff --git a/docs/contract_metadata.md b/apps/remix-ide/docs/contract_metadata.md similarity index 100% rename from docs/contract_metadata.md rename to apps/remix-ide/docs/contract_metadata.md diff --git a/docs/create_deploy.md b/apps/remix-ide/docs/create_deploy.md similarity index 100% rename from docs/create_deploy.md rename to apps/remix-ide/docs/create_deploy.md diff --git a/docs/debugger.md b/apps/remix-ide/docs/debugger.md similarity index 100% rename from docs/debugger.md rename to apps/remix-ide/docs/debugger.md diff --git a/docs/file_explorer.md b/apps/remix-ide/docs/file_explorer.md similarity index 100% rename from docs/file_explorer.md rename to apps/remix-ide/docs/file_explorer.md diff --git a/docs/images/a-Runtab-deploy-atAddress.png b/apps/remix-ide/docs/images/a-Runtab-deploy-atAddress.png similarity index 100% rename from docs/images/a-Runtab-deploy-atAddress.png rename to apps/remix-ide/docs/images/a-Runtab-deploy-atAddress.png diff --git a/docs/images/a-contract-inputs.png b/apps/remix-ide/docs/images/a-contract-inputs.png similarity index 100% rename from docs/images/a-contract-inputs.png rename to apps/remix-ide/docs/images/a-contract-inputs.png diff --git a/docs/images/a-debug1-deploy.png b/apps/remix-ide/docs/images/a-debug1-deploy.png similarity index 100% rename from docs/images/a-debug1-deploy.png rename to apps/remix-ide/docs/images/a-debug1-deploy.png diff --git a/docs/images/a-debug2-udapp1.png b/apps/remix-ide/docs/images/a-debug2-udapp1.png similarity index 100% rename from docs/images/a-debug2-udapp1.png rename to apps/remix-ide/docs/images/a-debug2-udapp1.png diff --git a/docs/images/a-debug2-udapp1a.png b/apps/remix-ide/docs/images/a-debug2-udapp1a.png similarity index 100% rename from docs/images/a-debug2-udapp1a.png rename to apps/remix-ide/docs/images/a-debug2-udapp1a.png diff --git a/docs/images/a-debug3-udapp2.png b/apps/remix-ide/docs/images/a-debug3-udapp2.png similarity index 100% rename from docs/images/a-debug3-udapp2.png rename to apps/remix-ide/docs/images/a-debug3-udapp2.png diff --git a/docs/images/a-debug4-value-loc.png b/apps/remix-ide/docs/images/a-debug4-value-loc.png similarity index 100% rename from docs/images/a-debug4-value-loc.png rename to apps/remix-ide/docs/images/a-debug4-value-loc.png diff --git a/docs/images/a-debug5-term-debug-but.png b/apps/remix-ide/docs/images/a-debug5-term-debug-but.png similarity index 100% rename from docs/images/a-debug5-term-debug-but.png rename to apps/remix-ide/docs/images/a-debug5-term-debug-but.png diff --git a/docs/images/a-debug6-term-txn-hash.png b/apps/remix-ide/docs/images/a-debug6-term-txn-hash.png similarity index 100% rename from docs/images/a-debug6-term-txn-hash.png rename to apps/remix-ide/docs/images/a-debug6-term-txn-hash.png diff --git a/docs/images/a-debug7-debugger.png b/apps/remix-ide/docs/images/a-debug7-debugger.png similarity index 100% rename from docs/images/a-debug7-debugger.png rename to apps/remix-ide/docs/images/a-debug7-debugger.png diff --git a/docs/images/a-debug8-top3.png b/apps/remix-ide/docs/images/a-debug8-top3.png similarity index 100% rename from docs/images/a-debug8-top3.png rename to apps/remix-ide/docs/images/a-debug8-top3.png diff --git a/docs/images/a-debug9-buttons.png b/apps/remix-ide/docs/images/a-debug9-buttons.png similarity index 100% rename from docs/images/a-debug9-buttons.png rename to apps/remix-ide/docs/images/a-debug9-buttons.png diff --git a/docs/images/a-debugger.png b/apps/remix-ide/docs/images/a-debugger.png similarity index 100% rename from docs/images/a-debugger.png rename to apps/remix-ide/docs/images/a-debugger.png diff --git a/docs/images/a-file-ex-rt-click-folder.png b/apps/remix-ide/docs/images/a-file-ex-rt-click-folder.png similarity index 100% rename from docs/images/a-file-ex-rt-click-folder.png rename to apps/remix-ide/docs/images/a-file-ex-rt-click-folder.png diff --git a/docs/images/a-file-ex-rt-click.png b/apps/remix-ide/docs/images/a-file-ex-rt-click.png similarity index 100% rename from docs/images/a-file-ex-rt-click.png rename to apps/remix-ide/docs/images/a-file-ex-rt-click.png diff --git a/docs/images/a-file-explorer-buttons-big.png b/apps/remix-ide/docs/images/a-file-explorer-buttons-big.png similarity index 100% rename from docs/images/a-file-explorer-buttons-big.png rename to apps/remix-ide/docs/images/a-file-explorer-buttons-big.png diff --git a/docs/images/a-file-explorer-buttons.png b/apps/remix-ide/docs/images/a-file-explorer-buttons.png similarity index 100% rename from docs/images/a-file-explorer-buttons.png rename to apps/remix-ide/docs/images/a-file-explorer-buttons.png diff --git a/docs/images/a-file-explorer1.png b/apps/remix-ide/docs/images/a-file-explorer1.png similarity index 100% rename from docs/images/a-file-explorer1.png rename to apps/remix-ide/docs/images/a-file-explorer1.png diff --git a/docs/images/a-home-page.png b/apps/remix-ide/docs/images/a-home-page.png similarity index 100% rename from docs/images/a-home-page.png rename to apps/remix-ide/docs/images/a-home-page.png diff --git a/docs/images/a-hometab.png b/apps/remix-ide/docs/images/a-hometab.png similarity index 100% rename from docs/images/a-hometab.png rename to apps/remix-ide/docs/images/a-hometab.png diff --git a/docs/images/a-icon-swap.png b/apps/remix-ide/docs/images/a-icon-swap.png similarity index 100% rename from docs/images/a-icon-swap.png rename to apps/remix-ide/docs/images/a-icon-swap.png diff --git a/docs/images/a-icons-at-load.png b/apps/remix-ide/docs/images/a-icons-at-load.png similarity index 100% rename from docs/images/a-icons-at-load.png rename to apps/remix-ide/docs/images/a-icons-at-load.png diff --git a/docs/images/a-jvm-calling-instance.png b/apps/remix-ide/docs/images/a-jvm-calling-instance.png similarity index 100% rename from docs/images/a-jvm-calling-instance.png rename to apps/remix-ide/docs/images/a-jvm-calling-instance.png diff --git a/docs/images/a-jvm-instance.png b/apps/remix-ide/docs/images/a-jvm-instance.png similarity index 100% rename from docs/images/a-jvm-instance.png rename to apps/remix-ide/docs/images/a-jvm-instance.png diff --git a/docs/images/a-jvm.png b/apps/remix-ide/docs/images/a-jvm.png similarity index 100% rename from docs/images/a-jvm.png rename to apps/remix-ide/docs/images/a-jvm.png diff --git a/docs/images/a-layout1.png b/apps/remix-ide/docs/images/a-layout1.png similarity index 100% rename from docs/images/a-layout1.png rename to apps/remix-ide/docs/images/a-layout1.png diff --git a/docs/images/a-layout1c.png b/apps/remix-ide/docs/images/a-layout1c.png similarity index 100% rename from docs/images/a-layout1c.png rename to apps/remix-ide/docs/images/a-layout1c.png diff --git a/docs/images/a-old-tuto_basicimport.png b/apps/remix-ide/docs/images/a-old-tuto_basicimport.png similarity index 100% rename from docs/images/a-old-tuto_basicimport.png rename to apps/remix-ide/docs/images/a-old-tuto_basicimport.png diff --git a/docs/images/a-old-tuto_importgit.png b/apps/remix-ide/docs/images/a-old-tuto_importgit.png similarity index 100% rename from docs/images/a-old-tuto_importgit.png rename to apps/remix-ide/docs/images/a-old-tuto_importgit.png diff --git a/docs/images/a-old-tuto_importswarm.png b/apps/remix-ide/docs/images/a-old-tuto_importswarm.png similarity index 100% rename from docs/images/a-old-tuto_importswarm.png rename to apps/remix-ide/docs/images/a-old-tuto_importswarm.png diff --git a/docs/images/a-plug.png b/apps/remix-ide/docs/images/a-plug.png similarity index 100% rename from docs/images/a-plug.png rename to apps/remix-ide/docs/images/a-plug.png diff --git a/docs/images/a-plugin-man-local.png b/apps/remix-ide/docs/images/a-plugin-man-local.png similarity index 100% rename from docs/images/a-plugin-man-local.png rename to apps/remix-ide/docs/images/a-plugin-man-local.png diff --git a/docs/images/a-receive-fun.png b/apps/remix-ide/docs/images/a-receive-fun.png similarity index 100% rename from docs/images/a-receive-fun.png rename to apps/remix-ide/docs/images/a-receive-fun.png diff --git a/docs/images/a-remixd-success.png b/apps/remix-ide/docs/images/a-remixd-success.png similarity index 100% rename from docs/images/a-remixd-success.png rename to apps/remix-ide/docs/images/a-remixd-success.png diff --git a/docs/images/a-run-icon.png b/apps/remix-ide/docs/images/a-run-icon.png similarity index 100% rename from docs/images/a-run-icon.png rename to apps/remix-ide/docs/images/a-run-icon.png diff --git a/docs/images/a-runtab-recorder.png b/apps/remix-ide/docs/images/a-runtab-recorder.png similarity index 100% rename from docs/images/a-runtab-recorder.png rename to apps/remix-ide/docs/images/a-runtab-recorder.png diff --git a/docs/images/a-runtab1a.png b/apps/remix-ide/docs/images/a-runtab1a.png similarity index 100% rename from docs/images/a-runtab1a.png rename to apps/remix-ide/docs/images/a-runtab1a.png diff --git a/docs/images/a-sol-compiler.png b/apps/remix-ide/docs/images/a-sol-compiler.png similarity index 100% rename from docs/images/a-sol-compiler.png rename to apps/remix-ide/docs/images/a-sol-compiler.png diff --git a/docs/images/a-sol-editor.png b/apps/remix-ide/docs/images/a-sol-editor.png similarity index 100% rename from docs/images/a-sol-editor.png rename to apps/remix-ide/docs/images/a-sol-editor.png diff --git a/docs/images/a-static-analysis.png b/apps/remix-ide/docs/images/a-static-analysis.png similarity index 100% rename from docs/images/a-static-analysis.png rename to apps/remix-ide/docs/images/a-static-analysis.png diff --git a/docs/images/a-terminal-and-more.png b/apps/remix-ide/docs/images/a-terminal-and-more.png similarity index 100% rename from docs/images/a-terminal-and-more.png rename to apps/remix-ide/docs/images/a-terminal-and-more.png diff --git a/docs/images/a-themes.png b/apps/remix-ide/docs/images/a-themes.png similarity index 100% rename from docs/images/a-themes.png rename to apps/remix-ide/docs/images/a-themes.png diff --git a/docs/images/a-udapp-inputs.png b/apps/remix-ide/docs/images/a-udapp-inputs.png similarity index 100% rename from docs/images/a-udapp-inputs.png rename to apps/remix-ide/docs/images/a-udapp-inputs.png diff --git a/docs/images/a-udapp-multi-param-man.png b/apps/remix-ide/docs/images/a-udapp-multi-param-man.png similarity index 100% rename from docs/images/a-udapp-multi-param-man.png rename to apps/remix-ide/docs/images/a-udapp-multi-param-man.png diff --git a/docs/images/a-udapp1.png b/apps/remix-ide/docs/images/a-udapp1.png similarity index 100% rename from docs/images/a-udapp1.png rename to apps/remix-ide/docs/images/a-udapp1.png diff --git a/docs/images/a-udapp2.png b/apps/remix-ide/docs/images/a-udapp2.png similarity index 100% rename from docs/images/a-udapp2.png rename to apps/remix-ide/docs/images/a-udapp2.png diff --git a/docs/images/a-unit-testing-custom-compiler-config.png b/apps/remix-ide/docs/images/a-unit-testing-custom-compiler-config.png similarity index 100% rename from docs/images/a-unit-testing-custom-compiler-config.png rename to apps/remix-ide/docs/images/a-unit-testing-custom-compiler-config.png diff --git a/docs/images/a-unit-testing-feature.png b/apps/remix-ide/docs/images/a-unit-testing-feature.png similarity index 100% rename from docs/images/a-unit-testing-feature.png rename to apps/remix-ide/docs/images/a-unit-testing-feature.png diff --git a/docs/images/a-unit-testing-from-pm.png b/apps/remix-ide/docs/images/a-unit-testing-from-pm.png similarity index 100% rename from docs/images/a-unit-testing-from-pm.png rename to apps/remix-ide/docs/images/a-unit-testing-from-pm.png diff --git a/docs/images/a-unit-testing-run-result.png b/apps/remix-ide/docs/images/a-unit-testing-run-result.png similarity index 100% rename from docs/images/a-unit-testing-run-result.png rename to apps/remix-ide/docs/images/a-unit-testing-run-result.png diff --git a/docs/images/a-user-testing-icon.png b/apps/remix-ide/docs/images/a-user-testing-icon.png similarity index 100% rename from docs/images/a-user-testing-icon.png rename to apps/remix-ide/docs/images/a-user-testing-icon.png diff --git a/docs/import.md b/apps/remix-ide/docs/import.md similarity index 100% rename from docs/import.md rename to apps/remix-ide/docs/import.md diff --git a/docs/index.rst b/apps/remix-ide/docs/index.rst similarity index 100% rename from docs/index.rst rename to apps/remix-ide/docs/index.rst diff --git a/docs/layout.md b/apps/remix-ide/docs/layout.md similarity index 100% rename from docs/layout.md rename to apps/remix-ide/docs/layout.md diff --git a/docs/locations.md b/apps/remix-ide/docs/locations.md similarity index 100% rename from docs/locations.md rename to apps/remix-ide/docs/locations.md diff --git a/docs/make.bat b/apps/remix-ide/docs/make.bat similarity index 100% rename from docs/make.bat rename to apps/remix-ide/docs/make.bat diff --git a/docs/plugin_manager.md b/apps/remix-ide/docs/plugin_manager.md similarity index 100% rename from docs/plugin_manager.md rename to apps/remix-ide/docs/plugin_manager.md diff --git a/docs/remix_commands.md b/apps/remix-ide/docs/remix_commands.md similarity index 100% rename from docs/remix_commands.md rename to apps/remix-ide/docs/remix_commands.md diff --git a/docs/remix_tutorials_github.md b/apps/remix-ide/docs/remix_tutorials_github.md similarity index 100% rename from docs/remix_tutorials_github.md rename to apps/remix-ide/docs/remix_tutorials_github.md diff --git a/docs/remixd.md b/apps/remix-ide/docs/remixd.md similarity index 100% rename from docs/remixd.md rename to apps/remix-ide/docs/remixd.md diff --git a/docs/run.md b/apps/remix-ide/docs/run.md similarity index 100% rename from docs/run.md rename to apps/remix-ide/docs/run.md diff --git a/docs/settings.md b/apps/remix-ide/docs/settings.md similarity index 100% rename from docs/settings.md rename to apps/remix-ide/docs/settings.md diff --git a/docs/solidity_editor.md b/apps/remix-ide/docs/solidity_editor.md similarity index 100% rename from docs/solidity_editor.md rename to apps/remix-ide/docs/solidity_editor.md diff --git a/docs/static_analysis.md b/apps/remix-ide/docs/static_analysis.md similarity index 100% rename from docs/static_analysis.md rename to apps/remix-ide/docs/static_analysis.md diff --git a/docs/support.md b/apps/remix-ide/docs/support.md similarity index 100% rename from docs/support.md rename to apps/remix-ide/docs/support.md diff --git a/docs/terminal.md b/apps/remix-ide/docs/terminal.md similarity index 100% rename from docs/terminal.md rename to apps/remix-ide/docs/terminal.md diff --git a/docs/tutorial_debug.md b/apps/remix-ide/docs/tutorial_debug.md similarity index 100% rename from docs/tutorial_debug.md rename to apps/remix-ide/docs/tutorial_debug.md diff --git a/docs/udapp.md b/apps/remix-ide/docs/udapp.md similarity index 100% rename from docs/udapp.md rename to apps/remix-ide/docs/udapp.md diff --git a/docs/unittesting.md b/apps/remix-ide/docs/unittesting.md similarity index 100% rename from docs/unittesting.md rename to apps/remix-ide/docs/unittesting.md diff --git a/docs/unittesting_examples.md b/apps/remix-ide/docs/unittesting_examples.md similarity index 100% rename from docs/unittesting_examples.md rename to apps/remix-ide/docs/unittesting_examples.md diff --git a/embark/README.md b/apps/remix-ide/embark/README.md similarity index 100% rename from embark/README.md rename to apps/remix-ide/embark/README.md diff --git a/embark/index.js b/apps/remix-ide/embark/index.js similarity index 100% rename from embark/index.js rename to apps/remix-ide/embark/index.js diff --git a/embark/package.json b/apps/remix-ide/embark/package.json similarity index 100% rename from embark/package.json rename to apps/remix-ide/embark/package.json diff --git a/assets/fonts/FontAwesome.otf b/apps/remix-ide/fonts/FontAwesome.otf similarity index 100% rename from assets/fonts/FontAwesome.otf rename to apps/remix-ide/fonts/FontAwesome.otf diff --git a/assets/fonts/fontawesome-webfont.eot b/apps/remix-ide/fonts/fontawesome-webfont.eot similarity index 100% rename from assets/fonts/fontawesome-webfont.eot rename to apps/remix-ide/fonts/fontawesome-webfont.eot diff --git a/assets/fonts/fontawesome-webfont.svg b/apps/remix-ide/fonts/fontawesome-webfont.svg similarity index 100% rename from assets/fonts/fontawesome-webfont.svg rename to apps/remix-ide/fonts/fontawesome-webfont.svg diff --git a/assets/fonts/fontawesome-webfont.ttf b/apps/remix-ide/fonts/fontawesome-webfont.ttf similarity index 100% rename from assets/fonts/fontawesome-webfont.ttf rename to apps/remix-ide/fonts/fontawesome-webfont.ttf diff --git a/assets/fonts/fontawesome-webfont.woff b/apps/remix-ide/fonts/fontawesome-webfont.woff similarity index 100% rename from assets/fonts/fontawesome-webfont.woff rename to apps/remix-ide/fonts/fontawesome-webfont.woff diff --git a/assets/fonts/fontawesome-webfont.woff2 b/apps/remix-ide/fonts/fontawesome-webfont.woff2 similarity index 100% rename from assets/fonts/fontawesome-webfont.woff2 rename to apps/remix-ide/fonts/fontawesome-webfont.woff2 diff --git a/icon.png b/apps/remix-ide/icon.png similarity index 100% rename from icon.png rename to apps/remix-ide/icon.png diff --git a/assets/img/debuggerLogo.webp b/apps/remix-ide/img/debuggerLogo.webp similarity index 100% rename from assets/img/debuggerLogo.webp rename to apps/remix-ide/img/debuggerLogo.webp diff --git a/assets/img/gasStation_50.png b/apps/remix-ide/img/gasStation_50.png similarity index 100% rename from assets/img/gasStation_50.png rename to apps/remix-ide/img/gasStation_50.png diff --git a/assets/img/hexagon-remix-greengrey-texture.png b/apps/remix-ide/img/hexagon-remix-greengrey-texture.png similarity index 100% rename from assets/img/hexagon-remix-greengrey-texture.png rename to apps/remix-ide/img/hexagon-remix-greengrey-texture.png diff --git a/assets/img/homeStickers.png b/apps/remix-ide/img/homeStickers.png similarity index 100% rename from assets/img/homeStickers.png rename to apps/remix-ide/img/homeStickers.png diff --git a/assets/img/moreLogo.webp b/apps/remix-ide/img/moreLogo.webp similarity index 100% rename from assets/img/moreLogo.webp rename to apps/remix-ide/img/moreLogo.webp diff --git a/assets/img/mythxLogo.webp b/apps/remix-ide/img/mythxLogo.webp similarity index 100% rename from assets/img/mythxLogo.webp rename to apps/remix-ide/img/mythxLogo.webp diff --git a/assets/img/pipelineLogo.webp b/apps/remix-ide/img/pipelineLogo.webp similarity index 100% rename from assets/img/pipelineLogo.webp rename to apps/remix-ide/img/pipelineLogo.webp diff --git a/assets/img/sleepingRemiCroped.webp b/apps/remix-ide/img/sleepingRemiCroped.webp similarity index 100% rename from assets/img/sleepingRemiCroped.webp rename to apps/remix-ide/img/sleepingRemiCroped.webp diff --git a/assets/img/solidityLogo.webp b/apps/remix-ide/img/solidityLogo.webp similarity index 100% rename from assets/img/solidityLogo.webp rename to apps/remix-ide/img/solidityLogo.webp diff --git a/assets/img/sourceVerifyLogo.webp b/apps/remix-ide/img/sourceVerifyLogo.webp similarity index 100% rename from assets/img/sourceVerifyLogo.webp rename to apps/remix-ide/img/sourceVerifyLogo.webp diff --git a/assets/img/vyperLogo.webp b/apps/remix-ide/img/vyperLogo.webp similarity index 100% rename from assets/img/vyperLogo.webp rename to apps/remix-ide/img/vyperLogo.webp diff --git a/assets/img/workshopLogo.webp b/apps/remix-ide/img/workshopLogo.webp similarity index 100% rename from assets/img/workshopLogo.webp rename to apps/remix-ide/img/workshopLogo.webp diff --git a/index.html b/apps/remix-ide/index.html similarity index 100% rename from index.html rename to apps/remix-ide/index.html diff --git a/assets/js/0.7.7/app.js b/apps/remix-ide/js/0.7.7/app.js similarity index 100% rename from assets/js/0.7.7/app.js rename to apps/remix-ide/js/0.7.7/app.js diff --git a/assets/js/browserfs.min.js b/apps/remix-ide/js/browserfs.min.js similarity index 100% rename from assets/js/browserfs.min.js rename to apps/remix-ide/js/browserfs.min.js diff --git a/manifest.json b/apps/remix-ide/manifest.json similarity index 100% rename from manifest.json rename to apps/remix-ide/manifest.json diff --git a/meetings.md b/apps/remix-ide/meetings.md similarity index 100% rename from meetings.md rename to apps/remix-ide/meetings.md diff --git a/nightwatch.js b/apps/remix-ide/nightwatch.js similarity index 100% rename from nightwatch.js rename to apps/remix-ide/nightwatch.js diff --git a/nightwatch_debugger.js b/apps/remix-ide/nightwatch_debugger.js similarity index 100% rename from nightwatch_debugger.js rename to apps/remix-ide/nightwatch_debugger.js diff --git a/package-lock.json b/apps/remix-ide/package-lock.json similarity index 100% rename from package-lock.json rename to apps/remix-ide/package-lock.json diff --git a/package.json b/apps/remix-ide/package.json similarity index 100% rename from package.json rename to apps/remix-ide/package.json diff --git a/release-process.md b/apps/remix-ide/release-process.md similarity index 100% rename from release-process.md rename to apps/remix-ide/release-process.md diff --git a/remix_screenshot.png b/apps/remix-ide/remix_screenshot.png similarity index 100% rename from remix_screenshot.png rename to apps/remix-ide/remix_screenshot.png diff --git a/research-project.md b/apps/remix-ide/research-project.md similarity index 100% rename from research-project.md rename to apps/remix-ide/research-project.md diff --git a/seleniumConfig.js b/apps/remix-ide/seleniumConfig.js similarity index 100% rename from seleniumConfig.js rename to apps/remix-ide/seleniumConfig.js diff --git a/src/app.js b/apps/remix-ide/src/app.js similarity index 100% rename from src/app.js rename to apps/remix-ide/src/app.js diff --git a/src/app/compiler/compiler-abstract.js b/apps/remix-ide/src/app/compiler/compiler-abstract.js similarity index 100% rename from src/app/compiler/compiler-abstract.js rename to apps/remix-ide/src/app/compiler/compiler-abstract.js diff --git a/src/app/compiler/compiler-artefacts.js b/apps/remix-ide/src/app/compiler/compiler-artefacts.js similarity index 100% rename from src/app/compiler/compiler-artefacts.js rename to apps/remix-ide/src/app/compiler/compiler-artefacts.js diff --git a/src/app/compiler/compiler-helpers.js b/apps/remix-ide/src/app/compiler/compiler-helpers.js similarity index 100% rename from src/app/compiler/compiler-helpers.js rename to apps/remix-ide/src/app/compiler/compiler-helpers.js diff --git a/src/app/compiler/compiler-imports.js b/apps/remix-ide/src/app/compiler/compiler-imports.js similarity index 100% rename from src/app/compiler/compiler-imports.js rename to apps/remix-ide/src/app/compiler/compiler-imports.js diff --git a/src/app/compiler/compiler-input.js b/apps/remix-ide/src/app/compiler/compiler-input.js similarity index 100% rename from src/app/compiler/compiler-input.js rename to apps/remix-ide/src/app/compiler/compiler-input.js diff --git a/src/app/compiler/compiler-sourceVerifier-fetchAndCompile.js b/apps/remix-ide/src/app/compiler/compiler-sourceVerifier-fetchAndCompile.js similarity index 100% rename from src/app/compiler/compiler-sourceVerifier-fetchAndCompile.js rename to apps/remix-ide/src/app/compiler/compiler-sourceVerifier-fetchAndCompile.js diff --git a/src/app/compiler/compiler-utils.js b/apps/remix-ide/src/app/compiler/compiler-utils.js similarity index 100% rename from src/app/compiler/compiler-utils.js rename to apps/remix-ide/src/app/compiler/compiler-utils.js diff --git a/src/app/components/hidden-panel.js b/apps/remix-ide/src/app/components/hidden-panel.js similarity index 100% rename from src/app/components/hidden-panel.js rename to apps/remix-ide/src/app/components/hidden-panel.js diff --git a/src/app/components/local-plugin.js b/apps/remix-ide/src/app/components/local-plugin.js similarity index 100% rename from src/app/components/local-plugin.js rename to apps/remix-ide/src/app/components/local-plugin.js diff --git a/src/app/components/main-panel.js b/apps/remix-ide/src/app/components/main-panel.js similarity index 100% rename from src/app/components/main-panel.js rename to apps/remix-ide/src/app/components/main-panel.js diff --git a/src/app/components/panel.js b/apps/remix-ide/src/app/components/panel.js similarity index 100% rename from src/app/components/panel.js rename to apps/remix-ide/src/app/components/panel.js diff --git a/src/app/components/plugin-manager-component.js b/apps/remix-ide/src/app/components/plugin-manager-component.js similarity index 100% rename from src/app/components/plugin-manager-component.js rename to apps/remix-ide/src/app/components/plugin-manager-component.js diff --git a/src/app/components/plugin-manager-settings.js b/apps/remix-ide/src/app/components/plugin-manager-settings.js similarity index 100% rename from src/app/components/plugin-manager-settings.js rename to apps/remix-ide/src/app/components/plugin-manager-settings.js diff --git a/src/app/components/side-panel.js b/apps/remix-ide/src/app/components/side-panel.js similarity index 100% rename from src/app/components/side-panel.js rename to apps/remix-ide/src/app/components/side-panel.js diff --git a/src/app/components/vertical-icons.js b/apps/remix-ide/src/app/components/vertical-icons.js similarity index 100% rename from src/app/components/vertical-icons.js rename to apps/remix-ide/src/app/components/vertical-icons.js diff --git a/src/app/editor/SourceHighlighters.js b/apps/remix-ide/src/app/editor/SourceHighlighters.js similarity index 100% rename from src/app/editor/SourceHighlighters.js rename to apps/remix-ide/src/app/editor/SourceHighlighters.js diff --git a/src/app/editor/contextView.js b/apps/remix-ide/src/app/editor/contextView.js similarity index 100% rename from src/app/editor/contextView.js rename to apps/remix-ide/src/app/editor/contextView.js diff --git a/src/app/editor/contextualListener.js b/apps/remix-ide/src/app/editor/contextualListener.js similarity index 100% rename from src/app/editor/contextualListener.js rename to apps/remix-ide/src/app/editor/contextualListener.js diff --git a/src/app/editor/editor.js b/apps/remix-ide/src/app/editor/editor.js similarity index 100% rename from src/app/editor/editor.js rename to apps/remix-ide/src/app/editor/editor.js diff --git a/src/app/editor/example-contracts.js b/apps/remix-ide/src/app/editor/example-contracts.js similarity index 100% rename from src/app/editor/example-contracts.js rename to apps/remix-ide/src/app/editor/example-contracts.js diff --git a/src/app/editor/sourceHighlighter.js b/apps/remix-ide/src/app/editor/sourceHighlighter.js similarity index 100% rename from src/app/editor/sourceHighlighter.js rename to apps/remix-ide/src/app/editor/sourceHighlighter.js diff --git a/src/app/editor/styles/contextView-styles.js b/apps/remix-ide/src/app/editor/styles/contextView-styles.js similarity index 100% rename from src/app/editor/styles/contextView-styles.js rename to apps/remix-ide/src/app/editor/styles/contextView-styles.js diff --git a/src/app/files/compiler-metadata.js b/apps/remix-ide/src/app/files/compiler-metadata.js similarity index 100% rename from src/app/files/compiler-metadata.js rename to apps/remix-ide/src/app/files/compiler-metadata.js diff --git a/src/app/files/file-explorer.js b/apps/remix-ide/src/app/files/file-explorer.js similarity index 100% rename from src/app/files/file-explorer.js rename to apps/remix-ide/src/app/files/file-explorer.js diff --git a/src/app/files/fileManager.js b/apps/remix-ide/src/app/files/fileManager.js similarity index 100% rename from src/app/files/fileManager.js rename to apps/remix-ide/src/app/files/fileManager.js diff --git a/src/app/files/fileProvider.js b/apps/remix-ide/src/app/files/fileProvider.js similarity index 100% rename from src/app/files/fileProvider.js rename to apps/remix-ide/src/app/files/fileProvider.js diff --git a/src/app/files/remixDProvider.js b/apps/remix-ide/src/app/files/remixDProvider.js similarity index 100% rename from src/app/files/remixDProvider.js rename to apps/remix-ide/src/app/files/remixDProvider.js diff --git a/src/app/files/remixd-handle.js b/apps/remix-ide/src/app/files/remixd-handle.js similarity index 100% rename from src/app/files/remixd-handle.js rename to apps/remix-ide/src/app/files/remixd-handle.js diff --git a/src/app/files/styles/file-explorer-styles.js b/apps/remix-ide/src/app/files/styles/file-explorer-styles.js similarity index 100% rename from src/app/files/styles/file-explorer-styles.js rename to apps/remix-ide/src/app/files/styles/file-explorer-styles.js diff --git a/src/app/panels/file-panel.js b/apps/remix-ide/src/app/panels/file-panel.js similarity index 100% rename from src/app/panels/file-panel.js rename to apps/remix-ide/src/app/panels/file-panel.js diff --git a/src/app/panels/main-view.js b/apps/remix-ide/src/app/panels/main-view.js similarity index 100% rename from src/app/panels/main-view.js rename to apps/remix-ide/src/app/panels/main-view.js diff --git a/src/app/panels/styles/file-panel-styles.js b/apps/remix-ide/src/app/panels/styles/file-panel-styles.js similarity index 100% rename from src/app/panels/styles/file-panel-styles.js rename to apps/remix-ide/src/app/panels/styles/file-panel-styles.js diff --git a/src/app/panels/styles/terminal-styles.js b/apps/remix-ide/src/app/panels/styles/terminal-styles.js similarity index 100% rename from src/app/panels/styles/terminal-styles.js rename to apps/remix-ide/src/app/panels/styles/terminal-styles.js diff --git a/src/app/panels/tab-proxy.js b/apps/remix-ide/src/app/panels/tab-proxy.js similarity index 100% rename from src/app/panels/tab-proxy.js rename to apps/remix-ide/src/app/panels/tab-proxy.js diff --git a/src/app/panels/terminal.js b/apps/remix-ide/src/app/panels/terminal.js similarity index 100% rename from src/app/panels/terminal.js rename to apps/remix-ide/src/app/panels/terminal.js diff --git a/src/app/tabs/analysis-tab.js b/apps/remix-ide/src/app/tabs/analysis-tab.js similarity index 100% rename from src/app/tabs/analysis-tab.js rename to apps/remix-ide/src/app/tabs/analysis-tab.js diff --git a/src/app/tabs/compile-tab.js b/apps/remix-ide/src/app/tabs/compile-tab.js similarity index 100% rename from src/app/tabs/compile-tab.js rename to apps/remix-ide/src/app/tabs/compile-tab.js diff --git a/src/app/tabs/compileTab/compileTab.js b/apps/remix-ide/src/app/tabs/compileTab/compileTab.js similarity index 100% rename from src/app/tabs/compileTab/compileTab.js rename to apps/remix-ide/src/app/tabs/compileTab/compileTab.js diff --git a/src/app/tabs/compileTab/compilerContainer.js b/apps/remix-ide/src/app/tabs/compileTab/compilerContainer.js similarity index 100% rename from src/app/tabs/compileTab/compilerContainer.js rename to apps/remix-ide/src/app/tabs/compileTab/compilerContainer.js diff --git a/src/app/tabs/compileTab/contractParser.js b/apps/remix-ide/src/app/tabs/compileTab/contractParser.js similarity index 100% rename from src/app/tabs/compileTab/contractParser.js rename to apps/remix-ide/src/app/tabs/compileTab/contractParser.js diff --git a/src/app/tabs/debugger-tab.js b/apps/remix-ide/src/app/tabs/debugger-tab.js similarity index 100% rename from src/app/tabs/debugger-tab.js rename to apps/remix-ide/src/app/tabs/debugger-tab.js diff --git a/src/app/tabs/debugger/debuggerUI.js b/apps/remix-ide/src/app/tabs/debugger/debuggerUI.js similarity index 100% rename from src/app/tabs/debugger/debuggerUI.js rename to apps/remix-ide/src/app/tabs/debugger/debuggerUI.js diff --git a/src/app/tabs/debugger/debuggerUI/ButtonNavigator.js b/apps/remix-ide/src/app/tabs/debugger/debuggerUI/ButtonNavigator.js similarity index 100% rename from src/app/tabs/debugger/debuggerUI/ButtonNavigator.js rename to apps/remix-ide/src/app/tabs/debugger/debuggerUI/ButtonNavigator.js diff --git a/src/app/tabs/debugger/debuggerUI/Slider.js b/apps/remix-ide/src/app/tabs/debugger/debuggerUI/Slider.js similarity index 100% rename from src/app/tabs/debugger/debuggerUI/Slider.js rename to apps/remix-ide/src/app/tabs/debugger/debuggerUI/Slider.js diff --git a/src/app/tabs/debugger/debuggerUI/StepManager.js b/apps/remix-ide/src/app/tabs/debugger/debuggerUI/StepManager.js similarity index 100% rename from src/app/tabs/debugger/debuggerUI/StepManager.js rename to apps/remix-ide/src/app/tabs/debugger/debuggerUI/StepManager.js diff --git a/src/app/tabs/debugger/debuggerUI/TxBrowser.js b/apps/remix-ide/src/app/tabs/debugger/debuggerUI/TxBrowser.js similarity index 100% rename from src/app/tabs/debugger/debuggerUI/TxBrowser.js rename to apps/remix-ide/src/app/tabs/debugger/debuggerUI/TxBrowser.js diff --git a/src/app/tabs/debugger/debuggerUI/VmDebugger.js b/apps/remix-ide/src/app/tabs/debugger/debuggerUI/VmDebugger.js similarity index 100% rename from src/app/tabs/debugger/debuggerUI/VmDebugger.js rename to apps/remix-ide/src/app/tabs/debugger/debuggerUI/VmDebugger.js diff --git a/src/app/tabs/debugger/debuggerUI/styles/basicStyles.js b/apps/remix-ide/src/app/tabs/debugger/debuggerUI/styles/basicStyles.js similarity index 100% rename from src/app/tabs/debugger/debuggerUI/styles/basicStyles.js rename to apps/remix-ide/src/app/tabs/debugger/debuggerUI/styles/basicStyles.js diff --git a/src/app/tabs/debugger/debuggerUI/styles/dropdownPanel.js b/apps/remix-ide/src/app/tabs/debugger/debuggerUI/styles/dropdownPanel.js similarity index 100% rename from src/app/tabs/debugger/debuggerUI/styles/dropdownPanel.js rename to apps/remix-ide/src/app/tabs/debugger/debuggerUI/styles/dropdownPanel.js diff --git a/src/app/tabs/debugger/debuggerUI/styles/sliderStyles.js b/apps/remix-ide/src/app/tabs/debugger/debuggerUI/styles/sliderStyles.js similarity index 100% rename from src/app/tabs/debugger/debuggerUI/styles/sliderStyles.js rename to apps/remix-ide/src/app/tabs/debugger/debuggerUI/styles/sliderStyles.js diff --git a/src/app/tabs/debugger/debuggerUI/styles/treeView.js b/apps/remix-ide/src/app/tabs/debugger/debuggerUI/styles/treeView.js similarity index 100% rename from src/app/tabs/debugger/debuggerUI/styles/treeView.js rename to apps/remix-ide/src/app/tabs/debugger/debuggerUI/styles/treeView.js diff --git a/src/app/tabs/debugger/debuggerUI/vmDebugger/CalldataPanel.js b/apps/remix-ide/src/app/tabs/debugger/debuggerUI/vmDebugger/CalldataPanel.js similarity index 100% rename from src/app/tabs/debugger/debuggerUI/vmDebugger/CalldataPanel.js rename to apps/remix-ide/src/app/tabs/debugger/debuggerUI/vmDebugger/CalldataPanel.js diff --git a/src/app/tabs/debugger/debuggerUI/vmDebugger/CallstackPanel.js b/apps/remix-ide/src/app/tabs/debugger/debuggerUI/vmDebugger/CallstackPanel.js similarity index 100% rename from src/app/tabs/debugger/debuggerUI/vmDebugger/CallstackPanel.js rename to apps/remix-ide/src/app/tabs/debugger/debuggerUI/vmDebugger/CallstackPanel.js diff --git a/src/app/tabs/debugger/debuggerUI/vmDebugger/CodeListView.js b/apps/remix-ide/src/app/tabs/debugger/debuggerUI/vmDebugger/CodeListView.js similarity index 100% rename from src/app/tabs/debugger/debuggerUI/vmDebugger/CodeListView.js rename to apps/remix-ide/src/app/tabs/debugger/debuggerUI/vmDebugger/CodeListView.js diff --git a/src/app/tabs/debugger/debuggerUI/vmDebugger/DropdownPanel.js b/apps/remix-ide/src/app/tabs/debugger/debuggerUI/vmDebugger/DropdownPanel.js similarity index 100% rename from src/app/tabs/debugger/debuggerUI/vmDebugger/DropdownPanel.js rename to apps/remix-ide/src/app/tabs/debugger/debuggerUI/vmDebugger/DropdownPanel.js diff --git a/src/app/tabs/debugger/debuggerUI/vmDebugger/FullStoragesChanges.js b/apps/remix-ide/src/app/tabs/debugger/debuggerUI/vmDebugger/FullStoragesChanges.js similarity index 100% rename from src/app/tabs/debugger/debuggerUI/vmDebugger/FullStoragesChanges.js rename to apps/remix-ide/src/app/tabs/debugger/debuggerUI/vmDebugger/FullStoragesChanges.js diff --git a/src/app/tabs/debugger/debuggerUI/vmDebugger/MemoryPanel.js b/apps/remix-ide/src/app/tabs/debugger/debuggerUI/vmDebugger/MemoryPanel.js similarity index 100% rename from src/app/tabs/debugger/debuggerUI/vmDebugger/MemoryPanel.js rename to apps/remix-ide/src/app/tabs/debugger/debuggerUI/vmDebugger/MemoryPanel.js diff --git a/src/app/tabs/debugger/debuggerUI/vmDebugger/SolidityLocals.js b/apps/remix-ide/src/app/tabs/debugger/debuggerUI/vmDebugger/SolidityLocals.js similarity index 100% rename from src/app/tabs/debugger/debuggerUI/vmDebugger/SolidityLocals.js rename to apps/remix-ide/src/app/tabs/debugger/debuggerUI/vmDebugger/SolidityLocals.js diff --git a/src/app/tabs/debugger/debuggerUI/vmDebugger/SolidityState.js b/apps/remix-ide/src/app/tabs/debugger/debuggerUI/vmDebugger/SolidityState.js similarity index 100% rename from src/app/tabs/debugger/debuggerUI/vmDebugger/SolidityState.js rename to apps/remix-ide/src/app/tabs/debugger/debuggerUI/vmDebugger/SolidityState.js diff --git a/src/app/tabs/debugger/debuggerUI/vmDebugger/StackPanel.js b/apps/remix-ide/src/app/tabs/debugger/debuggerUI/vmDebugger/StackPanel.js similarity index 100% rename from src/app/tabs/debugger/debuggerUI/vmDebugger/StackPanel.js rename to apps/remix-ide/src/app/tabs/debugger/debuggerUI/vmDebugger/StackPanel.js diff --git a/src/app/tabs/debugger/debuggerUI/vmDebugger/StepDetail.js b/apps/remix-ide/src/app/tabs/debugger/debuggerUI/vmDebugger/StepDetail.js similarity index 100% rename from src/app/tabs/debugger/debuggerUI/vmDebugger/StepDetail.js rename to apps/remix-ide/src/app/tabs/debugger/debuggerUI/vmDebugger/StepDetail.js diff --git a/src/app/tabs/debugger/debuggerUI/vmDebugger/StoragePanel.js b/apps/remix-ide/src/app/tabs/debugger/debuggerUI/vmDebugger/StoragePanel.js similarity index 100% rename from src/app/tabs/debugger/debuggerUI/vmDebugger/StoragePanel.js rename to apps/remix-ide/src/app/tabs/debugger/debuggerUI/vmDebugger/StoragePanel.js diff --git a/src/app/tabs/debugger/debuggerUI/vmDebugger/utils/SolidityTypeFormatter.js b/apps/remix-ide/src/app/tabs/debugger/debuggerUI/vmDebugger/utils/SolidityTypeFormatter.js similarity index 100% rename from src/app/tabs/debugger/debuggerUI/vmDebugger/utils/SolidityTypeFormatter.js rename to apps/remix-ide/src/app/tabs/debugger/debuggerUI/vmDebugger/utils/SolidityTypeFormatter.js diff --git a/src/app/tabs/network-module.js b/apps/remix-ide/src/app/tabs/network-module.js similarity index 100% rename from src/app/tabs/network-module.js rename to apps/remix-ide/src/app/tabs/network-module.js diff --git a/src/app/tabs/plugin-tab.js b/apps/remix-ide/src/app/tabs/plugin-tab.js similarity index 100% rename from src/app/tabs/plugin-tab.js rename to apps/remix-ide/src/app/tabs/plugin-tab.js diff --git a/src/app/tabs/runTab/contractDropdown.js b/apps/remix-ide/src/app/tabs/runTab/contractDropdown.js similarity index 100% rename from src/app/tabs/runTab/contractDropdown.js rename to apps/remix-ide/src/app/tabs/runTab/contractDropdown.js diff --git a/src/app/tabs/runTab/model/dropdownlogic.js b/apps/remix-ide/src/app/tabs/runTab/model/dropdownlogic.js similarity index 100% rename from src/app/tabs/runTab/model/dropdownlogic.js rename to apps/remix-ide/src/app/tabs/runTab/model/dropdownlogic.js diff --git a/src/app/tabs/runTab/model/recorder.js b/apps/remix-ide/src/app/tabs/runTab/model/recorder.js similarity index 100% rename from src/app/tabs/runTab/model/recorder.js rename to apps/remix-ide/src/app/tabs/runTab/model/recorder.js diff --git a/src/app/tabs/runTab/recorder.js b/apps/remix-ide/src/app/tabs/runTab/recorder.js similarity index 100% rename from src/app/tabs/runTab/recorder.js rename to apps/remix-ide/src/app/tabs/runTab/recorder.js diff --git a/src/app/tabs/runTab/settings.js b/apps/remix-ide/src/app/tabs/runTab/settings.js similarity index 100% rename from src/app/tabs/runTab/settings.js rename to apps/remix-ide/src/app/tabs/runTab/settings.js diff --git a/src/app/tabs/settings-tab.js b/apps/remix-ide/src/app/tabs/settings-tab.js similarity index 100% rename from src/app/tabs/settings-tab.js rename to apps/remix-ide/src/app/tabs/settings-tab.js diff --git a/src/app/tabs/staticanalysis/staticAnalysisView.js b/apps/remix-ide/src/app/tabs/staticanalysis/staticAnalysisView.js similarity index 100% rename from src/app/tabs/staticanalysis/staticAnalysisView.js rename to apps/remix-ide/src/app/tabs/staticanalysis/staticAnalysisView.js diff --git a/src/app/tabs/staticanalysis/styles/staticAnalysisView-styles.js b/apps/remix-ide/src/app/tabs/staticanalysis/styles/staticAnalysisView-styles.js similarity index 100% rename from src/app/tabs/staticanalysis/styles/staticAnalysisView-styles.js rename to apps/remix-ide/src/app/tabs/staticanalysis/styles/staticAnalysisView-styles.js diff --git a/src/app/tabs/styles/analysis-tab-styles.js b/apps/remix-ide/src/app/tabs/styles/analysis-tab-styles.js similarity index 100% rename from src/app/tabs/styles/analysis-tab-styles.js rename to apps/remix-ide/src/app/tabs/styles/analysis-tab-styles.js diff --git a/src/app/tabs/styles/compile-tab-styles.js b/apps/remix-ide/src/app/tabs/styles/compile-tab-styles.js similarity index 100% rename from src/app/tabs/styles/compile-tab-styles.js rename to apps/remix-ide/src/app/tabs/styles/compile-tab-styles.js diff --git a/src/app/tabs/styles/debugger-tab-styles.js b/apps/remix-ide/src/app/tabs/styles/debugger-tab-styles.js similarity index 100% rename from src/app/tabs/styles/debugger-tab-styles.js rename to apps/remix-ide/src/app/tabs/styles/debugger-tab-styles.js diff --git a/src/app/tabs/styles/plugin-tab-styles.js b/apps/remix-ide/src/app/tabs/styles/plugin-tab-styles.js similarity index 100% rename from src/app/tabs/styles/plugin-tab-styles.js rename to apps/remix-ide/src/app/tabs/styles/plugin-tab-styles.js diff --git a/src/app/tabs/styles/run-tab-styles.js b/apps/remix-ide/src/app/tabs/styles/run-tab-styles.js similarity index 100% rename from src/app/tabs/styles/run-tab-styles.js rename to apps/remix-ide/src/app/tabs/styles/run-tab-styles.js diff --git a/src/app/tabs/styles/settings-tab-styles.js b/apps/remix-ide/src/app/tabs/styles/settings-tab-styles.js similarity index 100% rename from src/app/tabs/styles/settings-tab-styles.js rename to apps/remix-ide/src/app/tabs/styles/settings-tab-styles.js diff --git a/src/app/tabs/styles/support-tab-styles.js b/apps/remix-ide/src/app/tabs/styles/support-tab-styles.js similarity index 100% rename from src/app/tabs/styles/support-tab-styles.js rename to apps/remix-ide/src/app/tabs/styles/support-tab-styles.js diff --git a/src/app/tabs/styles/tabbed-menu-styles.js b/apps/remix-ide/src/app/tabs/styles/tabbed-menu-styles.js similarity index 100% rename from src/app/tabs/styles/tabbed-menu-styles.js rename to apps/remix-ide/src/app/tabs/styles/tabbed-menu-styles.js diff --git a/src/app/tabs/styles/test-tab-styles.js b/apps/remix-ide/src/app/tabs/styles/test-tab-styles.js similarity index 100% rename from src/app/tabs/styles/test-tab-styles.js rename to apps/remix-ide/src/app/tabs/styles/test-tab-styles.js diff --git a/src/app/tabs/test-tab.js b/apps/remix-ide/src/app/tabs/test-tab.js similarity index 100% rename from src/app/tabs/test-tab.js rename to apps/remix-ide/src/app/tabs/test-tab.js diff --git a/src/app/tabs/testTab/testTab.js b/apps/remix-ide/src/app/tabs/testTab/testTab.js similarity index 100% rename from src/app/tabs/testTab/testTab.js rename to apps/remix-ide/src/app/tabs/testTab/testTab.js diff --git a/src/app/tabs/theme-module.js b/apps/remix-ide/src/app/tabs/theme-module.js similarity index 100% rename from src/app/tabs/theme-module.js rename to apps/remix-ide/src/app/tabs/theme-module.js diff --git a/src/app/tabs/web3-provider.js b/apps/remix-ide/src/app/tabs/web3-provider.js similarity index 100% rename from src/app/tabs/web3-provider.js rename to apps/remix-ide/src/app/tabs/web3-provider.js diff --git a/src/app/udapp/index.js b/apps/remix-ide/src/app/udapp/index.js similarity index 100% rename from src/app/udapp/index.js rename to apps/remix-ide/src/app/udapp/index.js diff --git a/src/app/udapp/make-udapp.js b/apps/remix-ide/src/app/udapp/make-udapp.js similarity index 100% rename from src/app/udapp/make-udapp.js rename to apps/remix-ide/src/app/udapp/make-udapp.js diff --git a/src/app/udapp/run-tab.js b/apps/remix-ide/src/app/udapp/run-tab.js similarity index 100% rename from src/app/udapp/run-tab.js rename to apps/remix-ide/src/app/udapp/run-tab.js diff --git a/src/app/ui/TreeView.js b/apps/remix-ide/src/app/ui/TreeView.js similarity index 100% rename from src/app/ui/TreeView.js rename to apps/remix-ide/src/app/ui/TreeView.js diff --git a/src/app/ui/auto-complete-popup.js b/apps/remix-ide/src/app/ui/auto-complete-popup.js similarity index 100% rename from src/app/ui/auto-complete-popup.js rename to apps/remix-ide/src/app/ui/auto-complete-popup.js diff --git a/src/app/ui/card.js b/apps/remix-ide/src/app/ui/card.js similarity index 100% rename from src/app/ui/card.js rename to apps/remix-ide/src/app/ui/card.js diff --git a/src/app/ui/confirmDialog.js b/apps/remix-ide/src/app/ui/confirmDialog.js similarity index 100% rename from src/app/ui/confirmDialog.js rename to apps/remix-ide/src/app/ui/confirmDialog.js diff --git a/src/app/ui/contextMenu.js b/apps/remix-ide/src/app/ui/contextMenu.js similarity index 100% rename from src/app/ui/contextMenu.js rename to apps/remix-ide/src/app/ui/contextMenu.js diff --git a/src/app/ui/copy-to-clipboard.js b/apps/remix-ide/src/app/ui/copy-to-clipboard.js similarity index 100% rename from src/app/ui/copy-to-clipboard.js rename to apps/remix-ide/src/app/ui/copy-to-clipboard.js diff --git a/src/app/ui/draggableContent.js b/apps/remix-ide/src/app/ui/draggableContent.js similarity index 100% rename from src/app/ui/draggableContent.js rename to apps/remix-ide/src/app/ui/draggableContent.js diff --git a/src/app/ui/dropdown.js b/apps/remix-ide/src/app/ui/dropdown.js similarity index 100% rename from src/app/ui/dropdown.js rename to apps/remix-ide/src/app/ui/dropdown.js diff --git a/src/app/ui/landing-page/landing-page.js b/apps/remix-ide/src/app/ui/landing-page/landing-page.js similarity index 100% rename from src/app/ui/landing-page/landing-page.js rename to apps/remix-ide/src/app/ui/landing-page/landing-page.js diff --git a/src/app/ui/landing-page/workspace.js b/apps/remix-ide/src/app/ui/landing-page/workspace.js similarity index 100% rename from src/app/ui/landing-page/workspace.js rename to apps/remix-ide/src/app/ui/landing-page/workspace.js diff --git a/src/app/ui/modal-dialog-custom.js b/apps/remix-ide/src/app/ui/modal-dialog-custom.js similarity index 100% rename from src/app/ui/modal-dialog-custom.js rename to apps/remix-ide/src/app/ui/modal-dialog-custom.js diff --git a/src/app/ui/modaldialog.js b/apps/remix-ide/src/app/ui/modaldialog.js similarity index 100% rename from src/app/ui/modaldialog.js rename to apps/remix-ide/src/app/ui/modaldialog.js diff --git a/src/app/ui/multiParamManager.js b/apps/remix-ide/src/app/ui/multiParamManager.js similarity index 100% rename from src/app/ui/multiParamManager.js rename to apps/remix-ide/src/app/ui/multiParamManager.js diff --git a/src/app/ui/persmission-handler.js b/apps/remix-ide/src/app/ui/persmission-handler.js similarity index 100% rename from src/app/ui/persmission-handler.js rename to apps/remix-ide/src/app/ui/persmission-handler.js diff --git a/src/app/ui/renderer.js b/apps/remix-ide/src/app/ui/renderer.js similarity index 100% rename from src/app/ui/renderer.js rename to apps/remix-ide/src/app/ui/renderer.js diff --git a/src/app/ui/sendTxCallbacks.js b/apps/remix-ide/src/app/ui/sendTxCallbacks.js similarity index 100% rename from src/app/ui/sendTxCallbacks.js rename to apps/remix-ide/src/app/ui/sendTxCallbacks.js diff --git a/src/app/ui/styles-guide/styleGuideClean.js b/apps/remix-ide/src/app/ui/styles-guide/styleGuideClean.js similarity index 100% rename from src/app/ui/styles-guide/styleGuideClean.js rename to apps/remix-ide/src/app/ui/styles-guide/styleGuideClean.js diff --git a/src/app/ui/styles/auto-complete-popup-styles.js b/apps/remix-ide/src/app/ui/styles/auto-complete-popup-styles.js similarity index 100% rename from src/app/ui/styles/auto-complete-popup-styles.js rename to apps/remix-ide/src/app/ui/styles/auto-complete-popup-styles.js diff --git a/src/app/ui/styles/dropdown-styles.js b/apps/remix-ide/src/app/ui/styles/dropdown-styles.js similarity index 100% rename from src/app/ui/styles/dropdown-styles.js rename to apps/remix-ide/src/app/ui/styles/dropdown-styles.js diff --git a/src/app/ui/styles/modal-dialog-custom-styles.js b/apps/remix-ide/src/app/ui/styles/modal-dialog-custom-styles.js similarity index 100% rename from src/app/ui/styles/modal-dialog-custom-styles.js rename to apps/remix-ide/src/app/ui/styles/modal-dialog-custom-styles.js diff --git a/src/app/ui/styles/modaldialog-styles.js b/apps/remix-ide/src/app/ui/styles/modaldialog-styles.js similarity index 100% rename from src/app/ui/styles/modaldialog-styles.js rename to apps/remix-ide/src/app/ui/styles/modaldialog-styles.js diff --git a/src/app/ui/styles/renderer-styles.js b/apps/remix-ide/src/app/ui/styles/renderer-styles.js similarity index 100% rename from src/app/ui/styles/renderer-styles.js rename to apps/remix-ide/src/app/ui/styles/renderer-styles.js diff --git a/src/app/ui/styles/tooltip-styles.js b/apps/remix-ide/src/app/ui/styles/tooltip-styles.js similarity index 100% rename from src/app/ui/styles/tooltip-styles.js rename to apps/remix-ide/src/app/ui/styles/tooltip-styles.js diff --git a/src/app/ui/svgLogo.js b/apps/remix-ide/src/app/ui/svgLogo.js similarity index 100% rename from src/app/ui/svgLogo.js rename to apps/remix-ide/src/app/ui/svgLogo.js diff --git a/src/app/ui/tooltip.js b/apps/remix-ide/src/app/ui/tooltip.js similarity index 100% rename from src/app/ui/tooltip.js rename to apps/remix-ide/src/app/ui/tooltip.js diff --git a/src/app/ui/txLogger.js b/apps/remix-ide/src/app/ui/txLogger.js similarity index 100% rename from src/app/ui/txLogger.js rename to apps/remix-ide/src/app/ui/txLogger.js diff --git a/src/app/ui/universal-dapp-ui.js b/apps/remix-ide/src/app/ui/universal-dapp-ui.js similarity index 100% rename from src/app/ui/universal-dapp-ui.js rename to apps/remix-ide/src/app/ui/universal-dapp-ui.js diff --git a/src/blockchain/blockchain.js b/apps/remix-ide/src/blockchain/blockchain.js similarity index 100% rename from src/blockchain/blockchain.js rename to apps/remix-ide/src/blockchain/blockchain.js diff --git a/src/blockchain/pluginUDapp.js b/apps/remix-ide/src/blockchain/pluginUDapp.js similarity index 100% rename from src/blockchain/pluginUDapp.js rename to apps/remix-ide/src/blockchain/pluginUDapp.js diff --git a/src/blockchain/providers/injected.js b/apps/remix-ide/src/blockchain/providers/injected.js similarity index 100% rename from src/blockchain/providers/injected.js rename to apps/remix-ide/src/blockchain/providers/injected.js diff --git a/src/blockchain/providers/node.js b/apps/remix-ide/src/blockchain/providers/node.js similarity index 100% rename from src/blockchain/providers/node.js rename to apps/remix-ide/src/blockchain/providers/node.js diff --git a/src/blockchain/providers/vm.js b/apps/remix-ide/src/blockchain/providers/vm.js similarity index 100% rename from src/blockchain/providers/vm.js rename to apps/remix-ide/src/blockchain/providers/vm.js diff --git a/src/blockchain/txResultHelper.js b/apps/remix-ide/src/blockchain/txResultHelper.js similarity index 100% rename from src/blockchain/txResultHelper.js rename to apps/remix-ide/src/blockchain/txResultHelper.js diff --git a/src/config.js b/apps/remix-ide/src/config.js similarity index 100% rename from src/config.js rename to apps/remix-ide/src/config.js diff --git a/src/framingService.js b/apps/remix-ide/src/framingService.js similarity index 100% rename from src/framingService.js rename to apps/remix-ide/src/framingService.js diff --git a/src/global/registry.js b/apps/remix-ide/src/global/registry.js similarity index 100% rename from src/global/registry.js rename to apps/remix-ide/src/global/registry.js diff --git a/src/index.js b/apps/remix-ide/src/index.js similarity index 100% rename from src/index.js rename to apps/remix-ide/src/index.js diff --git a/src/lib/cmdInterpreterAPI.js b/apps/remix-ide/src/lib/cmdInterpreterAPI.js similarity index 100% rename from src/lib/cmdInterpreterAPI.js rename to apps/remix-ide/src/lib/cmdInterpreterAPI.js diff --git a/src/lib/commands.js b/apps/remix-ide/src/lib/commands.js similarity index 100% rename from src/lib/commands.js rename to apps/remix-ide/src/lib/commands.js diff --git a/src/lib/events.js b/apps/remix-ide/src/lib/events.js similarity index 100% rename from src/lib/events.js rename to apps/remix-ide/src/lib/events.js diff --git a/src/lib/gist-handler.js b/apps/remix-ide/src/lib/gist-handler.js similarity index 100% rename from src/lib/gist-handler.js rename to apps/remix-ide/src/lib/gist-handler.js diff --git a/src/lib/helper.js b/apps/remix-ide/src/lib/helper.js similarity index 100% rename from src/lib/helper.js rename to apps/remix-ide/src/lib/helper.js diff --git a/src/lib/offsetToLineColumnConverter.js b/apps/remix-ide/src/lib/offsetToLineColumnConverter.js similarity index 100% rename from src/lib/offsetToLineColumnConverter.js rename to apps/remix-ide/src/lib/offsetToLineColumnConverter.js diff --git a/src/lib/panels-resize.js b/apps/remix-ide/src/lib/panels-resize.js similarity index 100% rename from src/lib/panels-resize.js rename to apps/remix-ide/src/lib/panels-resize.js diff --git a/src/lib/publishOnIpfs.js b/apps/remix-ide/src/lib/publishOnIpfs.js similarity index 100% rename from src/lib/publishOnIpfs.js rename to apps/remix-ide/src/lib/publishOnIpfs.js diff --git a/src/lib/publishOnSwarm.js b/apps/remix-ide/src/lib/publishOnSwarm.js similarity index 100% rename from src/lib/publishOnSwarm.js rename to apps/remix-ide/src/lib/publishOnSwarm.js diff --git a/src/lib/query-params.js b/apps/remix-ide/src/lib/query-params.js similarity index 100% rename from src/lib/query-params.js rename to apps/remix-ide/src/lib/query-params.js diff --git a/src/lib/remixd.js b/apps/remix-ide/src/lib/remixd.js similarity index 100% rename from src/lib/remixd.js rename to apps/remix-ide/src/lib/remixd.js diff --git a/src/lib/transactionReceiptResolver.js b/apps/remix-ide/src/lib/transactionReceiptResolver.js similarity index 100% rename from src/lib/transactionReceiptResolver.js rename to apps/remix-ide/src/lib/transactionReceiptResolver.js diff --git a/src/loadFilesFromParent.js b/apps/remix-ide/src/loadFilesFromParent.js similarity index 100% rename from src/loadFilesFromParent.js rename to apps/remix-ide/src/loadFilesFromParent.js diff --git a/src/migrateFileSystem.js b/apps/remix-ide/src/migrateFileSystem.js similarity index 100% rename from src/migrateFileSystem.js rename to apps/remix-ide/src/migrateFileSystem.js diff --git a/src/publishToStorage.js b/apps/remix-ide/src/publishToStorage.js similarity index 100% rename from src/publishToStorage.js rename to apps/remix-ide/src/publishToStorage.js diff --git a/src/registry.js b/apps/remix-ide/src/registry.js similarity index 100% rename from src/registry.js rename to apps/remix-ide/src/registry.js diff --git a/src/remixAppManager.js b/apps/remix-ide/src/remixAppManager.js similarity index 100% rename from src/remixAppManager.js rename to apps/remix-ide/src/remixAppManager.js diff --git a/src/universal-dapp-styles.js b/apps/remix-ide/src/universal-dapp-styles.js similarity index 100% rename from src/universal-dapp-styles.js rename to apps/remix-ide/src/universal-dapp-styles.js diff --git a/team-best-practices.md b/apps/remix-ide/team-best-practices.md similarity index 100% rename from team-best-practices.md rename to apps/remix-ide/team-best-practices.md diff --git a/test-browser/commands/addAtAddressInstance.js b/apps/remix-ide/test-browser/commands/addAtAddressInstance.js similarity index 100% rename from test-browser/commands/addAtAddressInstance.js rename to apps/remix-ide/test-browser/commands/addAtAddressInstance.js diff --git a/test-browser/commands/addFile.js b/apps/remix-ide/test-browser/commands/addFile.js similarity index 100% rename from test-browser/commands/addFile.js rename to apps/remix-ide/test-browser/commands/addFile.js diff --git a/test-browser/commands/checkElementStyle.js b/apps/remix-ide/test-browser/commands/checkElementStyle.js similarity index 100% rename from test-browser/commands/checkElementStyle.js rename to apps/remix-ide/test-browser/commands/checkElementStyle.js diff --git a/test-browser/commands/checkTerminalFilter.js b/apps/remix-ide/test-browser/commands/checkTerminalFilter.js similarity index 100% rename from test-browser/commands/checkTerminalFilter.js rename to apps/remix-ide/test-browser/commands/checkTerminalFilter.js diff --git a/test-browser/commands/checkVariableDebug.js b/apps/remix-ide/test-browser/commands/checkVariableDebug.js similarity index 100% rename from test-browser/commands/checkVariableDebug.js rename to apps/remix-ide/test-browser/commands/checkVariableDebug.js diff --git a/test-browser/commands/clickElementAtPosition.js b/apps/remix-ide/test-browser/commands/clickElementAtPosition.js similarity index 100% rename from test-browser/commands/clickElementAtPosition.js rename to apps/remix-ide/test-browser/commands/clickElementAtPosition.js diff --git a/test-browser/commands/clickFunction.js b/apps/remix-ide/test-browser/commands/clickFunction.js similarity index 100% rename from test-browser/commands/clickFunction.js rename to apps/remix-ide/test-browser/commands/clickFunction.js diff --git a/test-browser/commands/clickInstance.js b/apps/remix-ide/test-browser/commands/clickInstance.js similarity index 100% rename from test-browser/commands/clickInstance.js rename to apps/remix-ide/test-browser/commands/clickInstance.js diff --git a/test-browser/commands/clickLaunchIcon.js b/apps/remix-ide/test-browser/commands/clickLaunchIcon.js similarity index 100% rename from test-browser/commands/clickLaunchIcon.js rename to apps/remix-ide/test-browser/commands/clickLaunchIcon.js diff --git a/test-browser/commands/createContract.js b/apps/remix-ide/test-browser/commands/createContract.js similarity index 100% rename from test-browser/commands/createContract.js rename to apps/remix-ide/test-browser/commands/createContract.js diff --git a/test-browser/commands/debugTransaction.js b/apps/remix-ide/test-browser/commands/debugTransaction.js similarity index 100% rename from test-browser/commands/debugTransaction.js rename to apps/remix-ide/test-browser/commands/debugTransaction.js diff --git a/test-browser/commands/executeScript.js b/apps/remix-ide/test-browser/commands/executeScript.js similarity index 100% rename from test-browser/commands/executeScript.js rename to apps/remix-ide/test-browser/commands/executeScript.js diff --git a/test-browser/commands/getAddressAtPosition.js b/apps/remix-ide/test-browser/commands/getAddressAtPosition.js similarity index 100% rename from test-browser/commands/getAddressAtPosition.js rename to apps/remix-ide/test-browser/commands/getAddressAtPosition.js diff --git a/test-browser/commands/getEditorValue.js b/apps/remix-ide/test-browser/commands/getEditorValue.js similarity index 100% rename from test-browser/commands/getEditorValue.js rename to apps/remix-ide/test-browser/commands/getEditorValue.js diff --git a/test-browser/commands/getInstalledPlugins.js b/apps/remix-ide/test-browser/commands/getInstalledPlugins.js similarity index 100% rename from test-browser/commands/getInstalledPlugins.js rename to apps/remix-ide/test-browser/commands/getInstalledPlugins.js diff --git a/test-browser/commands/getModalBody.js b/apps/remix-ide/test-browser/commands/getModalBody.js similarity index 100% rename from test-browser/commands/getModalBody.js rename to apps/remix-ide/test-browser/commands/getModalBody.js diff --git a/test-browser/commands/goToVMTraceStep.js b/apps/remix-ide/test-browser/commands/goToVMTraceStep.js similarity index 100% rename from test-browser/commands/goToVMTraceStep.js rename to apps/remix-ide/test-browser/commands/goToVMTraceStep.js diff --git a/test-browser/commands/journalChildIncludes.js b/apps/remix-ide/test-browser/commands/journalChildIncludes.js similarity index 100% rename from test-browser/commands/journalChildIncludes.js rename to apps/remix-ide/test-browser/commands/journalChildIncludes.js diff --git a/test-browser/commands/journalLastChild.js b/apps/remix-ide/test-browser/commands/journalLastChild.js similarity index 100% rename from test-browser/commands/journalLastChild.js rename to apps/remix-ide/test-browser/commands/journalLastChild.js diff --git a/test-browser/commands/journalLastChildIncludes.js b/apps/remix-ide/test-browser/commands/journalLastChildIncludes.js similarity index 100% rename from test-browser/commands/journalLastChildIncludes.js rename to apps/remix-ide/test-browser/commands/journalLastChildIncludes.js diff --git a/test-browser/commands/modalFooterCancelClick.js b/apps/remix-ide/test-browser/commands/modalFooterCancelClick.js similarity index 100% rename from test-browser/commands/modalFooterCancelClick.js rename to apps/remix-ide/test-browser/commands/modalFooterCancelClick.js diff --git a/test-browser/commands/modalFooterOKClick.js b/apps/remix-ide/test-browser/commands/modalFooterOKClick.js similarity index 100% rename from test-browser/commands/modalFooterOKClick.js rename to apps/remix-ide/test-browser/commands/modalFooterOKClick.js diff --git a/test-browser/commands/notContainsText.js b/apps/remix-ide/test-browser/commands/notContainsText.js similarity index 100% rename from test-browser/commands/notContainsText.js rename to apps/remix-ide/test-browser/commands/notContainsText.js diff --git a/test-browser/commands/removeFile.js b/apps/remix-ide/test-browser/commands/removeFile.js similarity index 100% rename from test-browser/commands/removeFile.js rename to apps/remix-ide/test-browser/commands/removeFile.js diff --git a/test-browser/commands/renameFile.js b/apps/remix-ide/test-browser/commands/renameFile.js similarity index 100% rename from test-browser/commands/renameFile.js rename to apps/remix-ide/test-browser/commands/renameFile.js diff --git a/test-browser/commands/rightClick.js b/apps/remix-ide/test-browser/commands/rightClick.js similarity index 100% rename from test-browser/commands/rightClick.js rename to apps/remix-ide/test-browser/commands/rightClick.js diff --git a/test-browser/commands/scrollAndClick.js b/apps/remix-ide/test-browser/commands/scrollAndClick.js similarity index 100% rename from test-browser/commands/scrollAndClick.js rename to apps/remix-ide/test-browser/commands/scrollAndClick.js diff --git a/test-browser/commands/scrollInto.js b/apps/remix-ide/test-browser/commands/scrollInto.js similarity index 100% rename from test-browser/commands/scrollInto.js rename to apps/remix-ide/test-browser/commands/scrollInto.js diff --git a/test-browser/commands/selectAccount.js b/apps/remix-ide/test-browser/commands/selectAccount.js similarity index 100% rename from test-browser/commands/selectAccount.js rename to apps/remix-ide/test-browser/commands/selectAccount.js diff --git a/test-browser/commands/selectContract.js b/apps/remix-ide/test-browser/commands/selectContract.js similarity index 100% rename from test-browser/commands/selectContract.js rename to apps/remix-ide/test-browser/commands/selectContract.js diff --git a/test-browser/commands/sendLowLevelTx.js b/apps/remix-ide/test-browser/commands/sendLowLevelTx.js similarity index 100% rename from test-browser/commands/sendLowLevelTx.js rename to apps/remix-ide/test-browser/commands/sendLowLevelTx.js diff --git a/test-browser/commands/setEditorValue.js b/apps/remix-ide/test-browser/commands/setEditorValue.js similarity index 100% rename from test-browser/commands/setEditorValue.js rename to apps/remix-ide/test-browser/commands/setEditorValue.js diff --git a/test-browser/commands/setSolidityCompilerVersion.js b/apps/remix-ide/test-browser/commands/setSolidityCompilerVersion.js similarity index 100% rename from test-browser/commands/setSolidityCompilerVersion.js rename to apps/remix-ide/test-browser/commands/setSolidityCompilerVersion.js diff --git a/test-browser/commands/setupMetamask.js b/apps/remix-ide/test-browser/commands/setupMetamask.js similarity index 100% rename from test-browser/commands/setupMetamask.js rename to apps/remix-ide/test-browser/commands/setupMetamask.js diff --git a/test-browser/commands/signMessage.js b/apps/remix-ide/test-browser/commands/signMessage.js similarity index 100% rename from test-browser/commands/signMessage.js rename to apps/remix-ide/test-browser/commands/signMessage.js diff --git a/test-browser/commands/switchBrowserTab.js b/apps/remix-ide/test-browser/commands/switchBrowserTab.js similarity index 100% rename from test-browser/commands/switchBrowserTab.js rename to apps/remix-ide/test-browser/commands/switchBrowserTab.js diff --git a/test-browser/commands/switchBrowserWindow.js b/apps/remix-ide/test-browser/commands/switchBrowserWindow.js similarity index 100% rename from test-browser/commands/switchBrowserWindow.js rename to apps/remix-ide/test-browser/commands/switchBrowserWindow.js diff --git a/test-browser/commands/switchFile.js b/apps/remix-ide/test-browser/commands/switchFile.js similarity index 100% rename from test-browser/commands/switchFile.js rename to apps/remix-ide/test-browser/commands/switchFile.js diff --git a/test-browser/commands/testConstantFunction.js b/apps/remix-ide/test-browser/commands/testConstantFunction.js similarity index 100% rename from test-browser/commands/testConstantFunction.js rename to apps/remix-ide/test-browser/commands/testConstantFunction.js diff --git a/test-browser/commands/testContracts.js b/apps/remix-ide/test-browser/commands/testContracts.js similarity index 100% rename from test-browser/commands/testContracts.js rename to apps/remix-ide/test-browser/commands/testContracts.js diff --git a/test-browser/commands/testEditorValue.js b/apps/remix-ide/test-browser/commands/testEditorValue.js similarity index 100% rename from test-browser/commands/testEditorValue.js rename to apps/remix-ide/test-browser/commands/testEditorValue.js diff --git a/test-browser/commands/testFunction.js b/apps/remix-ide/test-browser/commands/testFunction.js similarity index 100% rename from test-browser/commands/testFunction.js rename to apps/remix-ide/test-browser/commands/testFunction.js diff --git a/test-browser/commands/verifyCallReturnValue.js b/apps/remix-ide/test-browser/commands/verifyCallReturnValue.js similarity index 100% rename from test-browser/commands/verifyCallReturnValue.js rename to apps/remix-ide/test-browser/commands/verifyCallReturnValue.js diff --git a/test-browser/commands/verifyContracts.js b/apps/remix-ide/test-browser/commands/verifyContracts.js similarity index 100% rename from test-browser/commands/verifyContracts.js rename to apps/remix-ide/test-browser/commands/verifyContracts.js diff --git a/test-browser/commands/waitForElementContainsText.js b/apps/remix-ide/test-browser/commands/waitForElementContainsText.js similarity index 100% rename from test-browser/commands/waitForElementContainsText.js rename to apps/remix-ide/test-browser/commands/waitForElementContainsText.js diff --git a/test-browser/extensions/chrome/metamask.crx b/apps/remix-ide/test-browser/extensions/chrome/metamask.crx similarity index 100% rename from test-browser/extensions/chrome/metamask.crx rename to apps/remix-ide/test-browser/extensions/chrome/metamask.crx diff --git a/test-browser/helpers/applytestmode.js b/apps/remix-ide/test-browser/helpers/applytestmode.js similarity index 100% rename from test-browser/helpers/applytestmode.js rename to apps/remix-ide/test-browser/helpers/applytestmode.js diff --git a/test-browser/helpers/init.js b/apps/remix-ide/test-browser/helpers/init.js similarity index 100% rename from test-browser/helpers/init.js rename to apps/remix-ide/test-browser/helpers/init.js diff --git a/test-browser/mockcompiler/compiler.js b/apps/remix-ide/test-browser/mockcompiler/compiler.js similarity index 100% rename from test-browser/mockcompiler/compiler.js rename to apps/remix-ide/test-browser/mockcompiler/compiler.js diff --git a/test-browser/tests/ballot.test.js b/apps/remix-ide/test-browser/tests/ballot.test.js similarity index 100% rename from test-browser/tests/ballot.test.js rename to apps/remix-ide/test-browser/tests/ballot.test.js diff --git a/test-browser/tests/debugger.test.js b/apps/remix-ide/test-browser/tests/debugger.test.js similarity index 100% rename from test-browser/tests/debugger.test.js rename to apps/remix-ide/test-browser/tests/debugger.test.js diff --git a/test-browser/tests/defaultLayout.test.js b/apps/remix-ide/test-browser/tests/defaultLayout.test.js similarity index 100% rename from test-browser/tests/defaultLayout.test.js rename to apps/remix-ide/test-browser/tests/defaultLayout.test.js diff --git a/test-browser/tests/editor.test.js b/apps/remix-ide/test-browser/tests/editor.test.js similarity index 100% rename from test-browser/tests/editor.test.js rename to apps/remix-ide/test-browser/tests/editor.test.js diff --git a/test-browser/tests/fileExplorer.test.js b/apps/remix-ide/test-browser/tests/fileExplorer.test.js similarity index 100% rename from test-browser/tests/fileExplorer.test.js rename to apps/remix-ide/test-browser/tests/fileExplorer.test.js diff --git a/test-browser/tests/generalSettings.test.js b/apps/remix-ide/test-browser/tests/generalSettings.test.js similarity index 100% rename from test-browser/tests/generalSettings.test.js rename to apps/remix-ide/test-browser/tests/generalSettings.test.js diff --git a/test-browser/tests/gist.test.js b/apps/remix-ide/test-browser/tests/gist.test.js similarity index 100% rename from test-browser/tests/gist.test.js rename to apps/remix-ide/test-browser/tests/gist.test.js diff --git a/test-browser/tests/libraryDeployment.test.js b/apps/remix-ide/test-browser/tests/libraryDeployment.test.js similarity index 100% rename from test-browser/tests/libraryDeployment.test.js rename to apps/remix-ide/test-browser/tests/libraryDeployment.test.js diff --git a/test-browser/tests/pluginManager.test.js b/apps/remix-ide/test-browser/tests/pluginManager.test.js similarity index 100% rename from test-browser/tests/pluginManager.test.js rename to apps/remix-ide/test-browser/tests/pluginManager.test.js diff --git a/test-browser/tests/publishContract.test.js b/apps/remix-ide/test-browser/tests/publishContract.test.js similarity index 100% rename from test-browser/tests/publishContract.test.js rename to apps/remix-ide/test-browser/tests/publishContract.test.js diff --git a/test-browser/tests/recorder.test.js b/apps/remix-ide/test-browser/tests/recorder.test.js similarity index 100% rename from test-browser/tests/recorder.test.js rename to apps/remix-ide/test-browser/tests/recorder.test.js diff --git a/test-browser/tests/remixd.test.js b/apps/remix-ide/test-browser/tests/remixd.test.js similarity index 100% rename from test-browser/tests/remixd.test.js rename to apps/remix-ide/test-browser/tests/remixd.test.js diff --git a/test-browser/tests/runAndDeploy.js b/apps/remix-ide/test-browser/tests/runAndDeploy.js similarity index 100% rename from test-browser/tests/runAndDeploy.js rename to apps/remix-ide/test-browser/tests/runAndDeploy.js diff --git a/test-browser/tests/sauce.js b/apps/remix-ide/test-browser/tests/sauce.js similarity index 100% rename from test-browser/tests/sauce.js rename to apps/remix-ide/test-browser/tests/sauce.js diff --git a/test-browser/tests/signingMessage.test.js b/apps/remix-ide/test-browser/tests/signingMessage.test.js similarity index 100% rename from test-browser/tests/signingMessage.test.js rename to apps/remix-ide/test-browser/tests/signingMessage.test.js diff --git a/test-browser/tests/solidityImport.test.js b/apps/remix-ide/test-browser/tests/solidityImport.test.js similarity index 100% rename from test-browser/tests/solidityImport.test.js rename to apps/remix-ide/test-browser/tests/solidityImport.test.js diff --git a/test-browser/tests/solidityUnittests.test.js b/apps/remix-ide/test-browser/tests/solidityUnittests.test.js similarity index 100% rename from test-browser/tests/solidityUnittests.test.js rename to apps/remix-ide/test-browser/tests/solidityUnittests.test.js diff --git a/test-browser/tests/specialFunctions.test.js b/apps/remix-ide/test-browser/tests/specialFunctions.test.js similarity index 100% rename from test-browser/tests/specialFunctions.test.js rename to apps/remix-ide/test-browser/tests/specialFunctions.test.js diff --git a/test-browser/tests/staticAnalysis.test.js b/apps/remix-ide/test-browser/tests/staticAnalysis.test.js similarity index 100% rename from test-browser/tests/staticAnalysis.test.js rename to apps/remix-ide/test-browser/tests/staticAnalysis.test.js diff --git a/test-browser/tests/terminal.test.js b/apps/remix-ide/test-browser/tests/terminal.test.js similarity index 100% rename from test-browser/tests/terminal.test.js rename to apps/remix-ide/test-browser/tests/terminal.test.js diff --git a/test-browser/tests/transactionExecution.test.js b/apps/remix-ide/test-browser/tests/transactionExecution.test.js similarity index 100% rename from test-browser/tests/transactionExecution.test.js rename to apps/remix-ide/test-browser/tests/transactionExecution.test.js diff --git a/test-browser/tests/workspace.test.js b/apps/remix-ide/test-browser/tests/workspace.test.js similarity index 100% rename from test-browser/tests/workspace.test.js rename to apps/remix-ide/test-browser/tests/workspace.test.js diff --git a/test/compiler-test.js b/apps/remix-ide/test/compiler-test.js similarity index 100% rename from test/compiler-test.js rename to apps/remix-ide/test/compiler-test.js diff --git a/test/gist-handler-test.js b/apps/remix-ide/test/gist-handler-test.js similarity index 100% rename from test/gist-handler-test.js rename to apps/remix-ide/test/gist-handler-test.js diff --git a/test/index.js b/apps/remix-ide/test/index.js similarity index 100% rename from test/index.js rename to apps/remix-ide/test/index.js diff --git a/test/query-params-test.js b/apps/remix-ide/test/query-params-test.js similarity index 100% rename from test/query-params-test.js rename to apps/remix-ide/test/query-params-test.js From 9d71a1458aeef60b5e95c778c5872679104233e6 Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Wed, 13 May 2020 10:08:13 +0000 Subject: [PATCH 04/37] Added configurations for remix-ide --- .babelrc | 6 + .env | 1 + .../remix-ide/assets/css/font-awesome.min.css | 4 + apps/remix-ide/assets/css/pygment_trac.css | 69 + apps/remix-ide/assets/fonts/FontAwesome.otf | Bin 0 -> 134808 bytes .../assets/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes .../assets/fonts/fontawesome-webfont.svg | 2671 + .../assets/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes .../assets/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes .../assets/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes apps/remix-ide/assets/img/debuggerLogo.webp | Bin 0 -> 19862 bytes apps/remix-ide/assets/img/gasStation_50.png | Bin 0 -> 960 bytes .../img/hexagon-remix-greengrey-texture.png | Bin 0 -> 433544 bytes apps/remix-ide/assets/img/homeStickers.png | Bin 0 -> 1447627 bytes apps/remix-ide/assets/img/moreLogo.webp | Bin 0 -> 2652 bytes apps/remix-ide/assets/img/mythxLogo.webp | Bin 0 -> 668 bytes apps/remix-ide/assets/img/pipelineLogo.webp | Bin 0 -> 3530 bytes .../assets/img/sleepingRemiCroped.webp | Bin 0 -> 12772 bytes apps/remix-ide/assets/img/solidityLogo.webp | Bin 0 -> 8524 bytes .../assets/img/sourceVerifyLogo.webp | Bin 0 -> 30162 bytes apps/remix-ide/assets/img/vyperLogo.webp | Bin 0 -> 30886 bytes apps/remix-ide/assets/img/workshopLogo.webp | Bin 0 -> 3782 bytes apps/remix-ide/assets/js/0.7.7/app.js | 271121 +++++++++++++++ apps/remix-ide/assets/js/browserfs.min.js | 8 + apps/remix-ide/nightwatch.js | 8 +- .../src/app/ui/landing-page/landing-page.js | 4 +- apps/remix-ide/test-browser/helpers/init.js | 1 + nightwatch.js | 84 + nx.json | 6 +- package-lock.json | 22989 +- package.json | 199 +- seleniumConfig.js | 11 + soljson.js | 1 + workspace.json | 68 +- 34 files changed, 295451 insertions(+), 1800 deletions(-) create mode 100644 .babelrc create mode 100644 .env create mode 100644 apps/remix-ide/assets/css/font-awesome.min.css create mode 100644 apps/remix-ide/assets/css/pygment_trac.css create mode 100644 apps/remix-ide/assets/fonts/FontAwesome.otf create mode 100644 apps/remix-ide/assets/fonts/fontawesome-webfont.eot create mode 100644 apps/remix-ide/assets/fonts/fontawesome-webfont.svg create mode 100644 apps/remix-ide/assets/fonts/fontawesome-webfont.ttf create mode 100644 apps/remix-ide/assets/fonts/fontawesome-webfont.woff create mode 100644 apps/remix-ide/assets/fonts/fontawesome-webfont.woff2 create mode 100644 apps/remix-ide/assets/img/debuggerLogo.webp create mode 100644 apps/remix-ide/assets/img/gasStation_50.png create mode 100644 apps/remix-ide/assets/img/hexagon-remix-greengrey-texture.png create mode 100644 apps/remix-ide/assets/img/homeStickers.png create mode 100644 apps/remix-ide/assets/img/moreLogo.webp create mode 100644 apps/remix-ide/assets/img/mythxLogo.webp create mode 100644 apps/remix-ide/assets/img/pipelineLogo.webp create mode 100644 apps/remix-ide/assets/img/sleepingRemiCroped.webp create mode 100644 apps/remix-ide/assets/img/solidityLogo.webp create mode 100644 apps/remix-ide/assets/img/sourceVerifyLogo.webp create mode 100644 apps/remix-ide/assets/img/vyperLogo.webp create mode 100644 apps/remix-ide/assets/img/workshopLogo.webp create mode 100644 apps/remix-ide/assets/js/0.7.7/app.js create mode 100644 apps/remix-ide/assets/js/browserfs.min.js create mode 100644 nightwatch.js create mode 100644 seleniumConfig.js create mode 100644 soljson.js diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000000..51ff2990a9 --- /dev/null +++ b/.babelrc @@ -0,0 +1,6 @@ +{ + "presets": ["@babel/preset-env"], + "ignore": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/.env b/.env new file mode 100644 index 0000000000..7e65b165f4 --- /dev/null +++ b/.env @@ -0,0 +1 @@ +NODE_OPTIONS=--max-old-space-size=3072 \ No newline at end of file diff --git a/apps/remix-ide/assets/css/font-awesome.min.css b/apps/remix-ide/assets/css/font-awesome.min.css new file mode 100644 index 0000000000..540440ce89 --- /dev/null +++ b/apps/remix-ide/assets/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/apps/remix-ide/assets/css/pygment_trac.css b/apps/remix-ide/assets/css/pygment_trac.css new file mode 100644 index 0000000000..c6a6452d24 --- /dev/null +++ b/apps/remix-ide/assets/css/pygment_trac.css @@ -0,0 +1,69 @@ +.highlight { background: #ffffff; } +.highlight .c { color: #999988; font-style: italic } /* Comment */ +.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +.highlight .k { font-weight: bold } /* Keyword */ +.highlight .o { font-weight: bold } /* Operator */ +.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */ +.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ +.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #aa0000 } /* Generic.Error */ +.highlight .gh { color: #999999 } /* Generic.Heading */ +.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ +.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #555555 } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold; } /* Generic.Subheading */ +.highlight .gt { color: #aa0000 } /* Generic.Traceback */ +.highlight .kc { font-weight: bold } /* Keyword.Constant */ +.highlight .kd { font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #009999 } /* Literal.Number */ +.highlight .s { color: #d14 } /* Literal.String */ +.highlight .na { color: #008080 } /* Name.Attribute */ +.highlight .nb { color: #0086B3 } /* Name.Builtin */ +.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */ +.highlight .no { color: #008080 } /* Name.Constant */ +.highlight .ni { color: #800080 } /* Name.Entity */ +.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */ +.highlight .nn { color: #555555 } /* Name.Namespace */ +.highlight .nt { color: #000080 } /* Name.Tag */ +.highlight .nv { color: #008080 } /* Name.Variable */ +.highlight .ow { font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mf { color: #009999 } /* Literal.Number.Float */ +.highlight .mh { color: #009999 } /* Literal.Number.Hex */ +.highlight .mi { color: #009999 } /* Literal.Number.Integer */ +.highlight .mo { color: #009999 } /* Literal.Number.Oct */ +.highlight .sb { color: #d14 } /* Literal.String.Backtick */ +.highlight .sc { color: #d14 } /* Literal.String.Char */ +.highlight .sd { color: #d14 } /* Literal.String.Doc */ +.highlight .s2 { color: #d14 } /* Literal.String.Double */ +.highlight .se { color: #d14 } /* Literal.String.Escape */ +.highlight .sh { color: #d14 } /* Literal.String.Heredoc */ +.highlight .si { color: #d14 } /* Literal.String.Interpol */ +.highlight .sx { color: #d14 } /* Literal.String.Other */ +.highlight .sr { color: #009926 } /* Literal.String.Regex */ +.highlight .s1 { color: #d14 } /* Literal.String.Single */ +.highlight .ss { color: #990073 } /* Literal.String.Symbol */ +.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #008080 } /* Name.Variable.Class */ +.highlight .vg { color: #008080 } /* Name.Variable.Global */ +.highlight .vi { color: #008080 } /* Name.Variable.Instance */ +.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */ + +.type-csharp .highlight .k { color: #0000FF } +.type-csharp .highlight .kt { color: #0000FF } +.type-csharp .highlight .nf { color: #000000; font-weight: normal } +.type-csharp .highlight .nc { color: #2B91AF } +.type-csharp .highlight .nn { color: #000000 } +.type-csharp .highlight .s { color: #A31515 } +.type-csharp .highlight .sc { color: #A31515 } diff --git a/apps/remix-ide/assets/fonts/FontAwesome.otf b/apps/remix-ide/assets/fonts/FontAwesome.otf new file mode 100644 index 0000000000000000000000000000000000000000..401ec0f36e4f73b8efa40bd6f604fe80d286db70 GIT binary patch literal 134808 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 literal 0 HcmV?d00001 diff --git a/apps/remix-ide/assets/fonts/fontawesome-webfont.eot b/apps/remix-ide/assets/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..e9f60ca953f93e35eab4108bd414bc02ddcf3928 GIT binary patch literal 165742 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 G*yFsbY~cLNXLP73aA74Mq6M9f^&YV`isWW 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

5q!RY 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 + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/remix-ide/assets/fonts/fontawesome-webfont.ttf b/apps/remix-ide/assets/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..35acda2fa1196aad98c2adf4378a7611dd713aa3 GIT binary patch literal 165548 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 z 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 d0mRO}xo^G_%I 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 SdSQM28?+M|D(2r_;{O0|uQ74} literal 0 HcmV?d00001 diff --git a/apps/remix-ide/assets/fonts/fontawesome-webfont.woff2 b/apps/remix-ide/assets/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4d13fc60404b91e398a37200c4a77b645cfd9586 GIT binary patch literal 77160 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 literal 0 HcmV?d00001 diff --git a/apps/remix-ide/assets/img/debuggerLogo.webp b/apps/remix-ide/assets/img/debuggerLogo.webp new file mode 100644 index 0000000000000000000000000000000000000000..4773d498e9eaae286cce0f2d2bedef9998596b57 GIT binary patch literal 19862 zcmeI)1yCJb-XQ#oySuv+^y2OW3mRO4ySuvv4HDdfYl1t$-6goYOK{oCGw*!g>{h)s znX0YY+O4OnDOyhdIRDefy6aw)-%Coy$O8cC5~7M96}dIw0RR9h=;sysZ55GIl;+|D z0Kh0=Y$)C8WBA@N%lalW4vAo{n`3@#q~|T;W6yP*VC`J znwE=wpPy4Tao{6Ci|xki)kh`J@-w7-}z|lB+^$FE2YCi z{hHzGyCt7@sy^&5b!~qejXM}juc4nT zQa81EFn@@fE2Nkkn0&uR!Xzf7^{_P5ASt0GFM^Ml)pR`Xcs*?blQN1s)7g`+@S0ju z1iXH2BFMOimgfRDH1&4-C?;yz;rA$d3#j?b>oA7YD?Rn2t@2LN6bFe|R`66}$}{#I zvEEuaIpbJe1N8f2o}>iDHS4aale!gK$~v#Ta2yh#Ff{mWpOx zZ0OdzV9|Se;<~<*lLLe~Rx&(?H>I_!Lqb;G(1%YW;w?i}FUt((fL-pxl7}?Ds7X>r zdE5NWqYUK;XhZo!fzmdxbRZD7F8W!`^O-A$tcgo6Y2J?yKlyPJ%RTu{e{$l<}=;2_rX5A%*(APm{H2;HOb%bv8Wzm{Iw$ip(6{Ymh2)J3VmO4YRQ(K zkB@YPUnDQ$I?n{0K@q3#r%uZI>3aoNrywH^8qs#wNR>$IU@QzDoAto zMEG}QM+}|Ky24_wjM!dz@Oq)(EF7vEvoE;tKPk|LD$%HDVWUXYoHPmb zFhkRZOV{D`qeUHjbay_sV9?^m)~Q(|(F$+4`-Cf7g%Uu0d-QNgJ~6^fqyvjAKS!cv z^eZjuv2?+O+P&bz(rCL>G~c~Z)T2_(S!X0EXiPhh*eDrQ($vhL75`E(RN85$6z7Xk zTnxV!*yXIPOQm+zO{*B&psXmNCz|V-o9S3Ot%h0dp^K>^P?>N4?l3w?E!(!jb-F?14Jo0>BG?7JW4zc)p^7e=*q` zM^U=-+q-LO5Pec}Reu1shNG|FKfsg7^2!8QVG6PID+eqt!m<1Aa3Eq^~19kj2Kue*Yl33I~YTPfWMN+XuZT*sg#%R*K< zpv+Hfl+MK{8iZT@Ih4_yqNF@hnLnf%IkjmPnIV$an$t_?&^4Cdv8=I=1U8FSKP03SEd0AX-5JinBi8J|xR^+s{*t#$eGqt$d;yR4bp)I1B z8jEU>Ig#TTs3{tyHuEbc2Y8<@FMq`^llXzb0$(qM&K9UV=^dlILj#|7O5D`tROQ(B z1BGfhb13yYt!|9s2xQh5<}sL36Vu$_`#|NwpDuV?l440CUDp!n199(1dM((tFJ5H8<^nj(B;jSCP$J>D^kh#Lg zD`+l}+2Kf3-lJ7z+}lpP!gd*gpeP3Z)n5KBgWg8M)HS;k$3+y7{;aawi)17t6LMm?YE5GB*7f!HO#V#wSygsYX>b$nK;{ z<+Yt^6Pdtk>ru$7D$j;UwU}#}0L3;6W0|mKoCYD2@Iai}r>ic(241izrAj&IIO>fx z$l64$BBH#;Fz}eckef7nWGDo$($wDQ1Ic&-XXLdmD-n7|r zo9}+tYIcC<&|{>DjxhM#|7`-p^68nKeyj5jm4fxwGEzaN zg&9|YBGVR!ms=cnH0mVUoCW#6;AJ%&uwE}2hWmr@ScZ2pFd?WJKlQ3T4OcOeU{Du> zV|-L!x6x|1bk3P{R2*BdtA(U4uk2i^^`6}qzL@b9AzPgbL0BZ9pL68dOYT*)=*U5} zJL-Zu=~b31g|YKG3+0B`u}ySd!lz{|A#OcsBiQUwTC>rRy+vY^>l@&W#iRCV`1Edt zOB&H-HL%Xzsa7O`@~G7|&iNmEcNTHSeOf097S`e3%tziv;Xr9uqYBp|AU6NSeD&NO z4L+Haai)HB+?|!i(G`Y-LXGovgjE_oaWb3cUg5Hpw#CWPTCVr zF5b}HyjVte@sVFR7W?dV_h5Z}s2+R1M&0ewV%a65D5xya4Y?myRz@b=6;@MC&4H_- zf-Y|C8&e!GKF2#ul9E4KYbFNv(}DzV9C3cKRYUsNI+O=|f4{n5V1URdlC4e1pt{L0 z0izzx$uu^=M-v@&2Y>xjEgx!#lIy{ETtzaZKzWs}1{dqg^8Ocr4{%>n@gK}bKPlFV zM>Ld(u&RiWRPaC!GVFKj_K6Fn78S8>h?59Ph09HO<255jM6iu(h;>D@>!i~QZ?5bw z=}Ptxu#M|bfDWy&%eW(!i|e1Uk$xQDmqmi5d3cBf3(U8Id+;r~s8-uuFy!Z+yv1=t z!yk2=AZbPnV@%x(-dGp+b8m|1tUeQe-DktM9pdNu3{CUUFW~C%9rn3kS_4+9gsVrx zKCdH#nUQ$r3A!0Egtm#MOVK`WZ6*{h(iCc6DpRuS+3`bp{JOYM+Ptb@RdAHC?3wMl5aVg#4rNlg}$D%@6J!S6>3eY^tF-ZB`slx|Ouz{NsFPHro&#+Gn z*!g5=fS3?Begd(uw_=+ZLebj^k8e)ARP^J6Bj->zCaZlC?52urk`Jg~O#S)}l9vqc ze&XYxppbaJwKX$%R$kCTG{Iq|Pg3ww$zLqnzh&k_`@dmbi(f;3)ArjjRih#WorF7I!e;-Va#W?pvV z#JsgUevH>?C1x_8ond&I6VJIU6p>=@>}@_*P=w!=M;d1zRnUsfpW4Al0Amjek5w`v z9i4AqkmJR#z6}{?YZuVUemFe?%J;yikv%4c|az(?`+-et7@Ir&cDhA}dPdDlVB33sE9?av3f0`_AKV?&saeoQ!v?YZg=C zT#zOa0LS8QO_;PP%mJu6BGjXq!V9gch@W%6xKk+##-c*x znmA7_!zPXwkQo9#qRBXsDN6bw1ll7O^gQ}IKCmjGY6#Pfx(M@R+TlP|`>Uoc`Ttmi z>Z)!_QQb5V);x(og^5#O7}XW_XoH6|^fR=m1RpvUBnNXvm36{UG&S>AJeGPlDk0po zBE{HgY8i10*tvm5{hVo8T+jqf+hD~T4lPZcvWuN_tOw}&E+W{}BkTWzuOZ9bpY?ib z87y&)LPWf>Fl84$=jjD3*m#=XGlC1S<7SJ&3Wj2SJ*5LkTwBd0rQgGlTlP!bxDwV_ ztVflrd8X}dfDT76caJwnTam)cTEP`JO)(6NNRMS}-6uv(ZySa!T<}WV!1_+gOX7kd zSM!^;TYy5uTVV!t+#_*g5fe3+Sy8U$g0|l*2-gL)bw=C&ML3a{ws65UaqB&)0uko) zG4Id?C29$Bqy;C@jyrm|8cZ+HE5?x@PP{D0FzuZbPZs3ntO)C9Og`ZUaI~YGucqBf zF*E^R-?+6mZsv`%edBE3IL5U_J<8 z{Efrp197HrT+AEC_QnnFd^P=|6vMT;<0x0tPuovm=fqREV3@cSecMDheatd+(MO;g zW5J2LL%| zFupN*AO;)65HW+8NDz|@Vr<@+aS&7a#vFhcl{e-$h$(twyg-cd8`B12Xx|up5QF)a zn>Qu`#LT_rMjXVPff(C2<{rebzcJ4sCgqLs12HmhOb3Xe9J-JMPc}-623<7J2}%+R zN~HlAf)UKsR1FFASCcDC!!!^0)%{c%ZU~Ufde5@Z)Ng^Sn$-p5@>4O%23E3 zX<2Mrtk6e`SI8E`m$(!GmFp@KB`fEmr=;ha74a9eZr@Yr9`RaiTdhz>2UiS#i~sJD z0#vTAOpqL#lb@1aY?j8?)V`IbusOoF*tS_AkM60E{TAQk5(ZRmsEm_5okNEZ@dZmf)vM4lg=l-_LS#@E!jm86J1S~TBwSiz4L zuawP?A9OJTDmPVrmSmcbo|N8gX2D<3xs{;EJZd)Ic3Q!X4z3)|i=T8+2P!vLMoKEo z%TG!lHq+v3>fVY|R2-$5Z@a9ZNB309=EX0#NCA~wD#Imh=aD9*Pn${c7j$pMDB6xZ z&9~iFkfR~1hI8XLT)2SBt(BpYG4rDn(wEJ+_?mjRq7$tBVO}uuNCO%;Hu%A_zM>tpmKX@$q~N!w$BQ9bWfFRPW-(K3{bhF(qHm)9%(}Qr5S*~pg-Or`5^Rq9`Sk?`?d;R zki7oax<>P|CG@h@G0t=T_|)(Bf59q6`>&JzpsAXt$%aB&J_e_whiy$G-i7FR1(g(% zDv{JQp{M@Y{$%+BbL(KL^2W$1j;* zyl{=ioVM?%Uk*hq(yd56xq9$md>V2`M!8TO)<}(VuCNnZG+{P(&7bE<7ozEfoQr^S z9vAb954*(S_Yt0zn!GaWPY@3BDl42ooKdjqbu=GS{cpLN0Lv=~XN@fz+K4OEo|RE& z^?5=dPUo<$^PE3Akf3u@Ll;XwU>8DzLrY5DF&_`iGiyqoodZZCJevDOPoya$iF9mI z;tP-+!lo2C(k(v~%v16pD$k(~a)Lf{EoJO*~L(SXQjxmaAAFJEJ zDCz{6QKd~hGlE|GiMK!#ERD)QPsQg4_9%vZ8xvlXDLl7U7?6=geW0vLNKnEF>Pgy7 zyk!)7IrDcPHc-1Wnm1o4joF~Q{g+8!wY)l_Fgx^d8I3Q{Oe3G-^d^nno&0yVD9}te z#TJ$kXf@Dq6aopf>O}MW6z$P1lZmQjx~fQAh|-ti0TD9;!!Saqd@T}_Dpt?5A8d;J zOAm$L3O%IcfKKp_}$$l-0{U!Z-V?0At}A zZ%tU;_0p%C>U7_*5n_d@v)TnQrf0_y;>ZJa;~PbV4*VLJ*n92x1u>p~9CcefCQJD% z?Sx&}LO0VxLApSB!5WPz3dy8h%tE*9HG$C$OM-9a2yx!NSrw;SF?Eqn$d&S=*j&Upi#J*?ot;B#s>tj}K&;^(0lBzbf<D{I z0Y@0YzdZ2-!~V+AD9lxV`&LZX5Z}_-%fX2j)-rNqv;2un5%F>u9#dJbCvmD5ygxzg zk0@}MB5)90LsO=|V+5=$kgn;FHDtZ`v+lxEh{RTMs@#D&TTJs`1us)SKoU=kptp*N zRE=@TeuZhCt?woLWaaN05Q;O3`hy@S>qObwSJ4?|e`(dk6b9>ijvI+fI)S@n;7ew4 zDxSHDFiMAkDGR~%g(pn(JBJ(l+9k!hCP4Pq zf7Lee6H|2!-Ts-spZPA>st4!9j#yFZ^me|yzg>Bq-e z%6W*DwTm_S4kV&Z)Z;dh*#{^aV4?XwJwt42dIxT? z3qQXi;w3r0_i?j07(itKE`3noQLZR0De_N=hGW^w8Ud{waTSi3x$qRG(|c*_eqJ5w zP;Xj0e)5Wc6v*})x9{lKSu;N6;(R6E^Xn;O80wi)Ngn?8hg&WtfIKJ z`r_y2(9w54AN&}yt5140&3F%k)mjCPZ9sfByazCI*T;t89(Y8y_s{lNqeiZdy!Gh^ zOTKC!=k5ewy%mIU|8hIJ0bqAuQz0~9J0s`@lRR%HBQ!ugi`oFJxa;#FPsH4EYy+Y- zvQ4)DVC7Yi8U}QGEh7+2j_nlu>o{W#K``Ze-c}x+@M8^uFe6*uXIK6yJZp%=ED=`% zV-UpK-Vh$bTx0VAFtxkhzdeL=`ff`Z`2jL_t0o44X7{TiOw}o86?@Vlc;0r1IPMu|NbBG}_p2*9IY?_|!%)`5mFjTT=k)U}Juto-o{#sP^py<> zDBeB4b-WF*=hMev`W)M&?u3OZaYkWI*F9bCg#E+zRsfRj(R)O@kT4#4yfhl4SJ+O0 zz5Hh;3M}b+(YugF9;-eXIWXf^U2umrt&RvZ{se@~2pStzgmwtb8iN}*G9LY$1hvLnnVaYtoo4_ zf3#Q3VEE#fo7Gm>1|lYrbs8CM5gSeeeQEc2AzR*?~LaUJ=bY7c5F2!JxKpuH?^U z$ajLd2sS{;<^z*sjT-kE#%kYjs6a&O3!y-1zizr<+gbTSlRN=$=!=cE}lhFy~!`R zNl+K?R)RuHup^hUzMMhYl;<_lwn`0Y>6u`zO_}NMwsC427f^jC15%TqFA%u{luF1|Z;0%Om=``Jgk-D&t$IxrJ3 zR68IIY#L@mEO}=~A#D+?r2eWfXb0Q#_|@U>;5*PQX&;ltSPl$!()hviOU57*f#;X` z>SRhlQrHEuEb{9E*jF>QSI-Quo*z}(xy#+2(Oy1C$5$$+zfoVqP4q&*p1K_a+ zuZdP?V}rykGmd_Q1a*Rq?SNxH@b4Xth~a;{sE{+rJMgxG#=+~YUmk6gUU#XiL;kgo zUda&|du^h{6?g~xG*%-BCHa6oe)#kK=@j>zgF!(H&m2N4W&9^K&ULDvTz9ivopLxA zWdX~SGFu<_-YrAAIx@giPdkj17V-$eF|MnvL5MxasUvOEp0s8h)`sK@Ll-^pRnM?~ zF0Cd00N2=8lnk!o6Z^qskKWC*X~x%}>~&Xp>uxAW?yxkos*{zN0|)m=6P@kns&jq-I_7_p;rL+wyn3Zg2}h%W(Qz@8)I)vd`7#5zgoE zk;Qg3S?|C_%WmitvK7NGVDf6n?4cX0E+U3baiZ{GS+f6npU=3hR@~MpCwfEPAbN6E z-ct{Kk7en%M@d4_FM8r3cnN*UIFq$UjsdI;S#;tzw&(cqZYFDsl(k@>Q89f?XmOY9 zNYsY+*4!C76~}V?GA7Pvpk2``)aln8IfU2=Uf%`W50+~MQvy3O46!rgLRKXsqkVZ} zJd~FB*jzL8?#3!i9z0L#?@_Mz1H%*S@tQ!vpk+h>3{8mv-)*z~)J|IKgMrBj_J9xG zq5Mb!TTQ_jP57RDSK%cC^AlH)VeUPn3lr=yLd)ur<)G7zV&Z~qT;+I!1o*Ep$4FL^ z_MsEc1MAhMkowgXV%TA`u?|qf@WzfB&$ue?FbjkqQOw{zkmYwDZXka8nm+r0XmUY4!@I2Bk428(HHWatO|NK-KLNP7lF& zK-VD5I1?jdJxw#d@7xW9XVi zk>^gApMOrl`6N>N zREG-J#)k{&n>{BVIivIv2n!ZmL47%s8uCEfbxUX=zD1|MRk-u(PyXw?6H>7_@7f{s z>#HqPE9@2DkoKg6^j;dwhER0#NEAy|e);Sn+mxmk`pXsH80d;4QnOis$Y5Whmm+zT zEAm!!IwL4s2~p;tSC2M0rh0NxCsJ?7f9HZo+uU?(PpjSU_nf1ztU$fyk!j(8f_J0j?oQLyxrO_rG1`oE&}i`&QY=oSNurpqxCOB4bB?S)5Fo(mYVS^BW@rC1-eFHzXq30r2~sgFeXE!T031 z7l+8)kd%j?Auc)|)X{!~RdQ_Tb%(N-fXKW|Ci0f)s@i4fiB0tgYdiM4ShIMs!-CzU&YV4c!ThirJRwM=E`MfQ8C!S6k{X5cAtK}PrFoayqN|5g!c zah@WWuY@>WpBR5gBqhomptWFJ_AO}^?`6{r7`buwZYO_TKzjdo{UR6`lYE~HQc#C? znk4H}TYYea_w6LPYQ6eEXdFVa?wg#ab|8-aSBR?gVs5Hhh$ktEXk0N zN=13SLd8z1ZZj#9=1^^qO7tQ>eRO(X?DQ5GxFG9yxj_0X*oH?{=3bVvCd`=!cywMk zZ{x7;DHTbp#^)k;x=_tgsvJp8>HVE`_7jDw8P$VoQJaj-0$gG%#^>N;F;P4Cb0PrB zj;!2cUQV*Yg)(9+XR^2Tf%N`}{dvjglu1EkijAVx>n`XD8_HYn&%y1#2)%8(T<9$P zV2Ve#_%XZlqm8rX<0t0%{LgIK^#n`pf91HwI;kMW0u$W&tb$9AVFY^T1(;8RVGY_`-t)m0@TtyxKL;7ck*oo&w+_H^#}>B5a7zA7rdZ zP4hA3!FkdFzP`eEz2|$V5!>vP&hO1~%#Ixv@<;F>ef@;#-j0Lb$Wl80HpnsWtQAca zleIy{Bvh1PeWKGq_kf2xkq6{)O1sJuggpSzjAZFTg`i}~x|b6l(7aF1?RY5M(y#__ zwPjeB(HR4-X+h>89%JfWgLkm!eWuiOrxOR$6c=Y220?EW2q z9_E9A{-CcPG23{2EN&M>y7GS}rzCnhKi%crPX5_i!Tp?HS zWk4QbZ6c`JQ%yP6Co;e1E-9*ji1Ph&w;6kXd-9Mhe2&Sa*6z;<&ViqL?=MxY0U75t+*Lt53&A|%>{Gdgz2=@h*RN$IX3^X3?!}?2BI!@N#`sVn~3(bb z?|)ump*Qm)J6mU_&O?5*a3q*WCAy>y)z{hy_K-HWA>3bDKfr-h`+0;U?6;~S%&PM# z2`x)XW*mBj;Jil(?Dx`_pEdY75#`qZ4RvDHO+O#k z*D@abB_MdN&_AZ3ub>G^rk(-Z+3m3mvl}xC@*G@w5stS*e#(Q@aVxt`B&DH4l=bNs z`BSJDZ5<(E=htn~$&Ep2M5s33d8)__<*4f6F{WTXZLM0|S=k}~sn)OL~yRP}KVGFT$;G0U`#>6q-PgrZWRKrHa zXk>K-k<{ChODgsPpdz|M-Pn{$Bfb z0|Lc};8i?G$r6q}k0AiV5=#XXZkElM65<|0-M%5^b;N@~alPLsqttj8$Cn%ci}+GT z5pFxfgqEJ<+en5u@BdOMHyYlY#d(6vqM)4(x*fD5hr|-1Ysc_?*3-c=1fdBu(^xow zKFh0V%x)AY%?V^shl$E!Yt#0{^&`I6-s`=FE{lP7W&tj5$X8I{6;y#g2~f8Nih-_< z(}i^q`SlBQksE|)^{{j&019r>zIY{zk?lfxD}+$n8Wqgx!pN!;=>xyOPlRmyCnp7c zLklJt+Cdjfn}|Or1azExRh2C>N4Xz5Y%;U;9Hy*-6G5NH)^K78*EU8&WH9Xgm@g~6 z50PsiJWq7_@Zb&6?d8}zooQo0$t5Ju!gxylqdYx+!i*s3(~9eIn9vR$O3GZD;5R1R z@zD=xh&Ac35srd-3{gk z5!jimc$xOruKHYS1HP{uQ~tDXFNWt2alZKspb)6mZKa^1_@J+rDdQx6q>qDmLER5m zh=if4KzR*h*-XDq-_-goTUqEN^T9^vZY1ZUK`|GP0`rI!{kJ@NxZlXQ_W|#W&bYSK_8T~LPs119FX`5gi1*S{%QFT=w`TV%EA@UU1ObN$8w(37 zUYLQN{$Z;t1VJ-3)vMv#JN>8jt%V4Rt<#nkV%VNOse>eSeeRH*sRMTbgMB3AcmyGI z1v~Q8s#@q|y;pU|CO(A12P$LwLs+@CjZc;vl0UDZm76?Ss((LpC?gn!C~J@}v6E_ouazIlL&2=S4aVx@lvxvO`EV_1PE{atz+$lwQ_FbJP$;RW&IJ+{%b;A9Cjd=EF{MR3dQ~rE*LB&}qYl z%uSey0a}92S5&)h$csr5ZWVD^o+eII(-;Fy%*h2ZVH5{mSeghx2H5q)f$VMU_a=;N6g)>(+_gtEFY#=Nam6Ho92ywN!jehfySXPHm|+1a)79ymw;h>n zaZURfQX<#qoxDPLw!35EEx1Xp57K+rh-_TTMiS_dTptdJxybC~o{2*Lsfn9+B7*2b zoG9-SgdNNulZlxlNCv2S;T4IYpM+!L!Od}~IH8JBI&Y9T@*pP+MU6v);3sd8-j#ww zP8jp*SR-4CFS&i=1_y6Mz^ilvsO7y&LYEa+6sAI>e+=NAyx|~2mp~=V3vk0M#^I|83N{d^e zub2ZAM;*QKD#G_qn7sS|?u`)GnAy>?2#py%xAStwsstJKr2QU8ky9(>zJH3*43Pu#_ZL=Kunv$6&%bmO`L&WCYGz5}ydJAC6$P~fFN}P| z(Fw2BkE{=2s=ap`>H`&tcZz(GAh5pe82QagF>1y<7Su$GAX(h^2-yIBJ~ax_hXd5! zPO46e05xy!vm*s_Vrm(0#1MqJ`yYsI^K%kvy|>*Qk0NO9R@dYpdbi2_*wG=Kx4>U7 zk!fj!&Y6Y$#dPoJ#M0W@9es0GqWP6nY~OllyiO+Gdzw*J;AFJ$XRg z&XQmiIX0wQgJbqBc`?)4jYC#EX>0cR12;`E^V*HYqA}|F2Tz|g1l6y|`kVy8cTQ<2 zvfvzr({4N>apTvTi;RjUygo??!S_dkrKbGF>}%)pcK*U27;h!Gpo3(t-Zz|G@FR$} zJxZ)O@q*8!lu{)*M<(w9RmJWSZKAqIP0}I0mvSoYvy*+8X8*uBgR?F?D|^d zaPOmUvUMkYPMnHfH$uuwG1oAYB-}OCoNA5u{+H970v((?9~uH6HTpGmw1#`OU4(;rfQ>p--2TW-hz&A-1FPvIr+%Skv>iJe&TdIWpUH1xa~p zB|RIYo0mv zQ9PDKv2gBy^`ef7;MQaZCy62%XUFVhsd2k5Lg28|@A*~#pWkbG{a<#*U!VSWuiel9 z&^O9RS#SUV`!?`QFnRzC07j4%H%gqGEEiQ3Knej_+hE^P9i4*?2N@_r8YfNpe`Et= zb(5J9LRbEj{IZi{=HKs-?Q%A!FH7wBTa~o+=xIRz`yGoFoMf=d!do;C1N=ifhkw5# znf2#s{~}RX>;53;{}Q0A!hUNtk_%U3)G%OP#Vh>Z?hFBM|2XYGNRR0MBxFz+T5kVI zp@Pa@spt=Hz(13TjoADLA%ntDo^Jk+>IV5`w7{R%qyM@a#72KykNy!xa^~cp)}wz^ zw?vDxKd5v6QZ-Sp2>!e|{1ry+>7Ul4|Eg~JAO4`u{cF_>`?~l?P3Qj$qoBz7j~eGc z>xRS*zSn=$s@r<_`~Ilu{QqIRIsH9z`fn@B-!rE_nN|NibNaJ^tM%`h(;v-E|DHMh(cJX!>*Y>A!!( x`1`T$j~;9PeysbSouA literal 0 HcmV?d00001 diff --git a/apps/remix-ide/assets/img/gasStation_50.png b/apps/remix-ide/assets/img/gasStation_50.png new file mode 100644 index 0000000000000000000000000000000000000000..67586093854531f693190b8a27449d9d50f7876b GIT binary patch literal 960 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πHdMmC}PIeMN<>mTMg1 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 z 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�yif8bBF3M5 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 z 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%0AZ_T8caF6l%3&I)o;=y2V3bK^iIu-0=6_11 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 literal 0 HcmV?d00001 diff --git a/apps/remix-ide/assets/img/homeStickers.png b/apps/remix-ide/assets/img/homeStickers.png new file mode 100644 index 0000000000000000000000000000000000000000..c481cec517d8b3597355cf7b7a7a9c128565b88b GIT binary patch literal 1447627 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

kS$l@ldCKbrtWb7^l2>qfWZY$hbZ^22vP?)w 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

G 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 z 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�kJ;CZrGGVtuDn0tFgk(ZgN0Oeg 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

+&>m4pMlt!dBXgB`q3nt($CH!V;8d%YF+Q6a| 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

wNlIRuTBt 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�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 z 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 z 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 KJL4PMi~j{e0K8iO literal 0 HcmV?d00001 diff --git a/apps/remix-ide/assets/img/moreLogo.webp b/apps/remix-ide/assets/img/moreLogo.webp new file mode 100644 index 0000000000000000000000000000000000000000..a534e103a70afb6e781852a7a9bfb3be6be414b8 GIT binary patch literal 2652 zcmZveXE5Ar8;AdEv3hTb5-lQn$%+=N7D*6wMG%g1cu9gKtG5tsMV72iNUR#YMA;B6 ztWI=?6CB+}TfM$yl9}_)ywBX%JkLBIuKCUV>1T9LTib*R0L--14d4dyk1n17!v$|Z zmjlx^(CMZC08p74Xkc6D+lihLtgyDK7RTyko-~(OGKU^%@k8O1s#||VKd=d)?iY{f z{!3ARus)|Voww6pcF8M9Qx{l18#^sMw%-4;9yEPkfBxcp?cX2gcdV&bpwAcTGgLFm zCgzIWr9E0Tz-JOtBd5Ilh@o}szVW{E3Rjn&`7^x$EHwpfCMUDw>zWDulPZtt=<cK`xtc5*?$BWap}Mc-mJGFysZ`f{ybQlCv4O2&Y25j9 z;&R*ha0`%0($v?C?-ppxlfq^5q*?tIoNxBc*7zjy;x z+{ni>OI^(;HUC*9v($nUmFnJ`3(5Gkp(5U7^vozPe15}Uc}33(zRp&GOMDeehF`y1 z_)HCH9BOGVA5HVdCTmV(z9#F{Jq^b7H9IQ!{d}jJ|pTf2Q|C%L;w&N6wndf36gD zWqm7x+qw!45DJ15h1D8Wi~kn3>7l-Ff4}Tr$e!@*Qq?CN^epjqs9{UG(ar}=dF?{a z64LQ=S0pOe`^`dNyAXp9@ z$w2baKuNGoTz$jcv4>c7QlE$}5(T4@t}X5Y zHCVktidaXEF(T%M0~1z(6~)y--zkk@vF~P7cc|rpBz6s^j%K#uiCIh{9UtNl2ZNIm z?W|d=k{ym#U%i25#$`ChmPE~%uLQhHsouu$GEMy!$pBAhS+u19AGzUUfmSdr zfb3?_)_=g>Y#3q`bY%_zS~R`a_2}S{o1zALeGIb=U$*@DVPXTW*VW~3KDyB?F!Wsw zOPawF{E@^y2|Hr?(sZ*0Nh0VXqRV7MJuqrS>O|xh5BZXkWm}f^m zz~o1mosu;>4OR1__R-+fc9cIWG;GYOFEJaMPjC+}K5mRwL=07NxG+?;oU~OF-+8L;kKB=D9K25gP7G0oWj|$!XA|5e5`O4 zSUt{@!kBVmc<_TfZtis!Cq-m*N^F}%M&ZVg%wb+LSZ~A>LAngsn5;`7E#%xo5VI6( z8%^aTI|70`8GFRQy8-%}@q?sO6WQpuoUo=v8aUEd3V_{~zqw4l4*ly;rvT*dY#4Jw z0E><4E@V3i*W&zy*l&PCOi^!9kHAt_yrWSu&u7lyE6V=XOvzC8Eh#Io+=H{G*6DV& z@>y{@q&En6y3OIH3FQ5aQ_v}Z+zO}>O|m18U9&WixXzLcT@tCOzJ-P^<-f>L*(6lA z6pZSt+SD|gRwH`U>J~Ocp53HrtU1VGKlTGT^NNIVOG*sEFCpFT?z5TiqWl?_d;CE*4eJt+ zy6$Vi72L(xZFpF4%)7-j?7I1V&@rFrwvM^d%Wu>4?8ZLz${h2z0z5->zunG(wau{h z=a19B056>0P3J}9>hd5IoXXNEYDXvGym{}J7A^M`9>#1!cr5yq%m}e!Yqbd8^4a2L z&6=t2%6Leaxa!}j3$b&R9%t=mi}n0>0-gN?D0sFzKat|7xe6fdw}F(`+_~+l z2(9(6BiD|=t&ep|-9^WKoUDZPvbnxSrEv0G1%l{PR|6Rs>;AJZ>G*UhXrc!CC*nL; zh1Xxr>0l~Z-sN*IaxO1p4IcA@wJ7BOR*c`BBqN!t8+_LR(5_R=RqqT jL|&%8Ag}}dOC139*?;){SMnVII6FTOM_;tY|2_W&P_iLg literal 0 HcmV?d00001 diff --git a/apps/remix-ide/assets/img/mythxLogo.webp b/apps/remix-ide/assets/img/mythxLogo.webp new file mode 100644 index 0000000000000000000000000000000000000000..257f72dc598f2478d1ec2bb5153c65293d27fdd6 GIT binary patch literal 668 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 E0Op6gasU7T literal 0 HcmV?d00001 diff --git a/apps/remix-ide/assets/img/sleepingRemiCroped.webp b/apps/remix-ide/assets/img/sleepingRemiCroped.webp new file mode 100644 index 0000000000000000000000000000000000000000..4e01719ad2401aec0a3f2a901c3b4ee7b2719899 GIT binary patch literal 12772 zcmVoHSAN{?|)7fXVk!xf3E{0&HR1_E>54v5<`+ z;eZ1#RKSKc_8QWg#+Yh1vG;=ASTVNr9((UQcGE0LFdETqBSfskMzztKuwa#$|2=@U z=Kp8S%=$Un5itSGUwN_{Z#RCgw69WMzCz&`J>}cGA}R9RpK=a{_RMjcmYeUf(TC%q zD?rp?3?t9|NmdaU9z6QDi6{(j9{q&IouTpgM+J@Ec=#)j*K70v$Da(A14;{izwp(; zF*3k_Bx1+!x)b3>#b+V@pU{Tmi*5rz!E-X8N+=D_gUZw@a8C8>wt-0B=ELLR=Kfr7 zDj+$Q=?U(3ewz)XHm9N&!%OG-`hMDt)Y5sqI?Eg2SPTCQ*o4sh8dw7FonJ@!VWAV7 zygC7`_H}+3U}~VfyFGao+8tko`9!N@(=FZ2FJZew9AJOL7bYK9^JiJJIFNt&&|)LF zy65Pw-5Cbpzx6CxAM{aOSXsyi@vU?=_9q1nJMMI`WEb-94ywKg72KcIQ``RnfZ{~a zhnCFEfc{Uw-L)-JKjRNoRH^z?11lEE9$YxsE{`9O*ik2~7rEhOejh6a%>$~wH}^xN zYk5OmjQgt$-YTD2u?rV>sOnCY3xVS&9kd)-42{R5ELeZ&gMj#vP6&3btSf3jVi~kP z9A?Qf@{Lb7>^)&_jIUjQaOeACnh#0`$2E1WSOcQ8jgP;X=FTfS`MxiO41x~TMIt)> zT?U@%9jsV?O9S=~y;Fp$sb7p7+1W>iCh7sFJ93L2mkhoIQ+4#@yh+yKfL++h=R01n z25_h4o*3*4-4dbG-kju{qwFy{ul1^_D3=C$n7Odnz2>qt3US>`HSHGN?(4+}0p?9oVF?8yhp+Go zYRV2b`2cXS^!ee9BKSqk`sC!6i_o=_Q>ALjh7~6v{$p{o&nuqrbA9W8A$Wr{2W4=p z>N>P_(;zO@rWs;cY2ryuw85HfjRt_#)PhW<-c zfE7W7KGz8u@H@1!rh2j&9TiN;YpS>O0HD~Oz985Z(Q4v9WvE`c3g2YcE1=iBMgj(& zRW)I`ewr`+>=~o$FCoA-ξ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 literal 0 HcmV?d00001 diff --git a/apps/remix-ide/assets/img/solidityLogo.webp b/apps/remix-ide/assets/img/solidityLogo.webp new file mode 100644 index 0000000000000000000000000000000000000000..9a9821e6b504676fdcbbb83e3a83dd553a518949 GIT binary patch literal 8524 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 literal 0 HcmV?d00001 diff --git a/apps/remix-ide/assets/img/sourceVerifyLogo.webp b/apps/remix-ide/assets/img/sourceVerifyLogo.webp new file mode 100644 index 0000000000000000000000000000000000000000..0819bfd3f9ac5a6f6f1539ae1825b57a95bb6bb1 GIT binary patch literal 30162 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

2@jF(&RHXAVQk067S2<)d~W?!kA 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 literal 0 HcmV?d00001 diff --git a/apps/remix-ide/assets/img/vyperLogo.webp b/apps/remix-ide/assets/img/vyperLogo.webp new file mode 100644 index 0000000000000000000000000000000000000000..3f9f4c1afd49358b6a1953aa9f88b28eac914790 GIT binary patch literal 30886 zcmX_n1yoes_qIrPDIG(Dgv8L@DS|D zh{$*0{rx}Ja?QHTopaCKXYc2E_CEVO(AUu^3c7K_TwBA$%tX$D?8c27G{FB$;v2g} zH`I+x^t7JbxPj-w&#Sk88RV|@#!Qc5UMBq&LUlVh@VEaBZu^^6JrAo0$z->7{BFvC z1PKXm6A}{EcfVs7F(nkCh#>S?Us~b~{E_ARTFtM9O=*CL@Sc}^Q=)Kt`Uux7!kS9y z^$m>QJ{}oaqlhWz4F)gyp!=bepa0(Y{4bS9$!p=n#`V|p8LJ2y`#tQe;>mZ`J1Zq0 zBBDxkv`i!GaYoMR@buP<;T#zT1>rA7&+hISJ+ptda%6swyL>YkciuL76fo4F{cDk) zcc4a8KV8dF<$R{L8Oc)lXAh;}2Y=<{8L}XgowRou9`U%RgiJGk!gc>X4s_l!Dp^`) zFy~A(R-3S;I^W7$Rz|;!1OA<#wDp`XK3lP2vYGJ3^;L_|USzN8rSs@-P|GpQr=!XzvOM_~*~!)a z_3q6Yv<>NS@-9kYcg#aJKxZjwk1-ED(*rQFi#d02mVAD?%*Qt31IQak>$1!+t{x?) z9&X9vV7HOy*!ED?;pY{0MQ4Xk4+D>kKV8W3m$u5*9m{?b`aYK-aQXP%{;2Pf;_t&J zxo3ra!7eZUe!o}#(ABH@)iHm*b-82Vh#xu6p#J+GX3yA14JQ`|Ex!qI3N^MAz^L-^ zJXTuyoNrM3j`}f2bY8rIxq@_}l4RE~YBnVW7uu4kFsApT6j0(-PYHahJ~^19TDl^$ zs=cj!bEs^Ir|q}fp|!$7_=;)X#(C;W{qWn)G^}UNB@`Ra+FmkEk~QRe5!Ju&l<9v> zAuNy&i=Nm_zlejf6~H_=C2WY`LNja<@=fX6S@~>AozjMU#AGKAE~G1(#TlGiO0sOA zZ}Y-5c^O?KMc~}U-B{5Iv2Z<259EV4O zjr)eNq`D5jr8)Es3^&{4Z<~}HLS<7 zb52eKoca(QG0|mavZ{0R>#F^Hu1A4!F>nX(`2$#labD@WMW#spwE{UsZrC=@IjbZhZ;HhS{%GRg$f*S8XWPdysu_r zxmAji_b5&nUuBaN{l0#SPRWC*V~i#*HQ{)(kcYSSMP!a0~co9GZL^0CpqpN z_+@ZkRu=zrMNO!M``@~ZKAaM({q3gGaf_vJoB~v2p8#&ez>3k^sj_SAkcxT7BwW5G z2JR((inheJ1jR4l&oBV7M(WGR6eoI3Oa{`xZu+6Jlo8$I^S^y9gT7o za6GV<7bkz8N#skXu()Hotrn7{Ih>L$?I{P?%VUY=G?iY~#{nPwJyy`vdt;Thp0nbK zN}ZNdz1;VGdxNS60t(peGBcB;yDXe;JCtW%S>9hvr17g%OuE4CijBMzQa!Lary30! zvgtA}OLF2^PVD(_{VE!KC5Fwk89hpqKchkCMU0BkqAW=PUM^+Iy$aiN_K5!+tyhIE z*5<#7?vhrIjeD@$AqAR#R*{l+Fl#t;>zKo&J#sRqC8v~NiFL(QR^@9ck{p`RUe8@f z*0G)fo4I6^cNzj*){Q7xoj-~y)ql5eqija18+q|6OnC{@lUuk!-LIWE<8FgO=6f{A z9ozNbJh`63g*2bIXTJLZG_@zoZ<5!cI+Ly1(mrx9Sxa`#=(DD2pT~xXZW3KSq=P0d zX-Y*2+;@)yN0zp}up9WIB4PF@Gd(lAdc}`}?G%r@S-f%SG?9d$W20#CK%`{vjODD+q2 zVQ+-VC+t1`(!WaJ_)XgGleOlSDJy%(5Wyn z*vEnxG$^~UOC6dz5h#vkSgi}75ZBe{1SW82SEkzLAM-d)<_8&>Ml>dn`(FV#B_#g& zout*G?&5@%mhA)8&S2qLmxN~R`TMhiqf$FJWV;YpAf)|9TgICGPBo)3aG^h4h~V~2 zOzoW?crR`5ODU;!JaN{z_IanIXOU*VG^0b8jCM4mTbIl>=JI~Uq;TDTs~fuG&bsgT zSFI%CWgO9gQq-(7<9D>hS|j-`DGC~V{jRb5FQ%7NJaS~qoeT5UF5^$=r#r4}u-WAY zfKfku^cG-)bME~V27BY=gZOPZm$1Xy;QmwT z$AaySGdH*&n1fw~3U{GB_cg%L_Zs3H^88l$?t?}gpI$gKQR%k5Sfm2{Yc@!46{KG!p@wnCuZ%}GvKEZ)I6z(N9Fp}N*FH3UjW};wvt=_OeV(milUNpF`(oZkrITxj$ zzD5Vz7UtICVM`I_qRy{KnO7eQ(@;~c$ZBpSJ(V924CpNbtFy4IEyP-IwK$TD&8wAb zMnhHYV&STw5Y>WWx!DzK1ir@u^qRHUP2j%8vHo@`a6hV{dVqfw;y&(J8ONFWg?t+g z0_X)%|0g?8e6DbFRgMS@%wY#lOdhJ_!INb~$BCld+SMQjmbfQq&OihRgW-L@0?p`u zUnOHK04Iy~=KByDb2>-I3;b@^k3&eJ=tMjv=v-i*>)eNe@=&^zE0CR~8!+EFdC$yf zrv$iv!OJ;qw|9XtqwoUsS`tF!UDn=~m z`TvZfq9B|-X+ZiPSMJ(*;7^4Lrq(P7@+ zw@(q&^b_dS&1u#96))qdXa2fJER3ijCx#(ehn>1cd+>t;j}^48DfSo|OC;ndZ*C;j zsCQ1v`pCeg`)7=E@)j(Y+gF2U)K1!?$hdg2G+~qUD1?2ahoA`>q8brArCl?rOMia3`gh zjMP(9&wtpUjj`apHq(N?gOWz-Ol;c+R!N?3F4qD{xGmNcTTwRT_hK%y44`&61gSuPqR z+6YY?4n$`9-@VHwZt#q);riEilJl~vI~_~kJ$@ZaL|ec$c`IvSky#_*&vllf^5B<0 z^Btu6i}_(v!=w_9&KRc>!Ps-qa{9ZZ7^b5ZGywX$cj@jGM(aaUKLv_+nw5SEh!?lM z7TOBeVo|3q?kXS(^~a|Yf_%OSZgZ)85FdO-SNXrkx0qFR_+JUU*ZXnRRLVDqHao8v zNpSqb-H~-@43TSSJ|#;RLTKlXn1$V~6A}gy+E}64#7F-TQVBz{t2Pf<&%wo>mgP;2 zb*}Au(>Vvd*S}=#_!_u?KS?FrS z4a=K`DG~9$D-~958rpk;&lF2^#mj?=6|$SYB$VG4Vg)@It$b&E+pVspsLA#Fm2D*H zGWlJ@?%T7Ly%~~dG-wLjb0Z}ArwphaysqjEBfp7MZ^;mB69t}ux=j;9^aCdt^j+kN zczGrnThSo0MFTW+{CnmfYSwpc* zXp_8ujt1Spd{E5a`ihfbxluk<7)%qo(<|n9z3eR0&lHzh49iAwN)&#q{?wFF?f7{Q zy+Bn3|F&^W8%7Ki7?L4c0FUk=FI)0G)T$nM%aD>#+%?ay74)&$wf3f`Y$UHl)mFt2 z9prQQ&$cf;s1TA6x6rr@fLpj5T(bp);z}`Tj$S1>6U8mF@#omW z$sE$C*zF|}N^Ut#C<3o57Z@Y+PtB8SQ%kWF7<@Vx@D%v*6~{8ZWYgTDOVPC|o&S@S zg&Rlq8U-p*sK=C)8tci{&=v^Pq@YXy z=51~RfBdY*>S|i(;74+$8w9vu_yq6*IRm(YuN$mF~T;3xJN(~o0^Ph2mlOSvRBUZVAS8}_s;94?idJ1?) zxRgKH=(p!sX=E26u$sv!u;T?Wu+k^l#G{P`&KXEW;PCArJ>29432>)Q-LmGn-mXUU zjTYQsfP?viecyC|S8fEG$UXqpfS6LP2%W4?mw1&|Ie{M3Yugw}(a3Agpm`gLRh!g7 z_Bqa9k0xVi1#Y1vWPNY)81o-fT`7YPp-r}q3G+bK?6M_Ndf6f@!Nn)1`9VvqM6H4X zd6+0TUSgJN2>k^ah~=)(yh5ybSuGR4tS3ly@n(py%#kBpx86RhUCSP2)`eKsdY1IS z8>2FsfpvPIP|YJGCvRMa2EA4)r`OG`K}{$~aFjs`?y#|dBc=R5efx(U0h?HUq;)5} zgHw8qo+(I-6KdA0TNum4)$G7OytZjiUv%IT zzgy!T&t;srz+!!AMdv5a(!bqQA7cI!L)5X(;W^upjg^LW`6t8zL;A;dBn}gJHVhTu z_PlI*mz)e38~6zB>bloLpzY-kol(QCmpC^H+k){}iKv`1e^Sb*;o!U~@a`g32|xF7 zUX=l8HAPapiH7>2UmEl>Sg}?S;7o{_NRIr|3^WLB^SPgwvV0Db%rVS}?q8_r3q+ch zK2GlQceyv4f(0V9PT;-?>;(r>y{h>s`3e8x+#SHy?&v6?sQmmoxtnsCr(b8&>z>0i zD16L*wmajc(B4S`nSGC8qr8Ku+%7Qq4Hr1>_ccr0)!^CmW7mj&4XY-*k6s$ZQMtDJ zkq!`y(zL|0Z^j9VYb}Vw1L69yXwa|k1Jy)G^`+*yOaC_)s0EMq+R@8l+I_&I&f>3Z za>5%Dm|bZC0+T2U{3+7GFBV#a3GOaJ2HRaq_i_bKo1ZM(b@8urj~g=8q3%p+M3aot zxKRO^qAoW(qgtzT9pGmG3nEt)``%#dPoJUC zdM*89x@te%IBUhujOSQ@J9$)`k!t$?IKr+F2R+c*{}x++CJ!bte1D!zg#YgCKPQ3w zz?s*^*AaZ1U*xazmWWX+4ClptK2xag3OEVy^wIVN`JY%cNM*Nj;44x+sO8(|N33ec zJNvlf6I(b?`gm~T?FXZbU5z7PGOFH+fdJ;3%&}i*6w_)yiHg7Fo$PrPiY# z!%$fdruNExOqayOKWv5gjgW3{5!wi$+3ln2pGfL3H=xWGV~MzSAmIS~b>n_9FUU2Z z98^}t{+kj-uVe3@#J_TVfi4gJ*@xV8a4c`s1bh)K-&=z%Jh6n*3|1b@RN0AdS3tf` zzPmu>JJ>eNKLzmV;Z7O-=<0B;($mdV1%2A~RAxJ0;6tq8343F8XYr!O6* z_^k_n+c$tfU7*z(*J1th2WUg<1l(Flk>gWr~SuU}vODzKWufa$Z0Z`w2yYeb{r)#pg{ebl#r z>3wgwu8m9eb}2>^eq+Zen(27MPn*&l>+v7T84$%Qb4k zn3@zHE-#`%049eGn%E`}u{E-zcmRcx2g>|Il^qaj2lIdBPOGOVq|#*_du-1@`J5b za|TlVkLdaJ@e|geIaPf*eDO-oA?cZnWeZqW zFaa~&M2t2VF)-_BfHw;5-!vdSpW&*T4@9in7a+?461|1f*CW--#kB$x)VnT;0)LzNu*_#bt(!7}^<>vjHxKV+}E?^dhESgA%Tg%JnEbg%vjnTRIXw-yO!~VDx@PA~B#u8$fUN zJ*J{)9vsE8R~Kt*P@TOEf3|cZgVlAkH3zqcOG(^8J6~kKVyKEXYE%WsbNrqir3%MY zeh+*{uFTso+Xf(bzfo0wENM7y^bO{_7#ILM7n06N%QlEJ0*6c51*&1qgE+e`LBFCA zk@YRyClBY$Ye7iP=G)M|u`3Dlhck-&YaDzbud%Vf#-f$Jz3b#K{}pwN;C0_|YWuHP zu4q_ib#Ad=p5U*~dNBh*)n8T#yySCy@dc?4wsaN_32s5HHb`m*`DIjeA!y&eRn>eY z9stiY2B00-ZTjAQi_+{n$IgFrZ{#~|FsLgTE7EvG^2x@7X9S2F2G&nXjyyv#cgTLv zH9?@2a;n{($Z0Wv-rYA|7_OTkhM)Yh8 z%0D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 literal 0 HcmV?d00001 diff --git a/apps/remix-ide/assets/img/workshopLogo.webp b/apps/remix-ide/assets/img/workshopLogo.webp new file mode 100644 index 0000000000000000000000000000000000000000..6717a42740b39ef9573e2ade15138740b59974f2 GIT binary patch literal 3782 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\|\||[!&|+\-*\/%~^<>=]=?/ + }, { + token : "punctuation.operator", + regex : /[?:;]/ + }, { + token : "punctuation.operator", // keep "." and "," separate for easier cloning and modifying into "function_arguments" + regex : /[.,]/, + inheritingStateRuleId : "punctuation" + }, { + token : "paren.lparen", + regex : /[\[{]/ + }, { + token : "paren.lparen", // keep "(" separate for easier cloning and modifying into "function_arguments" + regex : /[(]/, + inheritingStateRuleId : "lparen" + }, { + token : "paren.rparen", + regex : /[\]}]/ + }, { + token : "paren.rparen", // keep ")" separate for easier cloning and modifying into "function_arguments" + regex : /[)]/, + inheritingStateRuleId : "rparen" + } + ], + "comment" : [ + commentWipMarkerRule("block"), + { + token : "comment.block", + regex : "\\*\\/", + next : "pop" + }, { + defaultToken : "comment.block", + caseInsensitive : true + } + ], + "line_comment" : [ + commentWipMarkerRule("line"), + { + token : "comment.line.double-slash", + regex : "$|^", + next : "pop" + }, { + defaultToken : "comment.line.double-slash", + caseInsensitive : true + } + ], + "doc_comment" : [ + commentWipMarkerRule("block"), + natSpecRule("block"), + { + token : "comment.block.doc.documentation", // closing comment + regex : "\\*\\/", + next : "pop" + }, { + defaultToken : "comment.block.doc.documentation", + caseInsensitive : true + } + ], + "doc_line_comment" : [ + commentWipMarkerRule("line"), + natSpecRule("line"), + { + token : "comment.line.triple-slash.double-slash.doc.documentation", + regex : "$|^", + next : "pop" + }, { + defaultToken : "comment.line.triple-slash.double-slash.doc.documentation", + caseInsensitive : true + } + ], + "qqstring" : [ + { + token : "constant.language.escape", + regex : escapedRe + }, { + token : "string.quoted.double", // Multi-line string by ending line with back-slash, i.e. escaping \n. + regex : "\\\\$", + next : "qqstring" + }, { + token : "string.quoted.double", + regex : '"|$', + next : "pop" + }, { + defaultToken : "string.quoted.double" + } + ], + "qstring" : [ + { + token : "constant.language.escape", + regex : escapedRe + }, { + token : "string.quoted.single", // Multi-line string by ending line with back-slash, i.e. escaping \n. + regex : "\\\\$", + next : "qstring" + }, { + token : "string.quoted.single", + regex : "'|$", + next : "pop" + }, { + defaultToken : "string.quoted.single" + } + ] + }; + var functionArgumentsRules = deepCopy(this.$rules["start"]); + functionArgumentsRules.forEach(function(rule, ruleIndex) { + if (rule.inheritingStateRuleId) { + switch (rule.inheritingStateRuleId) { + case "keywordMapper": + rule.token = functionArgumentsKeywordMapper; + break; + case "punctuation": + rule.onMatch = function onFunctionArgumentsPunctuationMatch(value, currentState, stack) { + hasSeenFirstFunctionArgumentKeyword = false; + return rule.token; + }; + break; + case "lparen": + rule.next = pushFunctionArgumentsState; + break; + case "rparen": + rule.next = "pop"; + break; + case "fixedNumberType": + rule.onMatch = function onFunctionArgumentsFixedNumberTypeMatch(value, currentState, stack) { + hasSeenFirstFunctionArgumentKeyword = true; + return rule.token; + }; + break; + } + delete rule.inheritingStateRuleId; + delete this.$rules["start"][ruleIndex].inheritingStateRuleId; // TODO Keep id if there will be more "child" states. + functionArgumentsRules[ruleIndex] = rule; + } + }, this); + this.$rules["function_arguments"] = functionArgumentsRules; + + this.normalizeRules(); +}; + +oop.inherits(SolidityHighlightRules, TextHighlightRules); + +exports.SolidityHighlightRules = SolidityHighlightRules; +}); + +ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(acequire, exports, module) { +"use strict"; + +var Range = acequire("../range").Range; + +var MatchingBraceOutdent = function() {}; + +(function() { + + this.checkOutdent = function(line, input) { + if (! /^\s+$/.test(line)) + return false; + + return /^\s*\}/.test(input); + }; + + this.autoOutdent = function(doc, row) { + var line = doc.getLine(row); + var match = line.match(/^(\s*\})/); + + if (!match) return 0; + + var column = match[1].length; + var openBracePos = doc.findMatchingBracket({row: row, column: column}); + + if (!openBracePos || openBracePos.row == row) return 0; + + var indent = this.$getIndent(doc.getLine(openBracePos.row)); + doc.replace(new Range(row, 0, row, column-1), indent); + }; + + this.$getIndent = function(line) { + return line.match(/^\s*/)[0]; + }; + +}).call(MatchingBraceOutdent.prototype); + +exports.MatchingBraceOutdent = MatchingBraceOutdent; +}); + +ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("../../lib/oop"); +var Behaviour = acequire("../behaviour").Behaviour; +var TokenIterator = acequire("../../token_iterator").TokenIterator; +var lang = acequire("../../lib/lang"); + +var SAFE_INSERT_IN_TOKENS = + ["text", "paren.rparen", "punctuation.operator"]; +var SAFE_INSERT_BEFORE_TOKENS = + ["text", "paren.rparen", "punctuation.operator", "comment"]; + +var context; +var contextCache = {}; +var initContext = function(editor) { + var id = -1; + if (editor.multiSelect) { + id = editor.selection.index; + if (contextCache.rangeCount != editor.multiSelect.rangeCount) + contextCache = {rangeCount: editor.multiSelect.rangeCount}; + } + if (contextCache[id]) + return context = contextCache[id]; + context = contextCache[id] = { + autoInsertedBrackets: 0, + autoInsertedRow: -1, + autoInsertedLineEnd: "", + maybeInsertedBrackets: 0, + maybeInsertedRow: -1, + maybeInsertedLineStart: "", + maybeInsertedLineEnd: "" + }; +}; + +var CstyleBehaviour = function() { + this.add("braces", "insertion", function(state, action, editor, session, text) { + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + if (text == '{') { + initContext(editor); + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { + return { + text: '{' + selected + '}', + selection: false + }; + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { + if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { + CstyleBehaviour.recordAutoInsert(editor, session, "}"); + return { + text: '{}', + selection: [1, 1] + }; + } else { + CstyleBehaviour.recordMaybeInsert(editor, session, "{"); + return { + text: '{', + selection: [1, 1] + }; + } + } + } else if (text == '}') { + initContext(editor); + var rightChar = line.substring(cursor.column, cursor.column + 1); + if (rightChar == '}') { + var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { + CstyleBehaviour.popAutoInsertedClosing(); + return { + text: '', + selection: [1, 1] + }; + } + } + } else if (text == "\n" || text == "\r\n") { + initContext(editor); + var closing = ""; + if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { + closing = lang.stringRepeat("}", context.maybeInsertedBrackets); + CstyleBehaviour.clearMaybeInsertedClosing(); + } + var rightChar = line.substring(cursor.column, cursor.column + 1); + if (rightChar === '}') { + var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); + if (!openBracePos) + return null; + var next_indent = this.$getIndent(session.getLine(openBracePos.row)); + } else if (closing) { + var next_indent = this.$getIndent(line); + } else { + CstyleBehaviour.clearMaybeInsertedClosing(); + return; + } + var indent = next_indent + session.getTabString(); + + return { + text: '\n' + indent + '\n' + next_indent + closing, + selection: [1, indent.length, 1, indent.length] + }; + } else { + CstyleBehaviour.clearMaybeInsertedClosing(); + } + }); + + this.add("braces", "deletion", function(state, action, editor, session, range) { + var selected = session.doc.getTextRange(range); + if (!range.isMultiLine() && selected == '{') { + initContext(editor); + var line = session.doc.getLine(range.start.row); + var rightChar = line.substring(range.end.column, range.end.column + 1); + if (rightChar == '}') { + range.end.column++; + return range; + } else { + context.maybeInsertedBrackets--; + } + } + }); + + this.add("parens", "insertion", function(state, action, editor, session, text) { + if (text == '(') { + initContext(editor); + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "" && editor.getWrapBehavioursEnabled()) { + return { + text: '(' + selected + ')', + selection: false + }; + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { + CstyleBehaviour.recordAutoInsert(editor, session, ")"); + return { + text: '()', + selection: [1, 1] + }; + } + } else if (text == ')') { + initContext(editor); + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + var rightChar = line.substring(cursor.column, cursor.column + 1); + if (rightChar == ')') { + var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { + CstyleBehaviour.popAutoInsertedClosing(); + return { + text: '', + selection: [1, 1] + }; + } + } + } + }); + + this.add("parens", "deletion", function(state, action, editor, session, range) { + var selected = session.doc.getTextRange(range); + if (!range.isMultiLine() && selected == '(') { + initContext(editor); + var line = session.doc.getLine(range.start.row); + var rightChar = line.substring(range.start.column + 1, range.start.column + 2); + if (rightChar == ')') { + range.end.column++; + return range; + } + } + }); + + this.add("brackets", "insertion", function(state, action, editor, session, text) { + if (text == '[') { + initContext(editor); + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "" && editor.getWrapBehavioursEnabled()) { + return { + text: '[' + selected + ']', + selection: false + }; + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { + CstyleBehaviour.recordAutoInsert(editor, session, "]"); + return { + text: '[]', + selection: [1, 1] + }; + } + } else if (text == ']') { + initContext(editor); + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + var rightChar = line.substring(cursor.column, cursor.column + 1); + if (rightChar == ']') { + var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { + CstyleBehaviour.popAutoInsertedClosing(); + return { + text: '', + selection: [1, 1] + }; + } + } + } + }); + + this.add("brackets", "deletion", function(state, action, editor, session, range) { + var selected = session.doc.getTextRange(range); + if (!range.isMultiLine() && selected == '[') { + initContext(editor); + var line = session.doc.getLine(range.start.row); + var rightChar = line.substring(range.start.column + 1, range.start.column + 2); + if (rightChar == ']') { + range.end.column++; + return range; + } + } + }); + + this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { + if (text == '"' || text == "'") { + initContext(editor); + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { + return { + text: quote + selected + quote, + selection: false + }; + } else { + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + var leftChar = line.substring(cursor.column-1, cursor.column); + if (leftChar == '\\') { + return null; + } + var tokens = session.getTokens(selection.start.row); + var col = 0, token; + var quotepos = -1; // Track whether we're inside an open quote. + + for (var x = 0; x < tokens.length; x++) { + token = tokens[x]; + if (token.type == "string") { + quotepos = -1; + } else if (quotepos < 0) { + quotepos = token.value.indexOf(quote); + } + if ((token.value.length + col) > selection.start.column) { + break; + } + col += tokens[x].value.length; + } + if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) { + if (!CstyleBehaviour.isSaneInsertion(editor, session)) + return; + return { + text: quote + quote, + selection: [1,1] + }; + } else if (token && token.type === "string") { + var rightChar = line.substring(cursor.column, cursor.column + 1); + if (rightChar == quote) { + return { + text: '', + selection: [1, 1] + }; + } + } + } + } + }); + + this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { + var selected = session.doc.getTextRange(range); + if (!range.isMultiLine() && (selected == '"' || selected == "'")) { + initContext(editor); + var line = session.doc.getLine(range.start.row); + var rightChar = line.substring(range.start.column + 1, range.start.column + 2); + if (rightChar == selected) { + range.end.column++; + return range; + } + } + }); + +}; + + +CstyleBehaviour.isSaneInsertion = function(editor, session) { + var cursor = editor.getCursorPosition(); + var iterator = new TokenIterator(session, cursor.row, cursor.column); + if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { + var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); + if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) + return false; + } + iterator.stepForward(); + return iterator.getCurrentTokenRow() !== cursor.row || + this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); +}; + +CstyleBehaviour.$matchTokenType = function(token, types) { + return types.indexOf(token.type || token) > -1; +}; + +CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) + context.autoInsertedBrackets = 0; + context.autoInsertedRow = cursor.row; + context.autoInsertedLineEnd = bracket + line.substr(cursor.column); + context.autoInsertedBrackets++; +}; + +CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + if (!this.isMaybeInsertedClosing(cursor, line)) + context.maybeInsertedBrackets = 0; + context.maybeInsertedRow = cursor.row; + context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; + context.maybeInsertedLineEnd = line.substr(cursor.column); + context.maybeInsertedBrackets++; +}; + +CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { + return context.autoInsertedBrackets > 0 && + cursor.row === context.autoInsertedRow && + bracket === context.autoInsertedLineEnd[0] && + line.substr(cursor.column) === context.autoInsertedLineEnd; +}; + +CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { + return context.maybeInsertedBrackets > 0 && + cursor.row === context.maybeInsertedRow && + line.substr(cursor.column) === context.maybeInsertedLineEnd && + line.substr(0, cursor.column) == context.maybeInsertedLineStart; +}; + +CstyleBehaviour.popAutoInsertedClosing = function() { + context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); + context.autoInsertedBrackets--; +}; + +CstyleBehaviour.clearMaybeInsertedClosing = function() { + if (context) { + context.maybeInsertedBrackets = 0; + context.maybeInsertedRow = -1; + } +}; + + + +oop.inherits(CstyleBehaviour, Behaviour); + +exports.CstyleBehaviour = CstyleBehaviour; +}); + +ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("../../lib/oop"); +var Range = acequire("../../range").Range; +var BaseFoldMode = acequire("./fold_mode").FoldMode; + +var FoldMode = exports.FoldMode = function(commentRegex) { + if (commentRegex) { + this.foldingStartMarker = new RegExp( + this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) + ); + this.foldingStopMarker = new RegExp( + this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) + ); + } +}; +oop.inherits(FoldMode, BaseFoldMode); + +(function() { + + this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; + this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; + + this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { + var line = session.getLine(row); + var match = line.match(this.foldingStartMarker); + if (match) { + var i = match.index; + + if (match[1]) + return this.openingBracketBlock(session, match[1], row, i); + + var range = session.getCommentFoldRange(row, i + match[0].length, 1); + + if (range && !range.isMultiLine()) { + if (forceMultiline) { + range = this.getSectionRange(session, row); + } else if (foldStyle != "all") + range = null; + } + + return range; + } + + if (foldStyle === "markbegin") + return; + + var match = line.match(this.foldingStopMarker); + if (match) { + var i = match.index + match[0].length; + + if (match[1]) + return this.closingBracketBlock(session, match[1], row, i); + + return session.getCommentFoldRange(row, i, -1); + } + }; + + this.getSectionRange = function(session, row) { + var line = session.getLine(row); + var startIndent = line.search(/\S/); + var startRow = row; + var startColumn = line.length; + row = row + 1; + var endRow = row; + var maxRow = session.getLength(); + while (++row < maxRow) { + line = session.getLine(row); + var indent = line.search(/\S/); + if (indent === -1) + continue; + if (startIndent > indent) + break; + var subRange = this.getFoldWidgetRange(session, "all", row); + + if (subRange) { + if (subRange.start.row <= startRow) { + break; + } else if (subRange.isMultiLine()) { + row = subRange.end.row; + } else if (startIndent == indent) { + break; + } + } + endRow = row; + } + + return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); + }; + +}).call(FoldMode.prototype); + +}); + +ace.define("ace/mode/solidity",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/solidity_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("../lib/oop"); +var TextMode = acequire("./text").Mode; +var SolidityHighlightRules = acequire("./solidity_highlight_rules").SolidityHighlightRules; +var MatchingBraceOutdent = acequire("./matching_brace_outdent").MatchingBraceOutdent; +var Range = acequire("../range").Range; +var WorkerClient = acequire("../worker/worker_client").WorkerClient; +var CstyleBehaviour = acequire("./behaviour/cstyle").CstyleBehaviour; +var CStyleFoldMode = acequire("./folding/cstyle").FoldMode; + +var Mode = function() { + this.HighlightRules = SolidityHighlightRules; + + this.$outdent = new MatchingBraceOutdent(); + this.$behaviour = new CstyleBehaviour(); + this.foldingRules = new CStyleFoldMode(); +}; +oop.inherits(Mode, TextMode); + +(function() { + + this.lineCommentStart = "//"; + this.blockComment = {start: "/*", end: "*/"}; + + this.getNextLineIndent = function(state, line, tab) { + var indent = this.$getIndent(line); + + var tokenizedLine = this.getTokenizer().getLineTokens(line, state); + var tokens = tokenizedLine.tokens; + var endState = tokenizedLine.state; + + if (tokens.length && tokens[tokens.length-1].type == "comment") { + return indent; + } + + if (state == "start") { + var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); + if (match) { + indent += tab; + } + } else if (state == "doc_comment") { + if (endState == "start") { + return ""; + } + var match = line.match(/^\s*(\/?)\*/); + if (match) { + if (match[1]) { + indent += " "; + } + indent += "* "; + } + } + + return indent; + }; + + this.checkOutdent = function(state, line, input) { + return this.$outdent.checkOutdent(line, input); + }; + + this.autoOutdent = function(state, doc, row) { + this.$outdent.autoOutdent(doc, row); + }; + + this.$id = "ace/mode/solidity"; +}).call(Mode.prototype); + +exports.Mode = Mode; +}); + +},{}],7:[function(require,module,exports){ +"use strict"; + +(function(root) { + + function checkInt(value) { + return (parseInt(value) === value); + } + + function checkInts(arrayish) { + if (!checkInt(arrayish.length)) { return false; } + + for (var i = 0; i < arrayish.length; i++) { + if (!checkInt(arrayish[i]) || arrayish[i] < 0 || arrayish[i] > 255) { + return false; + } + } + + return true; + } + + function coerceArray(arg, copy) { + + // ArrayBuffer view + if (arg.buffer && ArrayBuffer.isView(arg) && arg.name === 'Uint8Array') { + + if (copy) { + if (arg.slice) { + arg = arg.slice(); + } else { + arg = Array.prototype.slice.call(arg); + } + } + + return arg; + } + + // It's an array; check it is a valid representation of a byte + if (Array.isArray(arg)) { + if (!checkInts(arg)) { + throw new Error('Array contains invalid value: ' + arg); + } + + return new Uint8Array(arg); + } + + // Something else, but behaves like an array (maybe a Buffer? Arguments?) + if (checkInt(arg.length) && checkInts(arg)) { + return new Uint8Array(arg); + } + + throw new Error('unsupported array-like object'); + } + + function createArray(length) { + return new Uint8Array(length); + } + + function copyArray(sourceArray, targetArray, targetStart, sourceStart, sourceEnd) { + if (sourceStart != null || sourceEnd != null) { + if (sourceArray.slice) { + sourceArray = sourceArray.slice(sourceStart, sourceEnd); + } else { + sourceArray = Array.prototype.slice.call(sourceArray, sourceStart, sourceEnd); + } + } + targetArray.set(sourceArray, targetStart); + } + + + + var convertUtf8 = (function() { + function toBytes(text) { + var result = [], i = 0; + text = encodeURI(text); + while (i < text.length) { + var c = text.charCodeAt(i++); + + // if it is a % sign, encode the following 2 bytes as a hex value + if (c === 37) { + result.push(parseInt(text.substr(i, 2), 16)) + i += 2; + + // otherwise, just the actual byte + } else { + result.push(c) + } + } + + return coerceArray(result); + } + + function fromBytes(bytes) { + var result = [], i = 0; + + while (i < bytes.length) { + var c = bytes[i]; + + if (c < 128) { + result.push(String.fromCharCode(c)); + i++; + } else if (c > 191 && c < 224) { + result.push(String.fromCharCode(((c & 0x1f) << 6) | (bytes[i + 1] & 0x3f))); + i += 2; + } else { + result.push(String.fromCharCode(((c & 0x0f) << 12) | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f))); + i += 3; + } + } + + return result.join(''); + } + + return { + toBytes: toBytes, + fromBytes: fromBytes, + } + })(); + + var convertHex = (function() { + function toBytes(text) { + var result = []; + for (var i = 0; i < text.length; i += 2) { + result.push(parseInt(text.substr(i, 2), 16)); + } + + return result; + } + + // http://ixti.net/development/javascript/2011/11/11/base64-encodedecode-of-utf8-in-browser-with-js.html + var Hex = '0123456789abcdef'; + + function fromBytes(bytes) { + var result = []; + for (var i = 0; i < bytes.length; i++) { + var v = bytes[i]; + result.push(Hex[(v & 0xf0) >> 4] + Hex[v & 0x0f]); + } + return result.join(''); + } + + return { + toBytes: toBytes, + fromBytes: fromBytes, + } + })(); + + + // Number of rounds by keysize + var numberOfRounds = {16: 10, 24: 12, 32: 14} + + // Round constant words + var rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91]; + + // S-box and Inverse S-box (S is for Substitution) + var S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]; + var Si =[0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]; + + // Transformations for encryption + var T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a]; + var T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616]; + var T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16]; + var T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c]; + + // Transformations for decryption + var T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742]; + var T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857]; + var T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8]; + var T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0]; + + // Transformations for decryption key expansion + var U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]; + var U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697]; + var U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46]; + var U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d]; + + function convertToInt32(bytes) { + var result = []; + for (var i = 0; i < bytes.length; i += 4) { + result.push( + (bytes[i ] << 24) | + (bytes[i + 1] << 16) | + (bytes[i + 2] << 8) | + bytes[i + 3] + ); + } + return result; + } + + var AES = function(key) { + if (!(this instanceof AES)) { + throw Error('AES must be instanitated with `new`'); + } + + Object.defineProperty(this, 'key', { + value: coerceArray(key, true) + }); + + this._prepare(); + } + + + AES.prototype._prepare = function() { + + var rounds = numberOfRounds[this.key.length]; + if (rounds == null) { + throw new Error('invalid key size (must be 16, 24 or 32 bytes)'); + } + + // encryption round keys + this._Ke = []; + + // decryption round keys + this._Kd = []; + + for (var i = 0; i <= rounds; i++) { + this._Ke.push([0, 0, 0, 0]); + this._Kd.push([0, 0, 0, 0]); + } + + var roundKeyCount = (rounds + 1) * 4; + var KC = this.key.length / 4; + + // convert the key into ints + var tk = convertToInt32(this.key); + + // copy values into round key arrays + var index; + for (var i = 0; i < KC; i++) { + index = i >> 2; + this._Ke[index][i % 4] = tk[i]; + this._Kd[rounds - index][i % 4] = tk[i]; + } + + // key expansion (fips-197 section 5.2) + var rconpointer = 0; + var t = KC, tt; + while (t < roundKeyCount) { + tt = tk[KC - 1]; + tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^ + (S[(tt >> 8) & 0xFF] << 16) ^ + (S[ tt & 0xFF] << 8) ^ + S[(tt >> 24) & 0xFF] ^ + (rcon[rconpointer] << 24)); + rconpointer += 1; + + // key expansion (for non-256 bit) + if (KC != 8) { + for (var i = 1; i < KC; i++) { + tk[i] ^= tk[i - 1]; + } + + // key expansion for 256-bit keys is "slightly different" (fips-197) + } else { + for (var i = 1; i < (KC / 2); i++) { + tk[i] ^= tk[i - 1]; + } + tt = tk[(KC / 2) - 1]; + + tk[KC / 2] ^= (S[ tt & 0xFF] ^ + (S[(tt >> 8) & 0xFF] << 8) ^ + (S[(tt >> 16) & 0xFF] << 16) ^ + (S[(tt >> 24) & 0xFF] << 24)); + + for (var i = (KC / 2) + 1; i < KC; i++) { + tk[i] ^= tk[i - 1]; + } + } + + // copy values into round key arrays + var i = 0, r, c; + while (i < KC && t < roundKeyCount) { + r = t >> 2; + c = t % 4; + this._Ke[r][c] = tk[i]; + this._Kd[rounds - r][c] = tk[i++]; + t++; + } + } + + // inverse-cipher-ify the decryption round key (fips-197 section 5.3) + for (var r = 1; r < rounds; r++) { + for (var c = 0; c < 4; c++) { + tt = this._Kd[r][c]; + this._Kd[r][c] = (U1[(tt >> 24) & 0xFF] ^ + U2[(tt >> 16) & 0xFF] ^ + U3[(tt >> 8) & 0xFF] ^ + U4[ tt & 0xFF]); + } + } + } + + AES.prototype.encrypt = function(plaintext) { + if (plaintext.length != 16) { + throw new Error('invalid plaintext size (must be 16 bytes)'); + } + + var rounds = this._Ke.length - 1; + var a = [0, 0, 0, 0]; + + // convert plaintext to (ints ^ key) + var t = convertToInt32(plaintext); + for (var i = 0; i < 4; i++) { + t[i] ^= this._Ke[0][i]; + } + + // apply round transforms + for (var r = 1; r < rounds; r++) { + for (var i = 0; i < 4; i++) { + a[i] = (T1[(t[ i ] >> 24) & 0xff] ^ + T2[(t[(i + 1) % 4] >> 16) & 0xff] ^ + T3[(t[(i + 2) % 4] >> 8) & 0xff] ^ + T4[ t[(i + 3) % 4] & 0xff] ^ + this._Ke[r][i]); + } + t = a.slice(); + } + + // the last round is special + var result = createArray(16), tt; + for (var i = 0; i < 4; i++) { + tt = this._Ke[rounds][i]; + result[4 * i ] = (S[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff; + result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff; + result[4 * i + 2] = (S[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff; + result[4 * i + 3] = (S[ t[(i + 3) % 4] & 0xff] ^ tt ) & 0xff; + } + + return result; + } + + AES.prototype.decrypt = function(ciphertext) { + if (ciphertext.length != 16) { + throw new Error('invalid ciphertext size (must be 16 bytes)'); + } + + var rounds = this._Kd.length - 1; + var a = [0, 0, 0, 0]; + + // convert plaintext to (ints ^ key) + var t = convertToInt32(ciphertext); + for (var i = 0; i < 4; i++) { + t[i] ^= this._Kd[0][i]; + } + + // apply round transforms + for (var r = 1; r < rounds; r++) { + for (var i = 0; i < 4; i++) { + a[i] = (T5[(t[ i ] >> 24) & 0xff] ^ + T6[(t[(i + 3) % 4] >> 16) & 0xff] ^ + T7[(t[(i + 2) % 4] >> 8) & 0xff] ^ + T8[ t[(i + 1) % 4] & 0xff] ^ + this._Kd[r][i]); + } + t = a.slice(); + } + + // the last round is special + var result = createArray(16), tt; + for (var i = 0; i < 4; i++) { + tt = this._Kd[rounds][i]; + result[4 * i ] = (Si[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff; + result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff; + result[4 * i + 2] = (Si[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff; + result[4 * i + 3] = (Si[ t[(i + 1) % 4] & 0xff] ^ tt ) & 0xff; + } + + return result; + } + + + /** + * Mode Of Operation - Electonic Codebook (ECB) + */ + var ModeOfOperationECB = function(key) { + if (!(this instanceof ModeOfOperationECB)) { + throw Error('AES must be instanitated with `new`'); + } + + this.description = "Electronic Code Block"; + this.name = "ecb"; + + this._aes = new AES(key); + } + + ModeOfOperationECB.prototype.encrypt = function(plaintext) { + plaintext = coerceArray(plaintext); + + if ((plaintext.length % 16) !== 0) { + throw new Error('invalid plaintext size (must be multiple of 16 bytes)'); + } + + var ciphertext = createArray(plaintext.length); + var block = createArray(16); + + for (var i = 0; i < plaintext.length; i += 16) { + copyArray(plaintext, block, 0, i, i + 16); + block = this._aes.encrypt(block); + copyArray(block, ciphertext, i); + } + + return ciphertext; + } + + ModeOfOperationECB.prototype.decrypt = function(ciphertext) { + ciphertext = coerceArray(ciphertext); + + if ((ciphertext.length % 16) !== 0) { + throw new Error('invalid ciphertext size (must be multiple of 16 bytes)'); + } + + var plaintext = createArray(ciphertext.length); + var block = createArray(16); + + for (var i = 0; i < ciphertext.length; i += 16) { + copyArray(ciphertext, block, 0, i, i + 16); + block = this._aes.decrypt(block); + copyArray(block, plaintext, i); + } + + return plaintext; + } + + + /** + * Mode Of Operation - Cipher Block Chaining (CBC) + */ + var ModeOfOperationCBC = function(key, iv) { + if (!(this instanceof ModeOfOperationCBC)) { + throw Error('AES must be instanitated with `new`'); + } + + this.description = "Cipher Block Chaining"; + this.name = "cbc"; + + if (!iv) { + iv = createArray(16); + + } else if (iv.length != 16) { + throw new Error('invalid initialation vector size (must be 16 bytes)'); + } + + this._lastCipherblock = coerceArray(iv, true); + + this._aes = new AES(key); + } + + ModeOfOperationCBC.prototype.encrypt = function(plaintext) { + plaintext = coerceArray(plaintext); + + if ((plaintext.length % 16) !== 0) { + throw new Error('invalid plaintext size (must be multiple of 16 bytes)'); + } + + var ciphertext = createArray(plaintext.length); + var block = createArray(16); + + for (var i = 0; i < plaintext.length; i += 16) { + copyArray(plaintext, block, 0, i, i + 16); + + for (var j = 0; j < 16; j++) { + block[j] ^= this._lastCipherblock[j]; + } + + this._lastCipherblock = this._aes.encrypt(block); + copyArray(this._lastCipherblock, ciphertext, i); + } + + return ciphertext; + } + + ModeOfOperationCBC.prototype.decrypt = function(ciphertext) { + ciphertext = coerceArray(ciphertext); + + if ((ciphertext.length % 16) !== 0) { + throw new Error('invalid ciphertext size (must be multiple of 16 bytes)'); + } + + var plaintext = createArray(ciphertext.length); + var block = createArray(16); + + for (var i = 0; i < ciphertext.length; i += 16) { + copyArray(ciphertext, block, 0, i, i + 16); + block = this._aes.decrypt(block); + + for (var j = 0; j < 16; j++) { + plaintext[i + j] = block[j] ^ this._lastCipherblock[j]; + } + + copyArray(ciphertext, this._lastCipherblock, 0, i, i + 16); + } + + return plaintext; + } + + + /** + * Mode Of Operation - Cipher Feedback (CFB) + */ + var ModeOfOperationCFB = function(key, iv, segmentSize) { + if (!(this instanceof ModeOfOperationCFB)) { + throw Error('AES must be instanitated with `new`'); + } + + this.description = "Cipher Feedback"; + this.name = "cfb"; + + if (!iv) { + iv = createArray(16); + + } else if (iv.length != 16) { + throw new Error('invalid initialation vector size (must be 16 size)'); + } + + if (!segmentSize) { segmentSize = 1; } + + this.segmentSize = segmentSize; + + this._shiftRegister = coerceArray(iv, true); + + this._aes = new AES(key); + } + + ModeOfOperationCFB.prototype.encrypt = function(plaintext) { + if ((plaintext.length % this.segmentSize) != 0) { + throw new Error('invalid plaintext size (must be segmentSize bytes)'); + } + + var encrypted = coerceArray(plaintext, true); + + var xorSegment; + for (var i = 0; i < encrypted.length; i += this.segmentSize) { + xorSegment = this._aes.encrypt(this._shiftRegister); + for (var j = 0; j < this.segmentSize; j++) { + encrypted[i + j] ^= xorSegment[j]; + } + + // Shift the register + copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize); + copyArray(encrypted, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize); + } + + return encrypted; + } + + ModeOfOperationCFB.prototype.decrypt = function(ciphertext) { + if ((ciphertext.length % this.segmentSize) != 0) { + throw new Error('invalid ciphertext size (must be segmentSize bytes)'); + } + + var plaintext = coerceArray(ciphertext, true); + + var xorSegment; + for (var i = 0; i < plaintext.length; i += this.segmentSize) { + xorSegment = this._aes.encrypt(this._shiftRegister); + + for (var j = 0; j < this.segmentSize; j++) { + plaintext[i + j] ^= xorSegment[j]; + } + + // Shift the register + copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize); + copyArray(ciphertext, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize); + } + + return plaintext; + } + + /** + * Mode Of Operation - Output Feedback (OFB) + */ + var ModeOfOperationOFB = function(key, iv) { + if (!(this instanceof ModeOfOperationOFB)) { + throw Error('AES must be instanitated with `new`'); + } + + this.description = "Output Feedback"; + this.name = "ofb"; + + if (!iv) { + iv = createArray(16); + + } else if (iv.length != 16) { + throw new Error('invalid initialation vector size (must be 16 bytes)'); + } + + this._lastPrecipher = coerceArray(iv, true); + this._lastPrecipherIndex = 16; + + this._aes = new AES(key); + } + + ModeOfOperationOFB.prototype.encrypt = function(plaintext) { + var encrypted = coerceArray(plaintext, true); + + for (var i = 0; i < encrypted.length; i++) { + if (this._lastPrecipherIndex === 16) { + this._lastPrecipher = this._aes.encrypt(this._lastPrecipher); + this._lastPrecipherIndex = 0; + } + encrypted[i] ^= this._lastPrecipher[this._lastPrecipherIndex++]; + } + + return encrypted; + } + + // Decryption is symetric + ModeOfOperationOFB.prototype.decrypt = ModeOfOperationOFB.prototype.encrypt; + + + /** + * Counter object for CTR common mode of operation + */ + var Counter = function(initialValue) { + if (!(this instanceof Counter)) { + throw Error('Counter must be instanitated with `new`'); + } + + // We allow 0, but anything false-ish uses the default 1 + if (initialValue !== 0 && !initialValue) { initialValue = 1; } + + if (typeof(initialValue) === 'number') { + this._counter = createArray(16); + this.setValue(initialValue); + + } else { + this.setBytes(initialValue); + } + } + + Counter.prototype.setValue = function(value) { + if (typeof(value) !== 'number' || parseInt(value) != value) { + throw new Error('invalid counter value (must be an integer)'); + } + + for (var index = 15; index >= 0; --index) { + this._counter[index] = value % 256; + value = value >> 8; + } + } + + Counter.prototype.setBytes = function(bytes) { + bytes = coerceArray(bytes, true); + + if (bytes.length != 16) { + throw new Error('invalid counter bytes size (must be 16 bytes)'); + } + + this._counter = bytes; + }; + + Counter.prototype.increment = function() { + for (var i = 15; i >= 0; i--) { + if (this._counter[i] === 255) { + this._counter[i] = 0; + } else { + this._counter[i]++; + break; + } + } + } + + + /** + * Mode Of Operation - Counter (CTR) + */ + var ModeOfOperationCTR = function(key, counter) { + if (!(this instanceof ModeOfOperationCTR)) { + throw Error('AES must be instanitated with `new`'); + } + + this.description = "Counter"; + this.name = "ctr"; + + if (!(counter instanceof Counter)) { + counter = new Counter(counter) + } + + this._counter = counter; + + this._remainingCounter = null; + this._remainingCounterIndex = 16; + + this._aes = new AES(key); + } + + ModeOfOperationCTR.prototype.encrypt = function(plaintext) { + var encrypted = coerceArray(plaintext, true); + + for (var i = 0; i < encrypted.length; i++) { + if (this._remainingCounterIndex === 16) { + this._remainingCounter = this._aes.encrypt(this._counter._counter); + this._remainingCounterIndex = 0; + this._counter.increment(); + } + encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++]; + } + + return encrypted; + } + + // Decryption is symetric + ModeOfOperationCTR.prototype.decrypt = ModeOfOperationCTR.prototype.encrypt; + + + /////////////////////// + // Padding + + // See:https://tools.ietf.org/html/rfc2315 + function pkcs7pad(data) { + data = coerceArray(data, true); + var padder = 16 - (data.length % 16); + var result = createArray(data.length + padder); + copyArray(data, result); + for (var i = data.length; i < result.length; i++) { + result[i] = padder; + } + return result; + } + + function pkcs7strip(data) { + data = coerceArray(data, true); + if (data.length < 16) { throw new Error('PKCS#7 invalid length'); } + + var padder = data[data.length - 1]; + if (padder > 16) { throw new Error('PKCS#7 padding byte out of range'); } + + var length = data.length - padder; + for (var i = 0; i < padder; i++) { + if (data[length + i] !== padder) { + throw new Error('PKCS#7 invalid padding byte'); + } + } + + var result = createArray(length); + copyArray(data, result, 0, 0, length); + return result; + } + + /////////////////////// + // Exporting + + + // The block cipher + var aesjs = { + AES: AES, + Counter: Counter, + + ModeOfOperation: { + ecb: ModeOfOperationECB, + cbc: ModeOfOperationCBC, + cfb: ModeOfOperationCFB, + ofb: ModeOfOperationOFB, + ctr: ModeOfOperationCTR + }, + + utils: { + hex: convertHex, + utf8: convertUtf8 + }, + + padding: { + pkcs7: { + pad: pkcs7pad, + strip: pkcs7strip + } + }, + + _arrayTest: { + coerceArray: coerceArray, + createArray: createArray, + copyArray: copyArray, + } + }; + + + // node.js + if (typeof exports !== 'undefined') { + module.exports = aesjs + + // RequireJS/AMD + // http://www.requirejs.org/docs/api.html + // https://github.com/amdjs/amdjs-api/wiki/AMD + } else if (typeof(define) === 'function' && define.amd) { + define(aesjs); + + // Web Browsers + } else { + + // If there was an existing library at "aesjs" make sure it's still available + if (root.aesjs) { + aesjs._aesjs = root.aesjs; + } + + root.aesjs = aesjs; + } + + +})(this); + +},{}],8:[function(require,module,exports){ +/*! + * ansi-gray + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +var wrap = require('ansi-wrap'); + +module.exports = function gray(message) { + return wrap(90, 39, message); +}; + +},{"ansi-wrap":10}],9:[function(require,module,exports){ +'use strict'; +const colorConvert = require('color-convert'); + +const wrapAnsi16 = (fn, offset) => function () { + const code = fn.apply(colorConvert, arguments); + return `\u001B[${code + offset}m`; +}; + +const wrapAnsi256 = (fn, offset) => function () { + const code = fn.apply(colorConvert, arguments); + return `\u001B[${38 + offset};5;${code}m`; +}; + +const wrapAnsi16m = (fn, offset) => function () { + const rgb = fn.apply(colorConvert, arguments); + return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`; +}; + +function assembleStyles() { + const codes = new Map(); + const styles = { + modifier: { + reset: [0, 0], + // 21 isn't widely supported and 22 does the same thing + bold: [1, 22], + dim: [2, 22], + italic: [3, 23], + underline: [4, 24], + inverse: [7, 27], + hidden: [8, 28], + strikethrough: [9, 29] + }, + color: { + black: [30, 39], + red: [31, 39], + green: [32, 39], + yellow: [33, 39], + blue: [34, 39], + magenta: [35, 39], + cyan: [36, 39], + white: [37, 39], + gray: [90, 39], + + // Bright color + redBright: [91, 39], + greenBright: [92, 39], + yellowBright: [93, 39], + blueBright: [94, 39], + magentaBright: [95, 39], + cyanBright: [96, 39], + whiteBright: [97, 39] + }, + bgColor: { + bgBlack: [40, 49], + bgRed: [41, 49], + bgGreen: [42, 49], + bgYellow: [43, 49], + bgBlue: [44, 49], + bgMagenta: [45, 49], + bgCyan: [46, 49], + bgWhite: [47, 49], + + // Bright color + bgBlackBright: [100, 49], + bgRedBright: [101, 49], + bgGreenBright: [102, 49], + bgYellowBright: [103, 49], + bgBlueBright: [104, 49], + bgMagentaBright: [105, 49], + bgCyanBright: [106, 49], + bgWhiteBright: [107, 49] + } + }; + + // Fix humans + styles.color.grey = styles.color.gray; + + for (const groupName of Object.keys(styles)) { + const group = styles[groupName]; + + for (const styleName of Object.keys(group)) { + const style = group[styleName]; + + styles[styleName] = { + open: `\u001B[${style[0]}m`, + close: `\u001B[${style[1]}m` + }; + + group[styleName] = styles[styleName]; + + codes.set(style[0], style[1]); + } + + Object.defineProperty(styles, groupName, { + value: group, + enumerable: false + }); + + Object.defineProperty(styles, 'codes', { + value: codes, + enumerable: false + }); + } + + const ansi2ansi = n => n; + const rgb2rgb = (r, g, b) => [r, g, b]; + + styles.color.close = '\u001B[39m'; + styles.bgColor.close = '\u001B[49m'; + + styles.color.ansi = { + ansi: wrapAnsi16(ansi2ansi, 0) + }; + styles.color.ansi256 = { + ansi256: wrapAnsi256(ansi2ansi, 0) + }; + styles.color.ansi16m = { + rgb: wrapAnsi16m(rgb2rgb, 0) + }; + + styles.bgColor.ansi = { + ansi: wrapAnsi16(ansi2ansi, 10) + }; + styles.bgColor.ansi256 = { + ansi256: wrapAnsi256(ansi2ansi, 10) + }; + styles.bgColor.ansi16m = { + rgb: wrapAnsi16m(rgb2rgb, 10) + }; + + for (let key of Object.keys(colorConvert)) { + if (typeof colorConvert[key] !== 'object') { + continue; + } + + const suite = colorConvert[key]; + + if (key === 'ansi16') { + key = 'ansi'; + } + + if ('ansi16' in suite) { + styles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0); + styles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10); + } + + if ('ansi256' in suite) { + styles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0); + styles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10); + } + + if ('rgb' in suite) { + styles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0); + styles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10); + } + } + + return styles; +} + +// Make the export immutable +Object.defineProperty(module, 'exports', { + enumerable: true, + get: assembleStyles +}); + +},{"color-convert":123}],10:[function(require,module,exports){ +'use strict'; + +module.exports = function(a, b, msg) { + return '\u001b['+ a + 'm' + msg + '\u001b[' + b + 'm'; +}; + +},{}],11:[function(require,module,exports){ +module.exports = require('./register')().Promise + +},{"./register":13}],12:[function(require,module,exports){ +"use strict" + // global key for user preferred registration +var REGISTRATION_KEY = '@@any-promise/REGISTRATION', + // Prior registration (preferred or detected) + registered = null + +/** + * Registers the given implementation. An implementation must + * be registered prior to any call to `require("any-promise")`, + * typically on application load. + * + * If called with no arguments, will return registration in + * following priority: + * + * For Node.js: + * + * 1. Previous registration + * 2. global.Promise if node.js version >= 0.12 + * 3. Auto detected promise based on first sucessful require of + * known promise libraries. Note this is a last resort, as the + * loaded library is non-deterministic. node.js >= 0.12 will + * always use global.Promise over this priority list. + * 4. Throws error. + * + * For Browser: + * + * 1. Previous registration + * 2. window.Promise + * 3. Throws error. + * + * Options: + * + * Promise: Desired Promise constructor + * global: Boolean - Should the registration be cached in a global variable to + * allow cross dependency/bundle registration? (default true) + */ +module.exports = function(root, loadImplementation){ + return function register(implementation, opts){ + implementation = implementation || null + opts = opts || {} + // global registration unless explicitly {global: false} in options (default true) + var registerGlobal = opts.global !== false; + + // load any previous global registration + if(registered === null && registerGlobal){ + registered = root[REGISTRATION_KEY] || null + } + + if(registered !== null + && implementation !== null + && registered.implementation !== implementation){ + // Throw error if attempting to redefine implementation + throw new Error('any-promise already defined as "'+registered.implementation+ + '". You can only register an implementation before the first '+ + ' call to require("any-promise") and an implementation cannot be changed') + } + + if(registered === null){ + // use provided implementation + if(implementation !== null && typeof opts.Promise !== 'undefined'){ + registered = { + Promise: opts.Promise, + implementation: implementation + } + } else { + // require implementation if implementation is specified but not provided + registered = loadImplementation(implementation) + } + + if(registerGlobal){ + // register preference globally in case multiple installations + root[REGISTRATION_KEY] = registered + } + } + + return registered + } +} + +},{}],13:[function(require,module,exports){ +"use strict"; +module.exports = require('./loader')(window, loadImplementation) + +/** + * Browser specific loadImplementation. Always uses `window.Promise` + * + * To register a custom implementation, must register with `Promise` option. + */ +function loadImplementation(){ + if(typeof window.Promise === 'undefined'){ + throw new Error("any-promise browser requires a polyfill or explicit registration"+ + " e.g: require('any-promise/register/bluebird')") + } + return { + Promise: window.Promise, + implementation: 'window.Promise' + } +} + +},{"./loader":12}],14:[function(require,module,exports){ +var asn1 = exports; + +asn1.bignum = require('bn.js'); + +asn1.define = require('./asn1/api').define; +asn1.base = require('./asn1/base'); +asn1.constants = require('./asn1/constants'); +asn1.decoders = require('./asn1/decoders'); +asn1.encoders = require('./asn1/encoders'); + +},{"./asn1/api":15,"./asn1/base":17,"./asn1/constants":21,"./asn1/decoders":23,"./asn1/encoders":26,"bn.js":66}],15:[function(require,module,exports){ +var asn1 = require('../asn1'); +var inherits = require('inherits'); + +var api = exports; + +api.define = function define(name, body) { + return new Entity(name, body); +}; + +function Entity(name, body) { + this.name = name; + this.body = body; + + this.decoders = {}; + this.encoders = {}; +}; + +Entity.prototype._createNamed = function createNamed(base) { + var named; + try { + named = require('vm').runInThisContext( + '(function ' + this.name + '(entity) {\n' + + ' this._initNamed(entity);\n' + + '})' + ); + } catch (e) { + named = function (entity) { + this._initNamed(entity); + }; + } + inherits(named, base); + named.prototype._initNamed = function initnamed(entity) { + base.call(this, entity); + }; + + return new named(this); +}; + +Entity.prototype._getDecoder = function _getDecoder(enc) { + enc = enc || 'der'; + // Lazily create decoder + if (!this.decoders.hasOwnProperty(enc)) + this.decoders[enc] = this._createNamed(asn1.decoders[enc]); + return this.decoders[enc]; +}; + +Entity.prototype.decode = function decode(data, enc, options) { + return this._getDecoder(enc).decode(data, options); +}; + +Entity.prototype._getEncoder = function _getEncoder(enc) { + enc = enc || 'der'; + // Lazily create encoder + if (!this.encoders.hasOwnProperty(enc)) + this.encoders[enc] = this._createNamed(asn1.encoders[enc]); + return this.encoders[enc]; +}; + +Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) { + return this._getEncoder(enc).encode(data, reporter); +}; + +},{"../asn1":14,"inherits":834,"vm":111}],16:[function(require,module,exports){ +var inherits = require('inherits'); +var Reporter = require('../base').Reporter; +var Buffer = require('buffer').Buffer; + +function DecoderBuffer(base, options) { + Reporter.call(this, options); + if (!Buffer.isBuffer(base)) { + this.error('Input not Buffer'); + return; + } + + this.base = base; + this.offset = 0; + this.length = base.length; +} +inherits(DecoderBuffer, Reporter); +exports.DecoderBuffer = DecoderBuffer; + +DecoderBuffer.prototype.save = function save() { + return { offset: this.offset, reporter: Reporter.prototype.save.call(this) }; +}; + +DecoderBuffer.prototype.restore = function restore(save) { + // Return skipped data + var res = new DecoderBuffer(this.base); + res.offset = save.offset; + res.length = this.offset; + + this.offset = save.offset; + Reporter.prototype.restore.call(this, save.reporter); + + return res; +}; + +DecoderBuffer.prototype.isEmpty = function isEmpty() { + return this.offset === this.length; +}; + +DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) { + if (this.offset + 1 <= this.length) + return this.base.readUInt8(this.offset++, true); + else + return this.error(fail || 'DecoderBuffer overrun'); +} + +DecoderBuffer.prototype.skip = function skip(bytes, fail) { + if (!(this.offset + bytes <= this.length)) + return this.error(fail || 'DecoderBuffer overrun'); + + var res = new DecoderBuffer(this.base); + + // Share reporter state + res._reporterState = this._reporterState; + + res.offset = this.offset; + res.length = this.offset + bytes; + this.offset += bytes; + return res; +} + +DecoderBuffer.prototype.raw = function raw(save) { + return this.base.slice(save ? save.offset : this.offset, this.length); +} + +function EncoderBuffer(value, reporter) { + if (Array.isArray(value)) { + this.length = 0; + this.value = value.map(function(item) { + if (!(item instanceof EncoderBuffer)) + item = new EncoderBuffer(item, reporter); + this.length += item.length; + return item; + }, this); + } else if (typeof value === 'number') { + if (!(0 <= value && value <= 0xff)) + return reporter.error('non-byte EncoderBuffer value'); + this.value = value; + this.length = 1; + } else if (typeof value === 'string') { + this.value = value; + this.length = Buffer.byteLength(value); + } else if (Buffer.isBuffer(value)) { + this.value = value; + this.length = value.length; + } else { + return reporter.error('Unsupported type: ' + typeof value); + } +} +exports.EncoderBuffer = EncoderBuffer; + +EncoderBuffer.prototype.join = function join(out, offset) { + if (!out) + out = new Buffer(this.length); + if (!offset) + offset = 0; + + if (this.length === 0) + return out; + + if (Array.isArray(this.value)) { + this.value.forEach(function(item) { + item.join(out, offset); + offset += item.length; + }); + } else { + if (typeof this.value === 'number') + out[offset] = this.value; + else if (typeof this.value === 'string') + out.write(this.value, offset); + else if (Buffer.isBuffer(this.value)) + this.value.copy(out, offset); + offset += this.length; + } + + return out; +}; + +},{"../base":17,"buffer":113,"inherits":834}],17:[function(require,module,exports){ +var base = exports; + +base.Reporter = require('./reporter').Reporter; +base.DecoderBuffer = require('./buffer').DecoderBuffer; +base.EncoderBuffer = require('./buffer').EncoderBuffer; +base.Node = require('./node'); + +},{"./buffer":16,"./node":18,"./reporter":19}],18:[function(require,module,exports){ +var Reporter = require('../base').Reporter; +var EncoderBuffer = require('../base').EncoderBuffer; +var DecoderBuffer = require('../base').DecoderBuffer; +var assert = require('minimalistic-assert'); + +// Supported tags +var tags = [ + 'seq', 'seqof', 'set', 'setof', 'objid', 'bool', + 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc', + 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str', + 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr' +]; + +// Public methods list +var methods = [ + 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice', + 'any', 'contains' +].concat(tags); + +// Overrided methods list +var overrided = [ + '_peekTag', '_decodeTag', '_use', + '_decodeStr', '_decodeObjid', '_decodeTime', + '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList', + + '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime', + '_encodeNull', '_encodeInt', '_encodeBool' +]; + +function Node(enc, parent) { + var state = {}; + this._baseState = state; + + state.enc = enc; + + state.parent = parent || null; + state.children = null; + + // State + state.tag = null; + state.args = null; + state.reverseArgs = null; + state.choice = null; + state.optional = false; + state.any = false; + state.obj = false; + state.use = null; + state.useDecoder = null; + state.key = null; + state['default'] = null; + state.explicit = null; + state.implicit = null; + state.contains = null; + + // Should create new instance on each method + if (!state.parent) { + state.children = []; + this._wrap(); + } +} +module.exports = Node; + +var stateProps = [ + 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice', + 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit', + 'implicit', 'contains' +]; + +Node.prototype.clone = function clone() { + var state = this._baseState; + var cstate = {}; + stateProps.forEach(function(prop) { + cstate[prop] = state[prop]; + }); + var res = new this.constructor(cstate.parent); + res._baseState = cstate; + return res; +}; + +Node.prototype._wrap = function wrap() { + var state = this._baseState; + methods.forEach(function(method) { + this[method] = function _wrappedMethod() { + var clone = new this.constructor(this); + state.children.push(clone); + return clone[method].apply(clone, arguments); + }; + }, this); +}; + +Node.prototype._init = function init(body) { + var state = this._baseState; + + assert(state.parent === null); + body.call(this); + + // Filter children + state.children = state.children.filter(function(child) { + return child._baseState.parent === this; + }, this); + assert.equal(state.children.length, 1, 'Root node can have only one child'); +}; + +Node.prototype._useArgs = function useArgs(args) { + var state = this._baseState; + + // Filter children and args + var children = args.filter(function(arg) { + return arg instanceof this.constructor; + }, this); + args = args.filter(function(arg) { + return !(arg instanceof this.constructor); + }, this); + + if (children.length !== 0) { + assert(state.children === null); + state.children = children; + + // Replace parent to maintain backward link + children.forEach(function(child) { + child._baseState.parent = this; + }, this); + } + if (args.length !== 0) { + assert(state.args === null); + state.args = args; + state.reverseArgs = args.map(function(arg) { + if (typeof arg !== 'object' || arg.constructor !== Object) + return arg; + + var res = {}; + Object.keys(arg).forEach(function(key) { + if (key == (key | 0)) + key |= 0; + var value = arg[key]; + res[value] = key; + }); + return res; + }); + } +}; + +// +// Overrided methods +// + +overrided.forEach(function(method) { + Node.prototype[method] = function _overrided() { + var state = this._baseState; + throw new Error(method + ' not implemented for encoding: ' + state.enc); + }; +}); + +// +// Public methods +// + +tags.forEach(function(tag) { + Node.prototype[tag] = function _tagMethod() { + var state = this._baseState; + var args = Array.prototype.slice.call(arguments); + + assert(state.tag === null); + state.tag = tag; + + this._useArgs(args); + + return this; + }; +}); + +Node.prototype.use = function use(item) { + assert(item); + var state = this._baseState; + + assert(state.use === null); + state.use = item; + + return this; +}; + +Node.prototype.optional = function optional() { + var state = this._baseState; + + state.optional = true; + + return this; +}; + +Node.prototype.def = function def(val) { + var state = this._baseState; + + assert(state['default'] === null); + state['default'] = val; + state.optional = true; + + return this; +}; + +Node.prototype.explicit = function explicit(num) { + var state = this._baseState; + + assert(state.explicit === null && state.implicit === null); + state.explicit = num; + + return this; +}; + +Node.prototype.implicit = function implicit(num) { + var state = this._baseState; + + assert(state.explicit === null && state.implicit === null); + state.implicit = num; + + return this; +}; + +Node.prototype.obj = function obj() { + var state = this._baseState; + var args = Array.prototype.slice.call(arguments); + + state.obj = true; + + if (args.length !== 0) + this._useArgs(args); + + return this; +}; + +Node.prototype.key = function key(newKey) { + var state = this._baseState; + + assert(state.key === null); + state.key = newKey; + + return this; +}; + +Node.prototype.any = function any() { + var state = this._baseState; + + state.any = true; + + return this; +}; + +Node.prototype.choice = function choice(obj) { + var state = this._baseState; + + assert(state.choice === null); + state.choice = obj; + this._useArgs(Object.keys(obj).map(function(key) { + return obj[key]; + })); + + return this; +}; + +Node.prototype.contains = function contains(item) { + var state = this._baseState; + + assert(state.use === null); + state.contains = item; + + return this; +}; + +// +// Decoding +// + +Node.prototype._decode = function decode(input, options) { + var state = this._baseState; + + // Decode root node + if (state.parent === null) + return input.wrapResult(state.children[0]._decode(input, options)); + + var result = state['default']; + var present = true; + + var prevKey = null; + if (state.key !== null) + prevKey = input.enterKey(state.key); + + // Check if tag is there + if (state.optional) { + var tag = null; + if (state.explicit !== null) + tag = state.explicit; + else if (state.implicit !== null) + tag = state.implicit; + else if (state.tag !== null) + tag = state.tag; + + if (tag === null && !state.any) { + // Trial and Error + var save = input.save(); + try { + if (state.choice === null) + this._decodeGeneric(state.tag, input, options); + else + this._decodeChoice(input, options); + present = true; + } catch (e) { + present = false; + } + input.restore(save); + } else { + present = this._peekTag(input, tag, state.any); + + if (input.isError(present)) + return present; + } + } + + // Push object on stack + var prevObj; + if (state.obj && present) + prevObj = input.enterObject(); + + if (present) { + // Unwrap explicit values + if (state.explicit !== null) { + var explicit = this._decodeTag(input, state.explicit); + if (input.isError(explicit)) + return explicit; + input = explicit; + } + + var start = input.offset; + + // Unwrap implicit and normal values + if (state.use === null && state.choice === null) { + if (state.any) + var save = input.save(); + var body = this._decodeTag( + input, + state.implicit !== null ? state.implicit : state.tag, + state.any + ); + if (input.isError(body)) + return body; + + if (state.any) + result = input.raw(save); + else + input = body; + } + + if (options && options.track && state.tag !== null) + options.track(input.path(), start, input.length, 'tagged'); + + if (options && options.track && state.tag !== null) + options.track(input.path(), input.offset, input.length, 'content'); + + // Select proper method for tag + if (state.any) + result = result; + else if (state.choice === null) + result = this._decodeGeneric(state.tag, input, options); + else + result = this._decodeChoice(input, options); + + if (input.isError(result)) + return result; + + // Decode children + if (!state.any && state.choice === null && state.children !== null) { + state.children.forEach(function decodeChildren(child) { + // NOTE: We are ignoring errors here, to let parser continue with other + // parts of encoded data + child._decode(input, options); + }); + } + + // Decode contained/encoded by schema, only in bit or octet strings + if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) { + var data = new DecoderBuffer(result); + result = this._getUse(state.contains, input._reporterState.obj) + ._decode(data, options); + } + } + + // Pop object + if (state.obj && present) + result = input.leaveObject(prevObj); + + // Set key + if (state.key !== null && (result !== null || present === true)) + input.leaveKey(prevKey, state.key, result); + else if (prevKey !== null) + input.exitKey(prevKey); + + return result; +}; + +Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) { + var state = this._baseState; + + if (tag === 'seq' || tag === 'set') + return null; + if (tag === 'seqof' || tag === 'setof') + return this._decodeList(input, tag, state.args[0], options); + else if (/str$/.test(tag)) + return this._decodeStr(input, tag, options); + else if (tag === 'objid' && state.args) + return this._decodeObjid(input, state.args[0], state.args[1], options); + else if (tag === 'objid') + return this._decodeObjid(input, null, null, options); + else if (tag === 'gentime' || tag === 'utctime') + return this._decodeTime(input, tag, options); + else if (tag === 'null_') + return this._decodeNull(input, options); + else if (tag === 'bool') + return this._decodeBool(input, options); + else if (tag === 'objDesc') + return this._decodeStr(input, tag, options); + else if (tag === 'int' || tag === 'enum') + return this._decodeInt(input, state.args && state.args[0], options); + + if (state.use !== null) { + return this._getUse(state.use, input._reporterState.obj) + ._decode(input, options); + } else { + return input.error('unknown tag: ' + tag); + } +}; + +Node.prototype._getUse = function _getUse(entity, obj) { + + var state = this._baseState; + // Create altered use decoder if implicit is set + state.useDecoder = this._use(entity, obj); + assert(state.useDecoder._baseState.parent === null); + state.useDecoder = state.useDecoder._baseState.children[0]; + if (state.implicit !== state.useDecoder._baseState.implicit) { + state.useDecoder = state.useDecoder.clone(); + state.useDecoder._baseState.implicit = state.implicit; + } + return state.useDecoder; +}; + +Node.prototype._decodeChoice = function decodeChoice(input, options) { + var state = this._baseState; + var result = null; + var match = false; + + Object.keys(state.choice).some(function(key) { + var save = input.save(); + var node = state.choice[key]; + try { + var value = node._decode(input, options); + if (input.isError(value)) + return false; + + result = { type: key, value: value }; + match = true; + } catch (e) { + input.restore(save); + return false; + } + return true; + }, this); + + if (!match) + return input.error('Choice not matched'); + + return result; +}; + +// +// Encoding +// + +Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) { + return new EncoderBuffer(data, this.reporter); +}; + +Node.prototype._encode = function encode(data, reporter, parent) { + var state = this._baseState; + if (state['default'] !== null && state['default'] === data) + return; + + var result = this._encodeValue(data, reporter, parent); + if (result === undefined) + return; + + if (this._skipDefault(result, reporter, parent)) + return; + + return result; +}; + +Node.prototype._encodeValue = function encode(data, reporter, parent) { + var state = this._baseState; + + // Decode root node + if (state.parent === null) + return state.children[0]._encode(data, reporter || new Reporter()); + + var result = null; + + // Set reporter to share it with a child class + this.reporter = reporter; + + // Check if data is there + if (state.optional && data === undefined) { + if (state['default'] !== null) + data = state['default'] + else + return; + } + + // Encode children first + var content = null; + var primitive = false; + if (state.any) { + // Anything that was given is translated to buffer + result = this._createEncoderBuffer(data); + } else if (state.choice) { + result = this._encodeChoice(data, reporter); + } else if (state.contains) { + content = this._getUse(state.contains, parent)._encode(data, reporter); + primitive = true; + } else if (state.children) { + content = state.children.map(function(child) { + if (child._baseState.tag === 'null_') + return child._encode(null, reporter, data); + + if (child._baseState.key === null) + return reporter.error('Child should have a key'); + var prevKey = reporter.enterKey(child._baseState.key); + + if (typeof data !== 'object') + return reporter.error('Child expected, but input is not object'); + + var res = child._encode(data[child._baseState.key], reporter, data); + reporter.leaveKey(prevKey); + + return res; + }, this).filter(function(child) { + return child; + }); + content = this._createEncoderBuffer(content); + } else { + if (state.tag === 'seqof' || state.tag === 'setof') { + // TODO(indutny): this should be thrown on DSL level + if (!(state.args && state.args.length === 1)) + return reporter.error('Too many args for : ' + state.tag); + + if (!Array.isArray(data)) + return reporter.error('seqof/setof, but data is not Array'); + + var child = this.clone(); + child._baseState.implicit = null; + content = this._createEncoderBuffer(data.map(function(item) { + var state = this._baseState; + + return this._getUse(state.args[0], data)._encode(item, reporter); + }, child)); + } else if (state.use !== null) { + result = this._getUse(state.use, parent)._encode(data, reporter); + } else { + content = this._encodePrimitive(state.tag, data); + primitive = true; + } + } + + // Encode data itself + var result; + if (!state.any && state.choice === null) { + var tag = state.implicit !== null ? state.implicit : state.tag; + var cls = state.implicit === null ? 'universal' : 'context'; + + if (tag === null) { + if (state.use === null) + reporter.error('Tag could be omitted only for .use()'); + } else { + if (state.use === null) + result = this._encodeComposite(tag, primitive, cls, content); + } + } + + // Wrap in explicit + if (state.explicit !== null) + result = this._encodeComposite(state.explicit, false, 'context', result); + + return result; +}; + +Node.prototype._encodeChoice = function encodeChoice(data, reporter) { + var state = this._baseState; + + var node = state.choice[data.type]; + if (!node) { + assert( + false, + data.type + ' not found in ' + + JSON.stringify(Object.keys(state.choice))); + } + return node._encode(data.value, reporter); +}; + +Node.prototype._encodePrimitive = function encodePrimitive(tag, data) { + var state = this._baseState; + + if (/str$/.test(tag)) + return this._encodeStr(data, tag); + else if (tag === 'objid' && state.args) + return this._encodeObjid(data, state.reverseArgs[0], state.args[1]); + else if (tag === 'objid') + return this._encodeObjid(data, null, null); + else if (tag === 'gentime' || tag === 'utctime') + return this._encodeTime(data, tag); + else if (tag === 'null_') + return this._encodeNull(); + else if (tag === 'int' || tag === 'enum') + return this._encodeInt(data, state.args && state.reverseArgs[0]); + else if (tag === 'bool') + return this._encodeBool(data); + else if (tag === 'objDesc') + return this._encodeStr(data, tag); + else + throw new Error('Unsupported tag: ' + tag); +}; + +Node.prototype._isNumstr = function isNumstr(str) { + return /^[0-9 ]*$/.test(str); +}; + +Node.prototype._isPrintstr = function isPrintstr(str) { + return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str); +}; + +},{"../base":17,"minimalistic-assert":960}],19:[function(require,module,exports){ +var inherits = require('inherits'); + +function Reporter(options) { + this._reporterState = { + obj: null, + path: [], + options: options || {}, + errors: [] + }; +} +exports.Reporter = Reporter; + +Reporter.prototype.isError = function isError(obj) { + return obj instanceof ReporterError; +}; + +Reporter.prototype.save = function save() { + var state = this._reporterState; + + return { obj: state.obj, pathLen: state.path.length }; +}; + +Reporter.prototype.restore = function restore(data) { + var state = this._reporterState; + + state.obj = data.obj; + state.path = state.path.slice(0, data.pathLen); +}; + +Reporter.prototype.enterKey = function enterKey(key) { + return this._reporterState.path.push(key); +}; + +Reporter.prototype.exitKey = function exitKey(index) { + var state = this._reporterState; + + state.path = state.path.slice(0, index - 1); +}; + +Reporter.prototype.leaveKey = function leaveKey(index, key, value) { + var state = this._reporterState; + + this.exitKey(index); + if (state.obj !== null) + state.obj[key] = value; +}; + +Reporter.prototype.path = function path() { + return this._reporterState.path.join('/'); +}; + +Reporter.prototype.enterObject = function enterObject() { + var state = this._reporterState; + + var prev = state.obj; + state.obj = {}; + return prev; +}; + +Reporter.prototype.leaveObject = function leaveObject(prev) { + var state = this._reporterState; + + var now = state.obj; + state.obj = prev; + return now; +}; + +Reporter.prototype.error = function error(msg) { + var err; + var state = this._reporterState; + + var inherited = msg instanceof ReporterError; + if (inherited) { + err = msg; + } else { + err = new ReporterError(state.path.map(function(elem) { + return '[' + JSON.stringify(elem) + ']'; + }).join(''), msg.message || msg, msg.stack); + } + + if (!state.options.partial) + throw err; + + if (!inherited) + state.errors.push(err); + + return err; +}; + +Reporter.prototype.wrapResult = function wrapResult(result) { + var state = this._reporterState; + if (!state.options.partial) + return result; + + return { + result: this.isError(result) ? null : result, + errors: state.errors + }; +}; + +function ReporterError(path, msg) { + this.path = path; + this.rethrow(msg); +}; +inherits(ReporterError, Error); + +ReporterError.prototype.rethrow = function rethrow(msg) { + this.message = msg + ' at: ' + (this.path || '(shallow)'); + if (Error.captureStackTrace) + Error.captureStackTrace(this, ReporterError); + + if (!this.stack) { + try { + // IE only adds stack when thrown + throw new Error(this.message); + } catch (e) { + this.stack = e.stack; + } + } + return this; +}; + +},{"inherits":834}],20:[function(require,module,exports){ +var constants = require('../constants'); + +exports.tagClass = { + 0: 'universal', + 1: 'application', + 2: 'context', + 3: 'private' +}; +exports.tagClassByName = constants._reverse(exports.tagClass); + +exports.tag = { + 0x00: 'end', + 0x01: 'bool', + 0x02: 'int', + 0x03: 'bitstr', + 0x04: 'octstr', + 0x05: 'null_', + 0x06: 'objid', + 0x07: 'objDesc', + 0x08: 'external', + 0x09: 'real', + 0x0a: 'enum', + 0x0b: 'embed', + 0x0c: 'utf8str', + 0x0d: 'relativeOid', + 0x10: 'seq', + 0x11: 'set', + 0x12: 'numstr', + 0x13: 'printstr', + 0x14: 't61str', + 0x15: 'videostr', + 0x16: 'ia5str', + 0x17: 'utctime', + 0x18: 'gentime', + 0x19: 'graphstr', + 0x1a: 'iso646str', + 0x1b: 'genstr', + 0x1c: 'unistr', + 0x1d: 'charstr', + 0x1e: 'bmpstr' +}; +exports.tagByName = constants._reverse(exports.tag); + +},{"../constants":21}],21:[function(require,module,exports){ +var constants = exports; + +// Helper +constants._reverse = function reverse(map) { + var res = {}; + + Object.keys(map).forEach(function(key) { + // Convert key to integer if it is stringified + if ((key | 0) == key) + key = key | 0; + + var value = map[key]; + res[value] = key; + }); + + return res; +}; + +constants.der = require('./der'); + +},{"./der":20}],22:[function(require,module,exports){ +var inherits = require('inherits'); + +var asn1 = require('../../asn1'); +var base = asn1.base; +var bignum = asn1.bignum; + +// Import DER constants +var der = asn1.constants.der; + +function DERDecoder(entity) { + this.enc = 'der'; + this.name = entity.name; + this.entity = entity; + + // Construct base tree + this.tree = new DERNode(); + this.tree._init(entity.body); +}; +module.exports = DERDecoder; + +DERDecoder.prototype.decode = function decode(data, options) { + if (!(data instanceof base.DecoderBuffer)) + data = new base.DecoderBuffer(data, options); + + return this.tree._decode(data, options); +}; + +// Tree methods + +function DERNode(parent) { + base.Node.call(this, 'der', parent); +} +inherits(DERNode, base.Node); + +DERNode.prototype._peekTag = function peekTag(buffer, tag, any) { + if (buffer.isEmpty()) + return false; + + var state = buffer.save(); + var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"'); + if (buffer.isError(decodedTag)) + return decodedTag; + + buffer.restore(state); + + return decodedTag.tag === tag || decodedTag.tagStr === tag || + (decodedTag.tagStr + 'of') === tag || any; +}; + +DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) { + var decodedTag = derDecodeTag(buffer, + 'Failed to decode tag of "' + tag + '"'); + if (buffer.isError(decodedTag)) + return decodedTag; + + var len = derDecodeLen(buffer, + decodedTag.primitive, + 'Failed to get length of "' + tag + '"'); + + // Failure + if (buffer.isError(len)) + return len; + + if (!any && + decodedTag.tag !== tag && + decodedTag.tagStr !== tag && + decodedTag.tagStr + 'of' !== tag) { + return buffer.error('Failed to match tag: "' + tag + '"'); + } + + if (decodedTag.primitive || len !== null) + return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); + + // Indefinite length... find END tag + var state = buffer.save(); + var res = this._skipUntilEnd( + buffer, + 'Failed to skip indefinite length body: "' + this.tag + '"'); + if (buffer.isError(res)) + return res; + + len = buffer.offset - state.offset; + buffer.restore(state); + return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); +}; + +DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) { + while (true) { + var tag = derDecodeTag(buffer, fail); + if (buffer.isError(tag)) + return tag; + var len = derDecodeLen(buffer, tag.primitive, fail); + if (buffer.isError(len)) + return len; + + var res; + if (tag.primitive || len !== null) + res = buffer.skip(len) + else + res = this._skipUntilEnd(buffer, fail); + + // Failure + if (buffer.isError(res)) + return res; + + if (tag.tagStr === 'end') + break; + } +}; + +DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder, + options) { + var result = []; + while (!buffer.isEmpty()) { + var possibleEnd = this._peekTag(buffer, 'end'); + if (buffer.isError(possibleEnd)) + return possibleEnd; + + var res = decoder.decode(buffer, 'der', options); + if (buffer.isError(res) && possibleEnd) + break; + result.push(res); + } + return result; +}; + +DERNode.prototype._decodeStr = function decodeStr(buffer, tag) { + if (tag === 'bitstr') { + var unused = buffer.readUInt8(); + if (buffer.isError(unused)) + return unused; + return { unused: unused, data: buffer.raw() }; + } else if (tag === 'bmpstr') { + var raw = buffer.raw(); + if (raw.length % 2 === 1) + return buffer.error('Decoding of string type: bmpstr length mismatch'); + + var str = ''; + for (var i = 0; i < raw.length / 2; i++) { + str += String.fromCharCode(raw.readUInt16BE(i * 2)); + } + return str; + } else if (tag === 'numstr') { + var numstr = buffer.raw().toString('ascii'); + if (!this._isNumstr(numstr)) { + return buffer.error('Decoding of string type: ' + + 'numstr unsupported characters'); + } + return numstr; + } else if (tag === 'octstr') { + return buffer.raw(); + } else if (tag === 'objDesc') { + return buffer.raw(); + } else if (tag === 'printstr') { + var printstr = buffer.raw().toString('ascii'); + if (!this._isPrintstr(printstr)) { + return buffer.error('Decoding of string type: ' + + 'printstr unsupported characters'); + } + return printstr; + } else if (/str$/.test(tag)) { + return buffer.raw().toString(); + } else { + return buffer.error('Decoding of string type: ' + tag + ' unsupported'); + } +}; + +DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) { + var result; + var identifiers = []; + var ident = 0; + while (!buffer.isEmpty()) { + var subident = buffer.readUInt8(); + ident <<= 7; + ident |= subident & 0x7f; + if ((subident & 0x80) === 0) { + identifiers.push(ident); + ident = 0; + } + } + if (subident & 0x80) + identifiers.push(ident); + + var first = (identifiers[0] / 40) | 0; + var second = identifiers[0] % 40; + + if (relative) + result = identifiers; + else + result = [first, second].concat(identifiers.slice(1)); + + if (values) { + var tmp = values[result.join(' ')]; + if (tmp === undefined) + tmp = values[result.join('.')]; + if (tmp !== undefined) + result = tmp; + } + + return result; +}; + +DERNode.prototype._decodeTime = function decodeTime(buffer, tag) { + var str = buffer.raw().toString(); + if (tag === 'gentime') { + var year = str.slice(0, 4) | 0; + var mon = str.slice(4, 6) | 0; + var day = str.slice(6, 8) | 0; + var hour = str.slice(8, 10) | 0; + var min = str.slice(10, 12) | 0; + var sec = str.slice(12, 14) | 0; + } else if (tag === 'utctime') { + var year = str.slice(0, 2) | 0; + var mon = str.slice(2, 4) | 0; + var day = str.slice(4, 6) | 0; + var hour = str.slice(6, 8) | 0; + var min = str.slice(8, 10) | 0; + var sec = str.slice(10, 12) | 0; + if (year < 70) + year = 2000 + year; + else + year = 1900 + year; + } else { + return buffer.error('Decoding ' + tag + ' time is not supported yet'); + } + + return Date.UTC(year, mon - 1, day, hour, min, sec, 0); +}; + +DERNode.prototype._decodeNull = function decodeNull(buffer) { + return null; +}; + +DERNode.prototype._decodeBool = function decodeBool(buffer) { + var res = buffer.readUInt8(); + if (buffer.isError(res)) + return res; + else + return res !== 0; +}; + +DERNode.prototype._decodeInt = function decodeInt(buffer, values) { + // Bigint, return as it is (assume big endian) + var raw = buffer.raw(); + var res = new bignum(raw); + + if (values) + res = values[res.toString(10)] || res; + + return res; +}; + +DERNode.prototype._use = function use(entity, obj) { + if (typeof entity === 'function') + entity = entity(obj); + return entity._getDecoder('der').tree; +}; + +// Utility methods + +function derDecodeTag(buf, fail) { + var tag = buf.readUInt8(fail); + if (buf.isError(tag)) + return tag; + + var cls = der.tagClass[tag >> 6]; + var primitive = (tag & 0x20) === 0; + + // Multi-octet tag - load + if ((tag & 0x1f) === 0x1f) { + var oct = tag; + tag = 0; + while ((oct & 0x80) === 0x80) { + oct = buf.readUInt8(fail); + if (buf.isError(oct)) + return oct; + + tag <<= 7; + tag |= oct & 0x7f; + } + } else { + tag &= 0x1f; + } + var tagStr = der.tag[tag]; + + return { + cls: cls, + primitive: primitive, + tag: tag, + tagStr: tagStr + }; +} + +function derDecodeLen(buf, primitive, fail) { + var len = buf.readUInt8(fail); + if (buf.isError(len)) + return len; + + // Indefinite form + if (!primitive && len === 0x80) + return null; + + // Definite form + if ((len & 0x80) === 0) { + // Short form + return len; + } + + // Long form + var num = len & 0x7f; + if (num > 4) + return buf.error('length octect is too long'); + + len = 0; + for (var i = 0; i < num; i++) { + len <<= 8; + var j = buf.readUInt8(fail); + if (buf.isError(j)) + return j; + len |= j; + } + + return len; +} + +},{"../../asn1":14,"inherits":834}],23:[function(require,module,exports){ +var decoders = exports; + +decoders.der = require('./der'); +decoders.pem = require('./pem'); + +},{"./der":22,"./pem":24}],24:[function(require,module,exports){ +var inherits = require('inherits'); +var Buffer = require('buffer').Buffer; + +var DERDecoder = require('./der'); + +function PEMDecoder(entity) { + DERDecoder.call(this, entity); + this.enc = 'pem'; +}; +inherits(PEMDecoder, DERDecoder); +module.exports = PEMDecoder; + +PEMDecoder.prototype.decode = function decode(data, options) { + var lines = data.toString().split(/[\r\n]+/g); + + var label = options.label.toUpperCase(); + + var re = /^-----(BEGIN|END) ([^-]+)-----$/; + var start = -1; + var end = -1; + for (var i = 0; i < lines.length; i++) { + var match = lines[i].match(re); + if (match === null) + continue; + + if (match[2] !== label) + continue; + + if (start === -1) { + if (match[1] !== 'BEGIN') + break; + start = i; + } else { + if (match[1] !== 'END') + break; + end = i; + break; + } + } + if (start === -1 || end === -1) + throw new Error('PEM section not found for: ' + label); + + var base64 = lines.slice(start + 1, end).join(''); + // Remove excessive symbols + base64.replace(/[^a-z0-9\+\/=]+/gi, ''); + + var input = new Buffer(base64, 'base64'); + return DERDecoder.prototype.decode.call(this, input, options); +}; + +},{"./der":22,"buffer":113,"inherits":834}],25:[function(require,module,exports){ +var inherits = require('inherits'); +var Buffer = require('buffer').Buffer; + +var asn1 = require('../../asn1'); +var base = asn1.base; + +// Import DER constants +var der = asn1.constants.der; + +function DEREncoder(entity) { + this.enc = 'der'; + this.name = entity.name; + this.entity = entity; + + // Construct base tree + this.tree = new DERNode(); + this.tree._init(entity.body); +}; +module.exports = DEREncoder; + +DEREncoder.prototype.encode = function encode(data, reporter) { + return this.tree._encode(data, reporter).join(); +}; + +// Tree methods + +function DERNode(parent) { + base.Node.call(this, 'der', parent); +} +inherits(DERNode, base.Node); + +DERNode.prototype._encodeComposite = function encodeComposite(tag, + primitive, + cls, + content) { + var encodedTag = encodeTag(tag, primitive, cls, this.reporter); + + // Short form + if (content.length < 0x80) { + var header = new Buffer(2); + header[0] = encodedTag; + header[1] = content.length; + return this._createEncoderBuffer([ header, content ]); + } + + // Long form + // Count octets required to store length + var lenOctets = 1; + for (var i = content.length; i >= 0x100; i >>= 8) + lenOctets++; + + var header = new Buffer(1 + 1 + lenOctets); + header[0] = encodedTag; + header[1] = 0x80 | lenOctets; + + for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8) + header[i] = j & 0xff; + + return this._createEncoderBuffer([ header, content ]); +}; + +DERNode.prototype._encodeStr = function encodeStr(str, tag) { + if (tag === 'bitstr') { + return this._createEncoderBuffer([ str.unused | 0, str.data ]); + } else if (tag === 'bmpstr') { + var buf = new Buffer(str.length * 2); + for (var i = 0; i < str.length; i++) { + buf.writeUInt16BE(str.charCodeAt(i), i * 2); + } + return this._createEncoderBuffer(buf); + } else if (tag === 'numstr') { + if (!this._isNumstr(str)) { + return this.reporter.error('Encoding of string type: numstr supports ' + + 'only digits and space'); + } + return this._createEncoderBuffer(str); + } else if (tag === 'printstr') { + if (!this._isPrintstr(str)) { + return this.reporter.error('Encoding of string type: printstr supports ' + + 'only latin upper and lower case letters, ' + + 'digits, space, apostrophe, left and rigth ' + + 'parenthesis, plus sign, comma, hyphen, ' + + 'dot, slash, colon, equal sign, ' + + 'question mark'); + } + return this._createEncoderBuffer(str); + } else if (/str$/.test(tag)) { + return this._createEncoderBuffer(str); + } else if (tag === 'objDesc') { + return this._createEncoderBuffer(str); + } else { + return this.reporter.error('Encoding of string type: ' + tag + + ' unsupported'); + } +}; + +DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) { + if (typeof id === 'string') { + if (!values) + return this.reporter.error('string objid given, but no values map found'); + if (!values.hasOwnProperty(id)) + return this.reporter.error('objid not found in values map'); + id = values[id].split(/[\s\.]+/g); + for (var i = 0; i < id.length; i++) + id[i] |= 0; + } else if (Array.isArray(id)) { + id = id.slice(); + for (var i = 0; i < id.length; i++) + id[i] |= 0; + } + + if (!Array.isArray(id)) { + return this.reporter.error('objid() should be either array or string, ' + + 'got: ' + JSON.stringify(id)); + } + + if (!relative) { + if (id[1] >= 40) + return this.reporter.error('Second objid identifier OOB'); + id.splice(0, 2, id[0] * 40 + id[1]); + } + + // Count number of octets + var size = 0; + for (var i = 0; i < id.length; i++) { + var ident = id[i]; + for (size++; ident >= 0x80; ident >>= 7) + size++; + } + + var objid = new Buffer(size); + var offset = objid.length - 1; + for (var i = id.length - 1; i >= 0; i--) { + var ident = id[i]; + objid[offset--] = ident & 0x7f; + while ((ident >>= 7) > 0) + objid[offset--] = 0x80 | (ident & 0x7f); + } + + return this._createEncoderBuffer(objid); +}; + +function two(num) { + if (num < 10) + return '0' + num; + else + return num; +} + +DERNode.prototype._encodeTime = function encodeTime(time, tag) { + var str; + var date = new Date(time); + + if (tag === 'gentime') { + str = [ + two(date.getFullYear()), + two(date.getUTCMonth() + 1), + two(date.getUTCDate()), + two(date.getUTCHours()), + two(date.getUTCMinutes()), + two(date.getUTCSeconds()), + 'Z' + ].join(''); + } else if (tag === 'utctime') { + str = [ + two(date.getFullYear() % 100), + two(date.getUTCMonth() + 1), + two(date.getUTCDate()), + two(date.getUTCHours()), + two(date.getUTCMinutes()), + two(date.getUTCSeconds()), + 'Z' + ].join(''); + } else { + this.reporter.error('Encoding ' + tag + ' time is not supported yet'); + } + + return this._encodeStr(str, 'octstr'); +}; + +DERNode.prototype._encodeNull = function encodeNull() { + return this._createEncoderBuffer(''); +}; + +DERNode.prototype._encodeInt = function encodeInt(num, values) { + if (typeof num === 'string') { + if (!values) + return this.reporter.error('String int or enum given, but no values map'); + if (!values.hasOwnProperty(num)) { + return this.reporter.error('Values map doesn\'t contain: ' + + JSON.stringify(num)); + } + num = values[num]; + } + + // Bignum, assume big endian + if (typeof num !== 'number' && !Buffer.isBuffer(num)) { + var numArray = num.toArray(); + if (!num.sign && numArray[0] & 0x80) { + numArray.unshift(0); + } + num = new Buffer(numArray); + } + + if (Buffer.isBuffer(num)) { + var size = num.length; + if (num.length === 0) + size++; + + var out = new Buffer(size); + num.copy(out); + if (num.length === 0) + out[0] = 0 + return this._createEncoderBuffer(out); + } + + if (num < 0x80) + return this._createEncoderBuffer(num); + + if (num < 0x100) + return this._createEncoderBuffer([0, num]); + + var size = 1; + for (var i = num; i >= 0x100; i >>= 8) + size++; + + var out = new Array(size); + for (var i = out.length - 1; i >= 0; i--) { + out[i] = num & 0xff; + num >>= 8; + } + if(out[0] & 0x80) { + out.unshift(0); + } + + return this._createEncoderBuffer(new Buffer(out)); +}; + +DERNode.prototype._encodeBool = function encodeBool(value) { + return this._createEncoderBuffer(value ? 0xff : 0); +}; + +DERNode.prototype._use = function use(entity, obj) { + if (typeof entity === 'function') + entity = entity(obj); + return entity._getEncoder('der').tree; +}; + +DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) { + var state = this._baseState; + var i; + if (state['default'] === null) + return false; + + var data = dataBuffer.join(); + if (state.defaultBuffer === undefined) + state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join(); + + if (data.length !== state.defaultBuffer.length) + return false; + + for (i=0; i < data.length; i++) + if (data[i] !== state.defaultBuffer[i]) + return false; + + return true; +}; + +// Utility methods + +function encodeTag(tag, primitive, cls, reporter) { + var res; + + if (tag === 'seqof') + tag = 'seq'; + else if (tag === 'setof') + tag = 'set'; + + if (der.tagByName.hasOwnProperty(tag)) + res = der.tagByName[tag]; + else if (typeof tag === 'number' && (tag | 0) === tag) + res = tag; + else + return reporter.error('Unknown tag: ' + tag); + + if (res >= 0x1f) + return reporter.error('Multi-octet tag encoding unsupported'); + + if (!primitive) + res |= 0x20; + + res |= (der.tagClassByName[cls || 'universal'] << 6); + + return res; +} + +},{"../../asn1":14,"buffer":113,"inherits":834}],26:[function(require,module,exports){ +var encoders = exports; + +encoders.der = require('./der'); +encoders.pem = require('./pem'); + +},{"./der":25,"./pem":27}],27:[function(require,module,exports){ +var inherits = require('inherits'); + +var DEREncoder = require('./der'); + +function PEMEncoder(entity) { + DEREncoder.call(this, entity); + this.enc = 'pem'; +}; +inherits(PEMEncoder, DEREncoder); +module.exports = PEMEncoder; + +PEMEncoder.prototype.encode = function encode(data, options) { + var buf = DEREncoder.prototype.encode.call(this, data); + + var p = buf.toString('base64'); + var out = [ '-----BEGIN ' + options.label + '-----' ]; + for (var i = 0; i < p.length; i += 64) + out.push(p.slice(i, i + 64)); + out.push('-----END ' + options.label + '-----'); + return out.join('\n'); +}; + +},{"./der":25,"inherits":834}],28:[function(require,module,exports){ +// Copyright 2011 Mark Cavage All rights reserved. + + +module.exports = { + + newInvalidAsn1Error: function (msg) { + var e = new Error(); + e.name = 'InvalidAsn1Error'; + e.message = msg || ''; + return e; + } + +}; + +},{}],29:[function(require,module,exports){ +// Copyright 2011 Mark Cavage All rights reserved. + +var errors = require('./errors'); +var types = require('./types'); + +var Reader = require('./reader'); +var Writer = require('./writer'); + + +// --- Exports + +module.exports = { + + Reader: Reader, + + Writer: Writer + +}; + +for (var t in types) { + if (types.hasOwnProperty(t)) + module.exports[t] = types[t]; +} +for (var e in errors) { + if (errors.hasOwnProperty(e)) + module.exports[e] = errors[e]; +} + +},{"./errors":28,"./reader":30,"./types":31,"./writer":32}],30:[function(require,module,exports){ +// Copyright 2011 Mark Cavage All rights reserved. + +var assert = require('assert'); +var Buffer = require('safer-buffer').Buffer; + +var ASN1 = require('./types'); +var errors = require('./errors'); + + +// --- Globals + +var newInvalidAsn1Error = errors.newInvalidAsn1Error; + + + +// --- API + +function Reader(data) { + if (!data || !Buffer.isBuffer(data)) + throw new TypeError('data must be a node Buffer'); + + this._buf = data; + this._size = data.length; + + // These hold the "current" state + this._len = 0; + this._offset = 0; +} + +Object.defineProperty(Reader.prototype, 'length', { + enumerable: true, + get: function () { return (this._len); } +}); + +Object.defineProperty(Reader.prototype, 'offset', { + enumerable: true, + get: function () { return (this._offset); } +}); + +Object.defineProperty(Reader.prototype, 'remain', { + get: function () { return (this._size - this._offset); } +}); + +Object.defineProperty(Reader.prototype, 'buffer', { + get: function () { return (this._buf.slice(this._offset)); } +}); + + +/** + * Reads a single byte and advances offset; you can pass in `true` to make this + * a "peek" operation (i.e., get the byte, but don't advance the offset). + * + * @param {Boolean} peek true means don't move offset. + * @return {Number} the next byte, null if not enough data. + */ +Reader.prototype.readByte = function (peek) { + if (this._size - this._offset < 1) + return null; + + var b = this._buf[this._offset] & 0xff; + + if (!peek) + this._offset += 1; + + return b; +}; + + +Reader.prototype.peek = function () { + return this.readByte(true); +}; + + +/** + * Reads a (potentially) variable length off the BER buffer. This call is + * not really meant to be called directly, as callers have to manipulate + * the internal buffer afterwards. + * + * As a result of this call, you can call `Reader.length`, until the + * next thing called that does a readLength. + * + * @return {Number} the amount of offset to advance the buffer. + * @throws {InvalidAsn1Error} on bad ASN.1 + */ +Reader.prototype.readLength = function (offset) { + if (offset === undefined) + offset = this._offset; + + if (offset >= this._size) + return null; + + var lenB = this._buf[offset++] & 0xff; + if (lenB === null) + return null; + + if ((lenB & 0x80) === 0x80) { + lenB &= 0x7f; + + if (lenB === 0) + throw newInvalidAsn1Error('Indefinite length not supported'); + + if (lenB > 4) + throw newInvalidAsn1Error('encoding too long'); + + if (this._size - offset < lenB) + return null; + + this._len = 0; + for (var i = 0; i < lenB; i++) + this._len = (this._len << 8) + (this._buf[offset++] & 0xff); + + } else { + // Wasn't a variable length + this._len = lenB; + } + + return offset; +}; + + +/** + * Parses the next sequence in this BER buffer. + * + * To get the length of the sequence, call `Reader.length`. + * + * @return {Number} the sequence's tag. + */ +Reader.prototype.readSequence = function (tag) { + var seq = this.peek(); + if (seq === null) + return null; + if (tag !== undefined && tag !== seq) + throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + + ': got 0x' + seq.toString(16)); + + var o = this.readLength(this._offset + 1); // stored in `length` + if (o === null) + return null; + + this._offset = o; + return seq; +}; + + +Reader.prototype.readInt = function () { + return this._readTag(ASN1.Integer); +}; + + +Reader.prototype.readBoolean = function () { + return (this._readTag(ASN1.Boolean) === 0 ? false : true); +}; + + +Reader.prototype.readEnumeration = function () { + return this._readTag(ASN1.Enumeration); +}; + + +Reader.prototype.readString = function (tag, retbuf) { + if (!tag) + tag = ASN1.OctetString; + + var b = this.peek(); + if (b === null) + return null; + + if (b !== tag) + throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + + ': got 0x' + b.toString(16)); + + var o = this.readLength(this._offset + 1); // stored in `length` + + if (o === null) + return null; + + if (this.length > this._size - o) + return null; + + this._offset = o; + + if (this.length === 0) + return retbuf ? Buffer.alloc(0) : ''; + + var str = this._buf.slice(this._offset, this._offset + this.length); + this._offset += this.length; + + return retbuf ? str : str.toString('utf8'); +}; + +Reader.prototype.readOID = function (tag) { + if (!tag) + tag = ASN1.OID; + + var b = this.readString(tag, true); + if (b === null) + return null; + + var values = []; + var value = 0; + + for (var i = 0; i < b.length; i++) { + var byte = b[i] & 0xff; + + value <<= 7; + value += byte & 0x7f; + if ((byte & 0x80) === 0) { + values.push(value); + value = 0; + } + } + + value = values.shift(); + values.unshift(value % 40); + values.unshift((value / 40) >> 0); + + return values.join('.'); +}; + + +Reader.prototype._readTag = function (tag) { + assert.ok(tag !== undefined); + + var b = this.peek(); + + if (b === null) + return null; + + if (b !== tag) + throw newInvalidAsn1Error('Expected 0x' + tag.toString(16) + + ': got 0x' + b.toString(16)); + + var o = this.readLength(this._offset + 1); // stored in `length` + if (o === null) + return null; + + if (this.length > 4) + throw newInvalidAsn1Error('Integer too long: ' + this.length); + + if (this.length > this._size - o) + return null; + this._offset = o; + + var fb = this._buf[this._offset]; + var value = 0; + + for (var i = 0; i < this.length; i++) { + value <<= 8; + value |= (this._buf[this._offset++] & 0xff); + } + + if ((fb & 0x80) === 0x80 && i !== 4) + value -= (1 << (i * 8)); + + return value >> 0; +}; + + + +// --- Exported API + +module.exports = Reader; + +},{"./errors":28,"./types":31,"assert":35,"safer-buffer":1335}],31:[function(require,module,exports){ +// Copyright 2011 Mark Cavage All rights reserved. + + +module.exports = { + EOC: 0, + Boolean: 1, + Integer: 2, + BitString: 3, + OctetString: 4, + Null: 5, + OID: 6, + ObjectDescriptor: 7, + External: 8, + Real: 9, // float + Enumeration: 10, + PDV: 11, + Utf8String: 12, + RelativeOID: 13, + Sequence: 16, + Set: 17, + NumericString: 18, + PrintableString: 19, + T61String: 20, + VideotexString: 21, + IA5String: 22, + UTCTime: 23, + GeneralizedTime: 24, + GraphicString: 25, + VisibleString: 26, + GeneralString: 28, + UniversalString: 29, + CharacterString: 30, + BMPString: 31, + Constructor: 32, + Context: 128 +}; + +},{}],32:[function(require,module,exports){ +// Copyright 2011 Mark Cavage All rights reserved. + +var assert = require('assert'); +var Buffer = require('safer-buffer').Buffer; +var ASN1 = require('./types'); +var errors = require('./errors'); + + +// --- Globals + +var newInvalidAsn1Error = errors.newInvalidAsn1Error; + +var DEFAULT_OPTS = { + size: 1024, + growthFactor: 8 +}; + + +// --- Helpers + +function merge(from, to) { + assert.ok(from); + assert.equal(typeof (from), 'object'); + assert.ok(to); + assert.equal(typeof (to), 'object'); + + var keys = Object.getOwnPropertyNames(from); + keys.forEach(function (key) { + if (to[key]) + return; + + var value = Object.getOwnPropertyDescriptor(from, key); + Object.defineProperty(to, key, value); + }); + + return to; +} + + + +// --- API + +function Writer(options) { + options = merge(DEFAULT_OPTS, options || {}); + + this._buf = Buffer.alloc(options.size || 1024); + this._size = this._buf.length; + this._offset = 0; + this._options = options; + + // A list of offsets in the buffer where we need to insert + // sequence tag/len pairs. + this._seq = []; +} + +Object.defineProperty(Writer.prototype, 'buffer', { + get: function () { + if (this._seq.length) + throw newInvalidAsn1Error(this._seq.length + ' unended sequence(s)'); + + return (this._buf.slice(0, this._offset)); + } +}); + +Writer.prototype.writeByte = function (b) { + if (typeof (b) !== 'number') + throw new TypeError('argument must be a Number'); + + this._ensure(1); + this._buf[this._offset++] = b; +}; + + +Writer.prototype.writeInt = function (i, tag) { + if (typeof (i) !== 'number') + throw new TypeError('argument must be a Number'); + if (typeof (tag) !== 'number') + tag = ASN1.Integer; + + var sz = 4; + + while ((((i & 0xff800000) === 0) || ((i & 0xff800000) === 0xff800000 >> 0)) && + (sz > 1)) { + sz--; + i <<= 8; + } + + if (sz > 4) + throw newInvalidAsn1Error('BER ints cannot be > 0xffffffff'); + + this._ensure(2 + sz); + this._buf[this._offset++] = tag; + this._buf[this._offset++] = sz; + + while (sz-- > 0) { + this._buf[this._offset++] = ((i & 0xff000000) >>> 24); + i <<= 8; + } + +}; + + +Writer.prototype.writeNull = function () { + this.writeByte(ASN1.Null); + this.writeByte(0x00); +}; + + +Writer.prototype.writeEnumeration = function (i, tag) { + if (typeof (i) !== 'number') + throw new TypeError('argument must be a Number'); + if (typeof (tag) !== 'number') + tag = ASN1.Enumeration; + + return this.writeInt(i, tag); +}; + + +Writer.prototype.writeBoolean = function (b, tag) { + if (typeof (b) !== 'boolean') + throw new TypeError('argument must be a Boolean'); + if (typeof (tag) !== 'number') + tag = ASN1.Boolean; + + this._ensure(3); + this._buf[this._offset++] = tag; + this._buf[this._offset++] = 0x01; + this._buf[this._offset++] = b ? 0xff : 0x00; +}; + + +Writer.prototype.writeString = function (s, tag) { + if (typeof (s) !== 'string') + throw new TypeError('argument must be a string (was: ' + typeof (s) + ')'); + if (typeof (tag) !== 'number') + tag = ASN1.OctetString; + + var len = Buffer.byteLength(s); + this.writeByte(tag); + this.writeLength(len); + if (len) { + this._ensure(len); + this._buf.write(s, this._offset); + this._offset += len; + } +}; + + +Writer.prototype.writeBuffer = function (buf, tag) { + if (typeof (tag) !== 'number') + throw new TypeError('tag must be a number'); + if (!Buffer.isBuffer(buf)) + throw new TypeError('argument must be a buffer'); + + this.writeByte(tag); + this.writeLength(buf.length); + this._ensure(buf.length); + buf.copy(this._buf, this._offset, 0, buf.length); + this._offset += buf.length; +}; + + +Writer.prototype.writeStringArray = function (strings) { + if ((!strings instanceof Array)) + throw new TypeError('argument must be an Array[String]'); + + var self = this; + strings.forEach(function (s) { + self.writeString(s); + }); +}; + +// This is really to solve DER cases, but whatever for now +Writer.prototype.writeOID = function (s, tag) { + if (typeof (s) !== 'string') + throw new TypeError('argument must be a string'); + if (typeof (tag) !== 'number') + tag = ASN1.OID; + + if (!/^([0-9]+\.){3,}[0-9]+$/.test(s)) + throw new Error('argument is not a valid OID string'); + + function encodeOctet(bytes, octet) { + if (octet < 128) { + bytes.push(octet); + } else if (octet < 16384) { + bytes.push((octet >>> 7) | 0x80); + bytes.push(octet & 0x7F); + } else if (octet < 2097152) { + bytes.push((octet >>> 14) | 0x80); + bytes.push(((octet >>> 7) | 0x80) & 0xFF); + bytes.push(octet & 0x7F); + } else if (octet < 268435456) { + bytes.push((octet >>> 21) | 0x80); + bytes.push(((octet >>> 14) | 0x80) & 0xFF); + bytes.push(((octet >>> 7) | 0x80) & 0xFF); + bytes.push(octet & 0x7F); + } else { + bytes.push(((octet >>> 28) | 0x80) & 0xFF); + bytes.push(((octet >>> 21) | 0x80) & 0xFF); + bytes.push(((octet >>> 14) | 0x80) & 0xFF); + bytes.push(((octet >>> 7) | 0x80) & 0xFF); + bytes.push(octet & 0x7F); + } + } + + var tmp = s.split('.'); + var bytes = []; + bytes.push(parseInt(tmp[0], 10) * 40 + parseInt(tmp[1], 10)); + tmp.slice(2).forEach(function (b) { + encodeOctet(bytes, parseInt(b, 10)); + }); + + var self = this; + this._ensure(2 + bytes.length); + this.writeByte(tag); + this.writeLength(bytes.length); + bytes.forEach(function (b) { + self.writeByte(b); + }); +}; + + +Writer.prototype.writeLength = function (len) { + if (typeof (len) !== 'number') + throw new TypeError('argument must be a Number'); + + this._ensure(4); + + if (len <= 0x7f) { + this._buf[this._offset++] = len; + } else if (len <= 0xff) { + this._buf[this._offset++] = 0x81; + this._buf[this._offset++] = len; + } else if (len <= 0xffff) { + this._buf[this._offset++] = 0x82; + this._buf[this._offset++] = len >> 8; + this._buf[this._offset++] = len; + } else if (len <= 0xffffff) { + this._buf[this._offset++] = 0x83; + this._buf[this._offset++] = len >> 16; + this._buf[this._offset++] = len >> 8; + this._buf[this._offset++] = len; + } else { + throw newInvalidAsn1Error('Length too long (> 4 bytes)'); + } +}; + +Writer.prototype.startSequence = function (tag) { + if (typeof (tag) !== 'number') + tag = ASN1.Sequence | ASN1.Constructor; + + this.writeByte(tag); + this._seq.push(this._offset); + this._ensure(3); + this._offset += 3; +}; + + +Writer.prototype.endSequence = function () { + var seq = this._seq.pop(); + var start = seq + 3; + var len = this._offset - start; + + if (len <= 0x7f) { + this._shift(start, len, -2); + this._buf[seq] = len; + } else if (len <= 0xff) { + this._shift(start, len, -1); + this._buf[seq] = 0x81; + this._buf[seq + 1] = len; + } else if (len <= 0xffff) { + this._buf[seq] = 0x82; + this._buf[seq + 1] = len >> 8; + this._buf[seq + 2] = len; + } else if (len <= 0xffffff) { + this._shift(start, len, 1); + this._buf[seq] = 0x83; + this._buf[seq + 1] = len >> 16; + this._buf[seq + 2] = len >> 8; + this._buf[seq + 3] = len; + } else { + throw newInvalidAsn1Error('Sequence too long'); + } +}; + + +Writer.prototype._shift = function (start, len, shift) { + assert.ok(start !== undefined); + assert.ok(len !== undefined); + assert.ok(shift); + + this._buf.copy(this._buf, start + shift, start, start + len); + this._offset += shift; +}; + +Writer.prototype._ensure = function (len) { + assert.ok(len); + + if (this._size - this._offset < len) { + var sz = this._size * this._options.growthFactor; + if (sz - this._offset < len) + sz += len; + + var buf = Buffer.alloc(sz); + + this._buf.copy(buf, 0, 0, this._offset); + this._buf = buf; + this._size = sz; + } +}; + + + +// --- Exported API + +module.exports = Writer; + +},{"./errors":28,"./types":31,"assert":35,"safer-buffer":1335}],33:[function(require,module,exports){ +// Copyright 2011 Mark Cavage All rights reserved. + +// If you have no idea what ASN.1 or BER is, see this: +// ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc + +var Ber = require('./ber/index'); + + + +// --- Exported API + +module.exports = { + + Ber: Ber, + + BerReader: Ber.Reader, + + BerWriter: Ber.Writer + +}; + +},{"./ber/index":29}],34:[function(require,module,exports){ +(function (Buffer,process){ +// Copyright (c) 2012, Mark Cavage. All rights reserved. +// Copyright 2015 Joyent, Inc. + +var assert = require('assert'); +var Stream = require('stream').Stream; +var util = require('util'); + + +///--- Globals + +/* JSSTYLED */ +var UUID_REGEXP = /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/; + + +///--- Internal + +function _capitalize(str) { + return (str.charAt(0).toUpperCase() + str.slice(1)); +} + +function _toss(name, expected, oper, arg, actual) { + throw new assert.AssertionError({ + message: util.format('%s (%s) is required', name, expected), + actual: (actual === undefined) ? typeof (arg) : actual(arg), + expected: expected, + operator: oper || '===', + stackStartFunction: _toss.caller + }); +} + +function _getClass(arg) { + return (Object.prototype.toString.call(arg).slice(8, -1)); +} + +function noop() { + // Why even bother with asserts? +} + + +///--- Exports + +var types = { + bool: { + check: function (arg) { return typeof (arg) === 'boolean'; } + }, + func: { + check: function (arg) { return typeof (arg) === 'function'; } + }, + string: { + check: function (arg) { return typeof (arg) === 'string'; } + }, + object: { + check: function (arg) { + return typeof (arg) === 'object' && arg !== null; + } + }, + number: { + check: function (arg) { + return typeof (arg) === 'number' && !isNaN(arg); + } + }, + finite: { + check: function (arg) { + return typeof (arg) === 'number' && !isNaN(arg) && isFinite(arg); + } + }, + buffer: { + check: function (arg) { return Buffer.isBuffer(arg); }, + operator: 'Buffer.isBuffer' + }, + array: { + check: function (arg) { return Array.isArray(arg); }, + operator: 'Array.isArray' + }, + stream: { + check: function (arg) { return arg instanceof Stream; }, + operator: 'instanceof', + actual: _getClass + }, + date: { + check: function (arg) { return arg instanceof Date; }, + operator: 'instanceof', + actual: _getClass + }, + regexp: { + check: function (arg) { return arg instanceof RegExp; }, + operator: 'instanceof', + actual: _getClass + }, + uuid: { + check: function (arg) { + return typeof (arg) === 'string' && UUID_REGEXP.test(arg); + }, + operator: 'isUUID' + } +}; + +function _setExports(ndebug) { + var keys = Object.keys(types); + var out; + + /* re-export standard assert */ + if (process.env.NODE_NDEBUG) { + out = noop; + } else { + out = function (arg, msg) { + if (!arg) { + _toss(msg, 'true', arg); + } + }; + } + + /* standard checks */ + keys.forEach(function (k) { + if (ndebug) { + out[k] = noop; + return; + } + var type = types[k]; + out[k] = function (arg, msg) { + if (!type.check(arg)) { + _toss(msg, k, type.operator, arg, type.actual); + } + }; + }); + + /* optional checks */ + keys.forEach(function (k) { + var name = 'optional' + _capitalize(k); + if (ndebug) { + out[name] = noop; + return; + } + var type = types[k]; + out[name] = function (arg, msg) { + if (arg === undefined || arg === null) { + return; + } + if (!type.check(arg)) { + _toss(msg, k, type.operator, arg, type.actual); + } + }; + }); + + /* arrayOf checks */ + keys.forEach(function (k) { + var name = 'arrayOf' + _capitalize(k); + if (ndebug) { + out[name] = noop; + return; + } + var type = types[k]; + var expected = '[' + k + ']'; + out[name] = function (arg, msg) { + if (!Array.isArray(arg)) { + _toss(msg, expected, type.operator, arg, type.actual); + } + var i; + for (i = 0; i < arg.length; i++) { + if (!type.check(arg[i])) { + _toss(msg, expected, type.operator, arg, type.actual); + } + } + }; + }); + + /* optionalArrayOf checks */ + keys.forEach(function (k) { + var name = 'optionalArrayOf' + _capitalize(k); + if (ndebug) { + out[name] = noop; + return; + } + var type = types[k]; + var expected = '[' + k + ']'; + out[name] = function (arg, msg) { + if (arg === undefined || arg === null) { + return; + } + if (!Array.isArray(arg)) { + _toss(msg, expected, type.operator, arg, type.actual); + } + var i; + for (i = 0; i < arg.length; i++) { + if (!type.check(arg[i])) { + _toss(msg, expected, type.operator, arg, type.actual); + } + } + }; + }); + + /* re-export built-in assertions */ + Object.keys(assert).forEach(function (k) { + if (k === 'AssertionError') { + out[k] = assert[k]; + return; + } + if (ndebug) { + out[k] = noop; + return; + } + out[k] = assert[k]; + }); + + /* export ourselves (for unit tests _only_) */ + out._setExports = _setExports; + + return out; +} + +module.exports = _setExports(process.env.NODE_NDEBUG); + +}).call(this,{"isBuffer":require("../is-buffer/index.js")},require('_process')) +},{"../is-buffer/index.js":839,"_process":109,"assert":35,"stream":1394,"util":1439}],35:[function(require,module,exports){ +(function (global){ +'use strict'; + +// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js +// original notice: + +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +function compare(a, b) { + if (a === b) { + return 0; + } + + var x = a.length; + var y = b.length; + + for (var i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i]; + y = b[i]; + break; + } + } + + if (x < y) { + return -1; + } + if (y < x) { + return 1; + } + return 0; +} +function isBuffer(b) { + if (global.Buffer && typeof global.Buffer.isBuffer === 'function') { + return global.Buffer.isBuffer(b); + } + return !!(b != null && b._isBuffer); +} + +// based on node assert, original notice: + +// http://wiki.commonjs.org/wiki/Unit_Testing/1.0 +// +// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8! +// +// Originally from narwhal.js (http://narwhaljs.org) +// Copyright (c) 2009 Thomas Robinson <280north.com> +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the 'Software'), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +var util = require('util/'); +var hasOwn = Object.prototype.hasOwnProperty; +var pSlice = Array.prototype.slice; +var functionsHaveNames = (function () { + return function foo() {}.name === 'foo'; +}()); +function pToString (obj) { + return Object.prototype.toString.call(obj); +} +function isView(arrbuf) { + if (isBuffer(arrbuf)) { + return false; + } + if (typeof global.ArrayBuffer !== 'function') { + return false; + } + if (typeof ArrayBuffer.isView === 'function') { + return ArrayBuffer.isView(arrbuf); + } + if (!arrbuf) { + return false; + } + if (arrbuf instanceof DataView) { + return true; + } + if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) { + return true; + } + return false; +} +// 1. The assert module provides functions that throw +// AssertionError's when particular conditions are not met. The +// assert module must conform to the following interface. + +var assert = module.exports = ok; + +// 2. The AssertionError is defined in assert. +// new assert.AssertionError({ message: message, +// actual: actual, +// expected: expected }) + +var regex = /\s*function\s+([^\(\s]*)\s*/; +// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js +function getName(func) { + if (!util.isFunction(func)) { + return; + } + if (functionsHaveNames) { + return func.name; + } + var str = func.toString(); + var match = str.match(regex); + return match && match[1]; +} +assert.AssertionError = function AssertionError(options) { + this.name = 'AssertionError'; + this.actual = options.actual; + this.expected = options.expected; + this.operator = options.operator; + if (options.message) { + this.message = options.message; + this.generatedMessage = false; + } else { + this.message = getMessage(this); + this.generatedMessage = true; + } + var stackStartFunction = options.stackStartFunction || fail; + if (Error.captureStackTrace) { + Error.captureStackTrace(this, stackStartFunction); + } else { + // non v8 browsers so we can have a stacktrace + var err = new Error(); + if (err.stack) { + var out = err.stack; + + // try to strip useless frames + var fn_name = getName(stackStartFunction); + var idx = out.indexOf('\n' + fn_name); + if (idx >= 0) { + // once we have located the function frame + // we need to strip out everything before it (and its line) + var next_line = out.indexOf('\n', idx + 1); + out = out.substring(next_line + 1); + } + + this.stack = out; + } + } +}; + +// assert.AssertionError instanceof Error +util.inherits(assert.AssertionError, Error); + +function truncate(s, n) { + if (typeof s === 'string') { + return s.length < n ? s : s.slice(0, n); + } else { + return s; + } +} +function inspect(something) { + if (functionsHaveNames || !util.isFunction(something)) { + return util.inspect(something); + } + var rawname = getName(something); + var name = rawname ? ': ' + rawname : ''; + return '[Function' + name + ']'; +} +function getMessage(self) { + return truncate(inspect(self.actual), 128) + ' ' + + self.operator + ' ' + + truncate(inspect(self.expected), 128); +} + +// At present only the three keys mentioned above are used and +// understood by the spec. Implementations or sub modules can pass +// other keys to the AssertionError's constructor - they will be +// ignored. + +// 3. All of the following functions must throw an AssertionError +// when a corresponding condition is not met, with a message that +// may be undefined if not provided. All assertion methods provide +// both the actual and expected values to the assertion error for +// display purposes. + +function fail(actual, expected, message, operator, stackStartFunction) { + throw new assert.AssertionError({ + message: message, + actual: actual, + expected: expected, + operator: operator, + stackStartFunction: stackStartFunction + }); +} + +// EXTENSION! allows for well behaved errors defined elsewhere. +assert.fail = fail; + +// 4. Pure assertion tests whether a value is truthy, as determined +// by !!guard. +// assert.ok(guard, message_opt); +// This statement is equivalent to assert.equal(true, !!guard, +// message_opt);. To test strictly for the value true, use +// assert.strictEqual(true, guard, message_opt);. + +function ok(value, message) { + if (!value) fail(value, true, message, '==', assert.ok); +} +assert.ok = ok; + +// 5. The equality assertion tests shallow, coercive equality with +// ==. +// assert.equal(actual, expected, message_opt); + +assert.equal = function equal(actual, expected, message) { + if (actual != expected) fail(actual, expected, message, '==', assert.equal); +}; + +// 6. The non-equality assertion tests for whether two objects are not equal +// with != assert.notEqual(actual, expected, message_opt); + +assert.notEqual = function notEqual(actual, expected, message) { + if (actual == expected) { + fail(actual, expected, message, '!=', assert.notEqual); + } +}; + +// 7. The equivalence assertion tests a deep equality relation. +// assert.deepEqual(actual, expected, message_opt); + +assert.deepEqual = function deepEqual(actual, expected, message) { + if (!_deepEqual(actual, expected, false)) { + fail(actual, expected, message, 'deepEqual', assert.deepEqual); + } +}; + +assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) { + if (!_deepEqual(actual, expected, true)) { + fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual); + } +}; + +function _deepEqual(actual, expected, strict, memos) { + // 7.1. All identical values are equivalent, as determined by ===. + if (actual === expected) { + return true; + } else if (isBuffer(actual) && isBuffer(expected)) { + return compare(actual, expected) === 0; + + // 7.2. If the expected value is a Date object, the actual value is + // equivalent if it is also a Date object that refers to the same time. + } else if (util.isDate(actual) && util.isDate(expected)) { + return actual.getTime() === expected.getTime(); + + // 7.3 If the expected value is a RegExp object, the actual value is + // equivalent if it is also a RegExp object with the same source and + // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`). + } else if (util.isRegExp(actual) && util.isRegExp(expected)) { + return actual.source === expected.source && + actual.global === expected.global && + actual.multiline === expected.multiline && + actual.lastIndex === expected.lastIndex && + actual.ignoreCase === expected.ignoreCase; + + // 7.4. Other pairs that do not both pass typeof value == 'object', + // equivalence is determined by ==. + } else if ((actual === null || typeof actual !== 'object') && + (expected === null || typeof expected !== 'object')) { + return strict ? actual === expected : actual == expected; + + // If both values are instances of typed arrays, wrap their underlying + // ArrayBuffers in a Buffer each to increase performance + // This optimization requires the arrays to have the same type as checked by + // Object.prototype.toString (aka pToString). Never perform binary + // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their + // bit patterns are not identical. + } else if (isView(actual) && isView(expected) && + pToString(actual) === pToString(expected) && + !(actual instanceof Float32Array || + actual instanceof Float64Array)) { + return compare(new Uint8Array(actual.buffer), + new Uint8Array(expected.buffer)) === 0; + + // 7.5 For all other Object pairs, including Array objects, equivalence is + // determined by having the same number of owned properties (as verified + // with Object.prototype.hasOwnProperty.call), the same set of keys + // (although not necessarily the same order), equivalent values for every + // corresponding key, and an identical 'prototype' property. Note: this + // accounts for both named and indexed properties on Arrays. + } else if (isBuffer(actual) !== isBuffer(expected)) { + return false; + } else { + memos = memos || {actual: [], expected: []}; + + var actualIndex = memos.actual.indexOf(actual); + if (actualIndex !== -1) { + if (actualIndex === memos.expected.indexOf(expected)) { + return true; + } + } + + memos.actual.push(actual); + memos.expected.push(expected); + + return objEquiv(actual, expected, strict, memos); + } +} + +function isArguments(object) { + return Object.prototype.toString.call(object) == '[object Arguments]'; +} + +function objEquiv(a, b, strict, actualVisitedObjects) { + if (a === null || a === undefined || b === null || b === undefined) + return false; + // if one is a primitive, the other must be same + if (util.isPrimitive(a) || util.isPrimitive(b)) + return a === b; + if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b)) + return false; + var aIsArgs = isArguments(a); + var bIsArgs = isArguments(b); + if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs)) + return false; + if (aIsArgs) { + a = pSlice.call(a); + b = pSlice.call(b); + return _deepEqual(a, b, strict); + } + var ka = objectKeys(a); + var kb = objectKeys(b); + var key, i; + // having the same number of owned properties (keys incorporates + // hasOwnProperty) + if (ka.length !== kb.length) + return false; + //the same set of keys (although not necessarily the same order), + ka.sort(); + kb.sort(); + //~~~cheap key test + for (i = ka.length - 1; i >= 0; i--) { + if (ka[i] !== kb[i]) + return false; + } + //equivalent values for every corresponding key, and + //~~~possibly expensive deep test + for (i = ka.length - 1; i >= 0; i--) { + key = ka[i]; + if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects)) + return false; + } + return true; +} + +// 8. The non-equivalence assertion tests for any deep inequality. +// assert.notDeepEqual(actual, expected, message_opt); + +assert.notDeepEqual = function notDeepEqual(actual, expected, message) { + if (_deepEqual(actual, expected, false)) { + fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual); + } +}; + +assert.notDeepStrictEqual = notDeepStrictEqual; +function notDeepStrictEqual(actual, expected, message) { + if (_deepEqual(actual, expected, true)) { + fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual); + } +} + + +// 9. The strict equality assertion tests strict equality, as determined by ===. +// assert.strictEqual(actual, expected, message_opt); + +assert.strictEqual = function strictEqual(actual, expected, message) { + if (actual !== expected) { + fail(actual, expected, message, '===', assert.strictEqual); + } +}; + +// 10. The strict non-equality assertion tests for strict inequality, as +// determined by !==. assert.notStrictEqual(actual, expected, message_opt); + +assert.notStrictEqual = function notStrictEqual(actual, expected, message) { + if (actual === expected) { + fail(actual, expected, message, '!==', assert.notStrictEqual); + } +}; + +function expectedException(actual, expected) { + if (!actual || !expected) { + return false; + } + + if (Object.prototype.toString.call(expected) == '[object RegExp]') { + return expected.test(actual); + } + + try { + if (actual instanceof expected) { + return true; + } + } catch (e) { + // Ignore. The instanceof check doesn't work for arrow functions. + } + + if (Error.isPrototypeOf(expected)) { + return false; + } + + return expected.call({}, actual) === true; +} + +function _tryBlock(block) { + var error; + try { + block(); + } catch (e) { + error = e; + } + return error; +} + +function _throws(shouldThrow, block, expected, message) { + var actual; + + if (typeof block !== 'function') { + throw new TypeError('"block" argument must be a function'); + } + + if (typeof expected === 'string') { + message = expected; + expected = null; + } + + actual = _tryBlock(block); + + message = (expected && expected.name ? ' (' + expected.name + ').' : '.') + + (message ? ' ' + message : '.'); + + if (shouldThrow && !actual) { + fail(actual, expected, 'Missing expected exception' + message); + } + + var userProvidedMessage = typeof message === 'string'; + var isUnwantedException = !shouldThrow && util.isError(actual); + var isUnexpectedException = !shouldThrow && actual && !expected; + + if ((isUnwantedException && + userProvidedMessage && + expectedException(actual, expected)) || + isUnexpectedException) { + fail(actual, expected, 'Got unwanted exception' + message); + } + + if ((shouldThrow && actual && expected && + !expectedException(actual, expected)) || (!shouldThrow && actual)) { + throw actual; + } +} + +// 11. Expected to throw an error: +// assert.throws(block, Error_opt, message_opt); + +assert.throws = function(block, /*optional*/error, /*optional*/message) { + _throws(true, block, error, message); +}; + +// EXTENSION! This is annoying to write outside this module. +assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) { + _throws(false, block, error, message); +}; + +assert.ifError = function(err) { if (err) throw err; }; + +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) { + if (hasOwn.call(obj, key)) keys.push(key); + } + return keys; +}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"util/":38}],36:[function(require,module,exports){ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} + +},{}],37:[function(require,module,exports){ +module.exports = function isBuffer(arg) { + return arg && typeof arg === 'object' + && typeof arg.copy === 'function' + && typeof arg.fill === 'function' + && typeof arg.readUInt8 === 'function'; +} +},{}],38:[function(require,module,exports){ +(function (process,global){ +// Copyright Joyent, Inc. and other Node 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. + +var formatRegExp = /%[sdj%]/g; +exports.format = function(f) { + if (!isString(f)) { + var objects = []; + for (var i = 0; i < arguments.length; i++) { + objects.push(inspect(arguments[i])); + } + return objects.join(' '); + } + + var i = 1; + var args = arguments; + var len = args.length; + var str = String(f).replace(formatRegExp, function(x) { + if (x === '%%') return '%'; + if (i >= len) return x; + switch (x) { + case '%s': return String(args[i++]); + case '%d': return Number(args[i++]); + case '%j': + try { + return JSON.stringify(args[i++]); + } catch (_) { + return '[Circular]'; + } + default: + return x; + } + }); + for (var x = args[i]; i < len; x = args[++i]) { + if (isNull(x) || !isObject(x)) { + str += ' ' + x; + } else { + str += ' ' + inspect(x); + } + } + return str; +}; + + +// Mark that a method should not be used. +// Returns a modified function which warns once by default. +// If --no-deprecation is set, then it is a no-op. +exports.deprecate = function(fn, msg) { + // Allow for deprecating things in the process of starting up. + if (isUndefined(global.process)) { + return function() { + return exports.deprecate(fn, msg).apply(this, arguments); + }; + } + + if (process.noDeprecation === true) { + return fn; + } + + var warned = false; + function deprecated() { + if (!warned) { + if (process.throwDeprecation) { + throw new Error(msg); + } else if (process.traceDeprecation) { + console.trace(msg); + } else { + console.error(msg); + } + warned = true; + } + return fn.apply(this, arguments); + } + + return deprecated; +}; + + +var debugs = {}; +var debugEnviron; +exports.debuglog = function(set) { + if (isUndefined(debugEnviron)) + debugEnviron = process.env.NODE_DEBUG || ''; + set = set.toUpperCase(); + if (!debugs[set]) { + if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { + var pid = process.pid; + debugs[set] = function() { + var msg = exports.format.apply(exports, arguments); + console.error('%s %d: %s', set, pid, msg); + }; + } else { + debugs[set] = function() {}; + } + } + return debugs[set]; +}; + + +/** + * Echos the value of a value. Trys to print the value out + * in the best way possible given the different types. + * + * @param {Object} obj The object to print out. + * @param {Object} opts Optional options object that alters the output. + */ +/* legacy: obj, showHidden, depth, colors*/ +function inspect(obj, opts) { + // default options + var ctx = { + seen: [], + stylize: stylizeNoColor + }; + // legacy... + if (arguments.length >= 3) ctx.depth = arguments[2]; + if (arguments.length >= 4) ctx.colors = arguments[3]; + if (isBoolean(opts)) { + // legacy... + ctx.showHidden = opts; + } else if (opts) { + // got an "options" object + exports._extend(ctx, opts); + } + // set default options + if (isUndefined(ctx.showHidden)) ctx.showHidden = false; + if (isUndefined(ctx.depth)) ctx.depth = 2; + if (isUndefined(ctx.colors)) ctx.colors = false; + if (isUndefined(ctx.customInspect)) ctx.customInspect = true; + if (ctx.colors) ctx.stylize = stylizeWithColor; + return formatValue(ctx, obj, ctx.depth); +} +exports.inspect = inspect; + + +// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics +inspect.colors = { + 'bold' : [1, 22], + 'italic' : [3, 23], + 'underline' : [4, 24], + 'inverse' : [7, 27], + 'white' : [37, 39], + 'grey' : [90, 39], + 'black' : [30, 39], + 'blue' : [34, 39], + 'cyan' : [36, 39], + 'green' : [32, 39], + 'magenta' : [35, 39], + 'red' : [31, 39], + 'yellow' : [33, 39] +}; + +// Don't use 'blue' not visible on cmd.exe +inspect.styles = { + 'special': 'cyan', + 'number': 'yellow', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' +}; + + +function stylizeWithColor(str, styleType) { + var style = inspect.styles[styleType]; + + if (style) { + return '\u001b[' + inspect.colors[style][0] + 'm' + str + + '\u001b[' + inspect.colors[style][1] + 'm'; + } else { + return str; + } +} + + +function stylizeNoColor(str, styleType) { + return str; +} + + +function arrayToHash(array) { + var hash = {}; + + array.forEach(function(val, idx) { + hash[val] = true; + }); + + return hash; +} + + +function formatValue(ctx, value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (ctx.customInspect && + value && + isFunction(value.inspect) && + // Filter out the util module, it's inspect function is special + value.inspect !== exports.inspect && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + var ret = value.inspect(recurseTimes, ctx); + if (!isString(ret)) { + ret = formatValue(ctx, ret, recurseTimes); + } + return ret; + } + + // Primitive types cannot have properties + var primitive = formatPrimitive(ctx, value); + if (primitive) { + return primitive; + } + + // Look up the keys of the object. + var keys = Object.keys(value); + var visibleKeys = arrayToHash(keys); + + if (ctx.showHidden) { + keys = Object.getOwnPropertyNames(value); + } + + // IE doesn't make error fields non-enumerable + // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx + if (isError(value) + && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { + return formatError(value); + } + + // Some type of object without properties can be shortcutted. + if (keys.length === 0) { + if (isFunction(value)) { + var name = value.name ? ': ' + value.name : ''; + return ctx.stylize('[Function' + name + ']', 'special'); + } + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } + if (isDate(value)) { + return ctx.stylize(Date.prototype.toString.call(value), 'date'); + } + if (isError(value)) { + return formatError(value); + } + } + + var base = '', array = false, braces = ['{', '}']; + + // Make Array say that they are Array + if (isArray(value)) { + array = true; + braces = ['[', ']']; + } + + // Make functions say that they are functions + if (isFunction(value)) { + var n = value.name ? ': ' + value.name : ''; + base = ' [Function' + n + ']'; + } + + // Make RegExps say that they are RegExps + if (isRegExp(value)) { + base = ' ' + RegExp.prototype.toString.call(value); + } + + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + Date.prototype.toUTCString.call(value); + } + + // Make error with message first say the error + if (isError(value)) { + base = ' ' + formatError(value); + } + + if (keys.length === 0 && (!array || value.length == 0)) { + return braces[0] + base + braces[1]; + } + + if (recurseTimes < 0) { + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } else { + return ctx.stylize('[Object]', 'special'); + } + } + + ctx.seen.push(value); + + var output; + if (array) { + output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); + } else { + output = keys.map(function(key) { + return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); + }); + } + + ctx.seen.pop(); + + return reduceToSingleString(output, base, braces); +} + + +function formatPrimitive(ctx, value) { + if (isUndefined(value)) + return ctx.stylize('undefined', 'undefined'); + if (isString(value)) { + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') + .replace(/'/g, "\\'") + .replace(/\\"/g, '"') + '\''; + return ctx.stylize(simple, 'string'); + } + if (isNumber(value)) + return ctx.stylize('' + value, 'number'); + if (isBoolean(value)) + return ctx.stylize('' + value, 'boolean'); + // For some reason typeof null is "object", so special case here. + if (isNull(value)) + return ctx.stylize('null', 'null'); +} + + +function formatError(value) { + return '[' + Error.prototype.toString.call(value) + ']'; +} + + +function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { + var output = []; + for (var i = 0, l = value.length; i < l; ++i) { + if (hasOwnProperty(value, String(i))) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + String(i), true)); + } else { + output.push(''); + } + } + keys.forEach(function(key) { + if (!key.match(/^\d+$/)) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + key, true)); + } + }); + return output; +} + + +function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { + var name, str, desc; + desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; + if (desc.get) { + if (desc.set) { + str = ctx.stylize('[Getter/Setter]', 'special'); + } else { + str = ctx.stylize('[Getter]', 'special'); + } + } else { + if (desc.set) { + str = ctx.stylize('[Setter]', 'special'); + } + } + if (!hasOwnProperty(visibleKeys, key)) { + name = '[' + key + ']'; + } + if (!str) { + if (ctx.seen.indexOf(desc.value) < 0) { + if (isNull(recurseTimes)) { + str = formatValue(ctx, desc.value, null); + } else { + str = formatValue(ctx, desc.value, recurseTimes - 1); + } + if (str.indexOf('\n') > -1) { + if (array) { + str = str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n').substr(2); + } else { + str = '\n' + str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = ctx.stylize('[Circular]', 'special'); + } + } + if (isUndefined(name)) { + if (array && key.match(/^\d+$/)) { + return str; + } + name = JSON.stringify('' + key); + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.substr(1, name.length - 2); + name = ctx.stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'") + .replace(/\\"/g, '"') + .replace(/(^"|"$)/g, "'"); + name = ctx.stylize(name, 'string'); + } + } + + return name + ': ' + str; +} + + +function reduceToSingleString(output, base, braces) { + var numLinesEst = 0; + var length = output.reduce(function(prev, cur) { + numLinesEst++; + if (cur.indexOf('\n') >= 0) numLinesEst++; + return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; + }, 0); + + if (length > 60) { + return braces[0] + + (base === '' ? '' : base + '\n ') + + ' ' + + output.join(',\n ') + + ' ' + + braces[1]; + } + + return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; +} + + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. +function isArray(ar) { + return Array.isArray(ar); +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return isObject(re) && objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return isObject(d) && objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; + +function isError(e) { + return isObject(e) && + (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = require('./support/isBuffer'); + +function objectToString(o) { + return Object.prototype.toString.call(o); +} + + +function pad(n) { + return n < 10 ? '0' + n.toString(10) : n.toString(10); +} + + +var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', + 'Oct', 'Nov', 'Dec']; + +// 26 Feb 16:19:34 +function timestamp() { + var d = new Date(); + var time = [pad(d.getHours()), + pad(d.getMinutes()), + pad(d.getSeconds())].join(':'); + return [d.getDate(), months[d.getMonth()], time].join(' '); +} + + +// log is just a thin wrapper to console.log that prepends a timestamp +exports.log = function() { + console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); +}; + + +/** + * Inherit the prototype methods from one constructor into another. + * + * The Function.prototype.inherits from lang.js rewritten as a standalone + * function (not on Function.prototype). NOTE: If this file is to be loaded + * during bootstrapping this function needs to be rewritten using some native + * functions as prototype setup using normal JavaScript does not work as + * expected during bootstrapping (see mirror.js in r114903). + * + * @param {function} ctor Constructor function which needs to inherit the + * prototype. + * @param {function} superCtor Constructor function to inherit prototype from. + */ +exports.inherits = require('inherits'); + +exports._extend = function(origin, add) { + // Don't do anything if add isn't an object + if (!add || !isObject(add)) return origin; + + var keys = Object.keys(add); + var i = keys.length; + while (i--) { + origin[keys[i]] = add[keys[i]]; + } + return origin; +}; + +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"./support/isBuffer":37,"_process":109,"inherits":36}],39:[function(require,module,exports){ +'use strict'; + +module.exports = require('./lib/AsyncEventEmitter'); + +},{"./lib/AsyncEventEmitter":40}],40:[function(require,module,exports){ +'use strict'; + +var EventEmitter = require('events').EventEmitter, + util = require('util'), + eachSeries = require('async/eachSeries'), + AsyncEventEmitter; + + +module.exports = exports = AsyncEventEmitter = function AsyncEventEmitter () { + EventEmitter.call(this); +}; + +util.inherits(AsyncEventEmitter, EventEmitter); + + +/* Public methods +============================================================================= */ + +AsyncEventEmitter.prototype.emit = function(event, data, callback) { + var self = this, + listeners = self._events[event] || []; + + // Optional data argument + if(!callback && typeof data === 'function') { + callback = data; + data = undefined; + } + + // Special treatment of internal newListener and removeListener events + if(event === 'newListener' || event === 'removeListener') { + data = { + event: data, + fn: callback + }; + + callback = undefined; + } + + // A single listener is just a function not an array... + listeners = Array.isArray(listeners) ? listeners : [listeners]; + + eachSeries(listeners.slice(), function (fn, next) { + var err; + + // Support synchronous functions + if(fn.length < 2) { + try { + fn.call(self, data); + } + catch (e) { + err = e; + } + + return next(err); + } + + // Async + fn.call(self, data, next); + }, callback); + + return self; +}; + + +AsyncEventEmitter.prototype.once = function (type, listener) { + var self = this, + g; + + if (typeof listener !== 'function') { + throw new TypeError('listener must be a function'); + } + + // Hack to support set arity + if(listener.length >= 2) { + g = function (e, next) { + self.removeListener(type, g); + listener(e, next); + }; + } + else { + g = function (e) { + self.removeListener(type, g); + listener(e); + }; + } + + g.listener = listener; + self.on(type, g); + + return self; +}; + + +AsyncEventEmitter.prototype.first = function(event, listener) { + var listeners = this._events[event] || []; + + // Contract + if(typeof listener !== 'function') { + throw new TypeError('listener must be a function'); + } + + // Listeners are not always an array + if(!Array.isArray(listeners)) { + this._events[event] = listeners = [listeners]; + } + + listeners.unshift(listener); + + return this; +}; + + +AsyncEventEmitter.prototype.at = function(event, index, listener) { + var listeners = this._events[event] || []; + + // Contract + if(typeof listener !== 'function') { + throw new TypeError('listener must be a function'); + } + if(typeof index !== 'number' || index < 0) { + throw new TypeError('index must be a non-negative integer'); + } + + // Listeners are not always an array + if(!Array.isArray(listeners)) { + this._events[event] = listeners = [listeners]; + } + + listeners.splice(index, 0, listener); + + return this; +}; + + +AsyncEventEmitter.prototype.before = function(event, target, listener) { + return this._beforeOrAfter(event, target, listener); +}; + + +AsyncEventEmitter.prototype.after = function(event, target, listener) { + return this._beforeOrAfter(event, target, listener, 'after'); +}; + + +/* Private methods +============================================================================= */ + +AsyncEventEmitter.prototype._beforeOrAfter = function(event, target, listener, beforeOrAfter) { + var listeners = this._events[event] || [], + i, index, + add = beforeOrAfter === 'after' ? 1 : 0; + + // Contract + if(typeof listener !== 'function') { + throw new TypeError('listener must be a function'); + } + if(typeof target !== 'function') { + throw new TypeError('target must be a function'); + } + + // Listeners are not always an array + if(!Array.isArray(listeners)) { + this._events[event] = listeners = [listeners]; + } + + index = listeners.length; + + for(i = listeners.length; i--;) { + if(listeners[i] === target) { + index = i + add; + break; + } + } + + listeners.splice(index, 0, listener); + + return this; +}; + +},{"async/eachSeries":44,"events":708,"util":1439}],41:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = asyncify; + +var _isObject = require('lodash/isObject'); + +var _isObject2 = _interopRequireDefault(_isObject); + +var _initialParams = require('./internal/initialParams'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _setImmediate = require('./internal/setImmediate'); + +var _setImmediate2 = _interopRequireDefault(_setImmediate); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Take a sync function and make it async, passing its return value to a + * callback. This is useful for plugging sync functions into a waterfall, + * series, or other async functions. Any arguments passed to the generated + * function will be passed to the wrapped function (except for the final + * callback argument). Errors thrown will be passed to the callback. + * + * If the function passed to `asyncify` returns a Promise, that promises's + * resolved/rejected state will be used to call the callback, rather than simply + * the synchronous return value. + * + * This also means you can asyncify ES2017 `async` functions. + * + * @name asyncify + * @static + * @memberOf module:Utils + * @method + * @alias wrapSync + * @category Util + * @param {Function} func - The synchronous function, or Promise-returning + * function to convert to an {@link AsyncFunction}. + * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be + * invoked with `(args..., callback)`. + * @example + * + * // passing a regular synchronous function + * async.waterfall([ + * async.apply(fs.readFile, filename, "utf8"), + * async.asyncify(JSON.parse), + * function (data, next) { + * // data is the result of parsing the text. + * // If there was a parsing error, it would have been caught. + * } + * ], callback); + * + * // passing a function returning a promise + * async.waterfall([ + * async.apply(fs.readFile, filename, "utf8"), + * async.asyncify(function (contents) { + * return db.model.create(contents); + * }), + * function (model, next) { + * // `model` is the instantiated model object. + * // If there was an error, this function would be skipped. + * } + * ], callback); + * + * // es2017 example, though `asyncify` is not needed if your JS environment + * // supports async functions out of the box + * var q = async.queue(async.asyncify(async function(file) { + * var intermediateStep = await processFile(file); + * return await somePromise(intermediateStep) + * })); + * + * q.push(files); + */ +function asyncify(func) { + return (0, _initialParams2.default)(function (args, callback) { + var result; + try { + result = func.apply(this, args); + } catch (e) { + return callback(e); + } + // if result is Promise object + if ((0, _isObject2.default)(result) && typeof result.then === 'function') { + result.then(function (value) { + invokeCallback(callback, null, value); + }, function (err) { + invokeCallback(callback, err.message ? err : new Error(err)); + }); + } else { + callback(null, result); + } + }); +} + +function invokeCallback(callback, error, value) { + try { + callback(error, value); + } catch (e) { + (0, _setImmediate2.default)(rethrow, e); + } +} + +function rethrow(error) { + throw error; +} +module.exports = exports['default']; +},{"./internal/initialParams":49,"./internal/setImmediate":53,"lodash/isObject":926}],42:[function(require,module,exports){ +(function (process,global,setImmediate){ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (factory((global.async = global.async || {}))); +}(this, (function (exports) { 'use strict'; + +function slice(arrayLike, start) { + start = start|0; + var newLen = Math.max(arrayLike.length - start, 0); + var newArr = Array(newLen); + for(var idx = 0; idx < newLen; idx++) { + newArr[idx] = arrayLike[start + idx]; + } + return newArr; +} + +/** + * Creates a continuation function with some arguments already applied. + * + * Useful as a shorthand when combined with other control flow functions. Any + * arguments passed to the returned function are added to the arguments + * originally passed to apply. + * + * @name apply + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {Function} fn - The function you want to eventually apply all + * arguments to. Invokes with (arguments...). + * @param {...*} arguments... - Any number of arguments to automatically apply + * when the continuation is called. + * @returns {Function} the partially-applied function + * @example + * + * // using apply + * async.parallel([ + * async.apply(fs.writeFile, 'testfile1', 'test1'), + * async.apply(fs.writeFile, 'testfile2', 'test2') + * ]); + * + * + * // the same process without using apply + * async.parallel([ + * function(callback) { + * fs.writeFile('testfile1', 'test1', callback); + * }, + * function(callback) { + * fs.writeFile('testfile2', 'test2', callback); + * } + * ]); + * + * // It's possible to pass any number of additional arguments when calling the + * // continuation: + * + * node> var fn = async.apply(sys.puts, 'one'); + * node> fn('two', 'three'); + * one + * two + * three + */ +var apply = function(fn/*, ...args*/) { + var args = slice(arguments, 1); + return function(/*callArgs*/) { + var callArgs = slice(arguments); + return fn.apply(null, args.concat(callArgs)); + }; +}; + +var initialParams = function (fn) { + return function (/*...args, callback*/) { + var args = slice(arguments); + var callback = args.pop(); + fn.call(this, args, callback); + }; +}; + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +var hasSetImmediate = typeof setImmediate === 'function' && setImmediate; +var hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function'; + +function fallback(fn) { + setTimeout(fn, 0); +} + +function wrap(defer) { + return function (fn/*, ...args*/) { + var args = slice(arguments, 1); + defer(function () { + fn.apply(null, args); + }); + }; +} + +var _defer; + +if (hasSetImmediate) { + _defer = setImmediate; +} else if (hasNextTick) { + _defer = process.nextTick; +} else { + _defer = fallback; +} + +var setImmediate$1 = wrap(_defer); + +/** + * Take a sync function and make it async, passing its return value to a + * callback. This is useful for plugging sync functions into a waterfall, + * series, or other async functions. Any arguments passed to the generated + * function will be passed to the wrapped function (except for the final + * callback argument). Errors thrown will be passed to the callback. + * + * If the function passed to `asyncify` returns a Promise, that promises's + * resolved/rejected state will be used to call the callback, rather than simply + * the synchronous return value. + * + * This also means you can asyncify ES2017 `async` functions. + * + * @name asyncify + * @static + * @memberOf module:Utils + * @method + * @alias wrapSync + * @category Util + * @param {Function} func - The synchronous function, or Promise-returning + * function to convert to an {@link AsyncFunction}. + * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be + * invoked with `(args..., callback)`. + * @example + * + * // passing a regular synchronous function + * async.waterfall([ + * async.apply(fs.readFile, filename, "utf8"), + * async.asyncify(JSON.parse), + * function (data, next) { + * // data is the result of parsing the text. + * // If there was a parsing error, it would have been caught. + * } + * ], callback); + * + * // passing a function returning a promise + * async.waterfall([ + * async.apply(fs.readFile, filename, "utf8"), + * async.asyncify(function (contents) { + * return db.model.create(contents); + * }), + * function (model, next) { + * // `model` is the instantiated model object. + * // If there was an error, this function would be skipped. + * } + * ], callback); + * + * // es2017 example, though `asyncify` is not needed if your JS environment + * // supports async functions out of the box + * var q = async.queue(async.asyncify(async function(file) { + * var intermediateStep = await processFile(file); + * return await somePromise(intermediateStep) + * })); + * + * q.push(files); + */ +function asyncify(func) { + return initialParams(function (args, callback) { + var result; + try { + result = func.apply(this, args); + } catch (e) { + return callback(e); + } + // if result is Promise object + if (isObject(result) && typeof result.then === 'function') { + result.then(function(value) { + invokeCallback(callback, null, value); + }, function(err) { + invokeCallback(callback, err.message ? err : new Error(err)); + }); + } else { + callback(null, result); + } + }); +} + +function invokeCallback(callback, error, value) { + try { + callback(error, value); + } catch (e) { + setImmediate$1(rethrow, e); + } +} + +function rethrow(error) { + throw error; +} + +var supportsSymbol = typeof Symbol === 'function'; + +function isAsync(fn) { + return supportsSymbol && fn[Symbol.toStringTag] === 'AsyncFunction'; +} + +function wrapAsync(asyncFn) { + return isAsync(asyncFn) ? asyncify(asyncFn) : asyncFn; +} + +function applyEach$1(eachfn) { + return function(fns/*, ...args*/) { + var args = slice(arguments, 1); + var go = initialParams(function(args, callback) { + var that = this; + return eachfn(fns, function (fn, cb) { + wrapAsync(fn).apply(that, args.concat(cb)); + }, callback); + }); + if (args.length) { + return go.apply(this, args); + } + else { + return go; + } + }; +} + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** Built-in value references. */ +var Symbol$1 = root.Symbol; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** Built-in value references. */ +var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined; + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag$1), + tag = value[symToStringTag$1]; + + try { + value[symToStringTag$1] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag$1] = tag; + } else { + delete value[symToStringTag$1]; + } + } + return result; +} + +/** Used for built-in method references. */ +var objectProto$1 = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString$1 = objectProto$1.toString; + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString$1.call(value); +} + +/** `Object#toString` result references. */ +var nullTag = '[object Null]'; +var undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); +} + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]'; +var funcTag = '[object Function]'; +var genTag = '[object GeneratorFunction]'; +var proxyTag = '[object Proxy]'; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} + +// A temporary value used to identify if the loop should be broken. +// See #1064, #1293 +var breakLoop = {}; + +/** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ +function noop() { + // No operation performed. +} + +function once(fn) { + return function () { + if (fn === null) return; + var callFn = fn; + fn = null; + callFn.apply(this, arguments); + }; +} + +var iteratorSymbol = typeof Symbol === 'function' && Symbol.iterator; + +var getIterator = function (coll) { + return iteratorSymbol && coll[iteratorSymbol] && coll[iteratorSymbol](); +}; + +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]'; + +/** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ +function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; +} + +/** Used for built-in method references. */ +var objectProto$3 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$2 = objectProto$3.hasOwnProperty; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto$3.propertyIsEnumerable; + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty$2.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); +}; + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ +function stubFalse() { + return false; +} + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? root.Buffer : undefined; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = nativeIsBuffer || stubFalse; + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER$1 = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER$1 : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +/** `Object#toString` result references. */ +var argsTag$1 = '[object Arguments]'; +var arrayTag = '[object Array]'; +var boolTag = '[object Boolean]'; +var dateTag = '[object Date]'; +var errorTag = '[object Error]'; +var funcTag$1 = '[object Function]'; +var mapTag = '[object Map]'; +var numberTag = '[object Number]'; +var objectTag = '[object Object]'; +var regexpTag = '[object RegExp]'; +var setTag = '[object Set]'; +var stringTag = '[object String]'; +var weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]'; +var dataViewTag = '[object DataView]'; +var float32Tag = '[object Float32Array]'; +var float64Tag = '[object Float64Array]'; +var int8Tag = '[object Int8Array]'; +var int16Tag = '[object Int16Array]'; +var int32Tag = '[object Int32Array]'; +var uint8Tag = '[object Uint8Array]'; +var uint8ClampedTag = '[object Uint8ClampedArray]'; +var uint16Tag = '[object Uint16Array]'; +var uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag$1] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[funcTag$1] = +typedArrayTags[mapTag] = typedArrayTags[numberTag] = +typedArrayTags[objectTag] = typedArrayTags[regexpTag] = +typedArrayTags[setTag] = typedArrayTags[stringTag] = +typedArrayTags[weakMapTag] = false; + +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +} + +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { + return function(value) { + return func(value); + }; +} + +/** Detect free variable `exports`. */ +var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports$1 && freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule$1 && freeModule$1.require && freeModule$1.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} +}()); + +/* Node.js helper references. */ +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + +/** Used for built-in method references. */ +var objectProto$2 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$1 = objectProto$2.hasOwnProperty; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty$1.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; +} + +/** Used for built-in method references. */ +var objectProto$5 = Object.prototype; + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$5; + + return value === proto; +} + +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = overArg(Object.keys, Object); + +/** Used for built-in method references. */ +var objectProto$4 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$3 = objectProto$4.hasOwnProperty; + +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty$3.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +} + +function createArrayIterator(coll) { + var i = -1; + var len = coll.length; + return function next() { + return ++i < len ? {value: coll[i], key: i} : null; + } +} + +function createES2015Iterator(iterator) { + var i = -1; + return function next() { + var item = iterator.next(); + if (item.done) + return null; + i++; + return {value: item.value, key: i}; + } +} + +function createObjectIterator(obj) { + var okeys = keys(obj); + var i = -1; + var len = okeys.length; + return function next() { + var key = okeys[++i]; + return i < len ? {value: obj[key], key: key} : null; + }; +} + +function iterator(coll) { + if (isArrayLike(coll)) { + return createArrayIterator(coll); + } + + var iterator = getIterator(coll); + return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll); +} + +function onlyOnce(fn) { + return function() { + if (fn === null) throw new Error("Callback was already called."); + var callFn = fn; + fn = null; + callFn.apply(this, arguments); + }; +} + +function _eachOfLimit(limit) { + return function (obj, iteratee, callback) { + callback = once(callback || noop); + if (limit <= 0 || !obj) { + return callback(null); + } + var nextElem = iterator(obj); + var done = false; + var running = 0; + var looping = false; + + function iterateeCallback(err, value) { + running -= 1; + if (err) { + done = true; + callback(err); + } + else if (value === breakLoop || (done && running <= 0)) { + done = true; + return callback(null); + } + else if (!looping) { + replenish(); + } + } + + function replenish () { + looping = true; + while (running < limit && !done) { + var elem = nextElem(); + if (elem === null) { + done = true; + if (running <= 0) { + callback(null); + } + return; + } + running += 1; + iteratee(elem.value, elem.key, onlyOnce(iterateeCallback)); + } + looping = false; + } + + replenish(); + }; +} + +/** + * The same as [`eachOf`]{@link module:Collections.eachOf} but runs a maximum of `limit` async operations at a + * time. + * + * @name eachOfLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.eachOf]{@link module:Collections.eachOf} + * @alias forEachOfLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each + * item in `coll`. The `key` is the item's key, or index in the case of an + * array. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + */ +function eachOfLimit(coll, limit, iteratee, callback) { + _eachOfLimit(limit)(coll, wrapAsync(iteratee), callback); +} + +function doLimit(fn, limit) { + return function (iterable, iteratee, callback) { + return fn(iterable, limit, iteratee, callback); + }; +} + +// eachOf implementation optimized for array-likes +function eachOfArrayLike(coll, iteratee, callback) { + callback = once(callback || noop); + var index = 0, + completed = 0, + length = coll.length; + if (length === 0) { + callback(null); + } + + function iteratorCallback(err, value) { + if (err) { + callback(err); + } else if ((++completed === length) || value === breakLoop) { + callback(null); + } + } + + for (; index < length; index++) { + iteratee(coll[index], index, onlyOnce(iteratorCallback)); + } +} + +// a generic version of eachOf which can handle array, object, and iterator cases. +var eachOfGeneric = doLimit(eachOfLimit, Infinity); + +/** + * Like [`each`]{@link module:Collections.each}, except that it passes the key (or index) as the second argument + * to the iteratee. + * + * @name eachOf + * @static + * @memberOf module:Collections + * @method + * @alias forEachOf + * @category Collection + * @see [async.each]{@link module:Collections.each} + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each + * item in `coll`. + * The `key` is the item's key, or index in the case of an array. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @example + * + * var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"}; + * var configs = {}; + * + * async.forEachOf(obj, function (value, key, callback) { + * fs.readFile(__dirname + value, "utf8", function (err, data) { + * if (err) return callback(err); + * try { + * configs[key] = JSON.parse(data); + * } catch (e) { + * return callback(e); + * } + * callback(); + * }); + * }, function (err) { + * if (err) console.error(err.message); + * // configs is now a map of JSON data + * doSomethingWith(configs); + * }); + */ +var eachOf = function(coll, iteratee, callback) { + var eachOfImplementation = isArrayLike(coll) ? eachOfArrayLike : eachOfGeneric; + eachOfImplementation(coll, wrapAsync(iteratee), callback); +}; + +function doParallel(fn) { + return function (obj, iteratee, callback) { + return fn(eachOf, obj, wrapAsync(iteratee), callback); + }; +} + +function _asyncMap(eachfn, arr, iteratee, callback) { + callback = callback || noop; + arr = arr || []; + var results = []; + var counter = 0; + var _iteratee = wrapAsync(iteratee); + + eachfn(arr, function (value, _, callback) { + var index = counter++; + _iteratee(value, function (err, v) { + results[index] = v; + callback(err); + }); + }, function (err) { + callback(err, results); + }); +} + +/** + * Produces a new collection of values by mapping each value in `coll` through + * the `iteratee` function. The `iteratee` is called with an item from `coll` + * and a callback for when it has finished processing. Each of these callback + * takes 2 arguments: an `error`, and the transformed item from `coll`. If + * `iteratee` passes an error to its callback, the main `callback` (for the + * `map` function) is immediately called with the error. + * + * Note, that since this function applies the `iteratee` to each item in + * parallel, there is no guarantee that the `iteratee` functions will complete + * in order. However, the results array will be in the same order as the + * original `coll`. + * + * If `map` is passed an Object, the results will be an Array. The results + * will roughly be in the order of the original Objects' keys (but this can + * vary across JavaScript engines). + * + * @name map + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an Array of the + * transformed items from the `coll`. Invoked with (err, results). + * @example + * + * async.map(['file1','file2','file3'], fs.stat, function(err, results) { + * // results is now an array of stats for each file + * }); + */ +var map = doParallel(_asyncMap); + +/** + * Applies the provided arguments to each function in the array, calling + * `callback` after all functions have completed. If you only provide the first + * argument, `fns`, then it will return a function which lets you pass in the + * arguments as if it were a single function call. If more arguments are + * provided, `callback` is required while `args` is still optional. + * + * @name applyEach + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|Object} fns - A collection of {@link AsyncFunction}s + * to all call with the same arguments + * @param {...*} [args] - any number of separate arguments to pass to the + * function. + * @param {Function} [callback] - the final argument should be the callback, + * called when all functions have completed processing. + * @returns {Function} - If only the first argument, `fns`, is provided, it will + * return a function which lets you pass in the arguments as if it were a single + * function call. The signature is `(..args, callback)`. If invoked with any + * arguments, `callback` is required. + * @example + * + * async.applyEach([enableSearch, updateSchema], 'bucket', callback); + * + * // partial application example: + * async.each( + * buckets, + * async.applyEach([enableSearch, updateSchema]), + * callback + * ); + */ +var applyEach = applyEach$1(map); + +function doParallelLimit(fn) { + return function (obj, limit, iteratee, callback) { + return fn(_eachOfLimit(limit), obj, wrapAsync(iteratee), callback); + }; +} + +/** + * The same as [`map`]{@link module:Collections.map} but runs a maximum of `limit` async operations at a time. + * + * @name mapLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.map]{@link module:Collections.map} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an array of the + * transformed items from the `coll`. Invoked with (err, results). + */ +var mapLimit = doParallelLimit(_asyncMap); + +/** + * The same as [`map`]{@link module:Collections.map} but runs only a single async operation at a time. + * + * @name mapSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.map]{@link module:Collections.map} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an array of the + * transformed items from the `coll`. Invoked with (err, results). + */ +var mapSeries = doLimit(mapLimit, 1); + +/** + * The same as [`applyEach`]{@link module:ControlFlow.applyEach} but runs only a single async operation at a time. + * + * @name applyEachSeries + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.applyEach]{@link module:ControlFlow.applyEach} + * @category Control Flow + * @param {Array|Iterable|Object} fns - A collection of {@link AsyncFunction}s to all + * call with the same arguments + * @param {...*} [args] - any number of separate arguments to pass to the + * function. + * @param {Function} [callback] - the final argument should be the callback, + * called when all functions have completed processing. + * @returns {Function} - If only the first argument is provided, it will return + * a function which lets you pass in the arguments as if it were a single + * function call. + */ +var applyEachSeries = applyEach$1(mapSeries); + +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +/** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = createBaseFor(); + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); +} + +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + return value === value + ? strictIndexOf(array, value, fromIndex) + : baseFindIndex(array, baseIsNaN, fromIndex); +} + +/** + * Determines the best order for running the {@link AsyncFunction}s in `tasks`, based on + * their requirements. Each function can optionally depend on other functions + * being completed first, and each function is run as soon as its requirements + * are satisfied. + * + * If any of the {@link AsyncFunction}s pass an error to their callback, the `auto` sequence + * will stop. Further tasks will not execute (so any other functions depending + * on it will not run), and the main `callback` is immediately called with the + * error. + * + * {@link AsyncFunction}s also receive an object containing the results of functions which + * have completed so far as the first argument, if they have dependencies. If a + * task function has no dependencies, it will only be passed a callback. + * + * @name auto + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Object} tasks - An object. Each of its properties is either a + * function or an array of requirements, with the {@link AsyncFunction} itself the last item + * in the array. The object's key of a property serves as the name of the task + * defined by that property, i.e. can be used when specifying requirements for + * other tasks. The function receives one or two arguments: + * * a `results` object, containing the results of the previously executed + * functions, only passed if the task has any dependencies, + * * a `callback(err, result)` function, which must be called when finished, + * passing an `error` (which can be `null`) and the result of the function's + * execution. + * @param {number} [concurrency=Infinity] - An optional `integer` for + * determining the maximum number of tasks that can be run in parallel. By + * default, as many as possible. + * @param {Function} [callback] - An optional callback which is called when all + * the tasks have been completed. It receives the `err` argument if any `tasks` + * pass an error to their callback. Results are always returned; however, if an + * error occurs, no further `tasks` will be performed, and the results object + * will only contain partial results. Invoked with (err, results). + * @returns undefined + * @example + * + * async.auto({ + * // this function will just be passed a callback + * readData: async.apply(fs.readFile, 'data.txt', 'utf-8'), + * showData: ['readData', function(results, cb) { + * // results.readData is the file's contents + * // ... + * }] + * }, callback); + * + * async.auto({ + * get_data: function(callback) { + * console.log('in get_data'); + * // async code to get some data + * callback(null, 'data', 'converted to array'); + * }, + * make_folder: function(callback) { + * console.log('in make_folder'); + * // async code to create a directory to store a file in + * // this is run at the same time as getting the data + * callback(null, 'folder'); + * }, + * write_file: ['get_data', 'make_folder', function(results, callback) { + * console.log('in write_file', JSON.stringify(results)); + * // once there is some data and the directory exists, + * // write the data to a file in the directory + * callback(null, 'filename'); + * }], + * email_link: ['write_file', function(results, callback) { + * console.log('in email_link', JSON.stringify(results)); + * // once the file is written let's email a link to it... + * // results.write_file contains the filename returned by write_file. + * callback(null, {'file':results.write_file, 'email':'user@example.com'}); + * }] + * }, function(err, results) { + * console.log('err = ', err); + * console.log('results = ', results); + * }); + */ +var auto = function (tasks, concurrency, callback) { + if (typeof concurrency === 'function') { + // concurrency is optional, shift the args. + callback = concurrency; + concurrency = null; + } + callback = once(callback || noop); + var keys$$1 = keys(tasks); + var numTasks = keys$$1.length; + if (!numTasks) { + return callback(null); + } + if (!concurrency) { + concurrency = numTasks; + } + + var results = {}; + var runningTasks = 0; + var hasError = false; + + var listeners = Object.create(null); + + var readyTasks = []; + + // for cycle detection: + var readyToCheck = []; // tasks that have been identified as reachable + // without the possibility of returning to an ancestor task + var uncheckedDependencies = {}; + + baseForOwn(tasks, function (task, key) { + if (!isArray(task)) { + // no dependencies + enqueueTask(key, [task]); + readyToCheck.push(key); + return; + } + + var dependencies = task.slice(0, task.length - 1); + var remainingDependencies = dependencies.length; + if (remainingDependencies === 0) { + enqueueTask(key, task); + readyToCheck.push(key); + return; + } + uncheckedDependencies[key] = remainingDependencies; + + arrayEach(dependencies, function (dependencyName) { + if (!tasks[dependencyName]) { + throw new Error('async.auto task `' + key + + '` has a non-existent dependency `' + + dependencyName + '` in ' + + dependencies.join(', ')); + } + addListener(dependencyName, function () { + remainingDependencies--; + if (remainingDependencies === 0) { + enqueueTask(key, task); + } + }); + }); + }); + + checkForDeadlocks(); + processQueue(); + + function enqueueTask(key, task) { + readyTasks.push(function () { + runTask(key, task); + }); + } + + function processQueue() { + if (readyTasks.length === 0 && runningTasks === 0) { + return callback(null, results); + } + while(readyTasks.length && runningTasks < concurrency) { + var run = readyTasks.shift(); + run(); + } + + } + + function addListener(taskName, fn) { + var taskListeners = listeners[taskName]; + if (!taskListeners) { + taskListeners = listeners[taskName] = []; + } + + taskListeners.push(fn); + } + + function taskComplete(taskName) { + var taskListeners = listeners[taskName] || []; + arrayEach(taskListeners, function (fn) { + fn(); + }); + processQueue(); + } + + + function runTask(key, task) { + if (hasError) return; + + var taskCallback = onlyOnce(function(err, result) { + runningTasks--; + if (arguments.length > 2) { + result = slice(arguments, 1); + } + if (err) { + var safeResults = {}; + baseForOwn(results, function(val, rkey) { + safeResults[rkey] = val; + }); + safeResults[key] = result; + hasError = true; + listeners = Object.create(null); + + callback(err, safeResults); + } else { + results[key] = result; + taskComplete(key); + } + }); + + runningTasks++; + var taskFn = wrapAsync(task[task.length - 1]); + if (task.length > 1) { + taskFn(results, taskCallback); + } else { + taskFn(taskCallback); + } + } + + function checkForDeadlocks() { + // Kahn's algorithm + // https://en.wikipedia.org/wiki/Topological_sorting#Kahn.27s_algorithm + // http://connalle.blogspot.com/2013/10/topological-sortingkahn-algorithm.html + var currentTask; + var counter = 0; + while (readyToCheck.length) { + currentTask = readyToCheck.pop(); + counter++; + arrayEach(getDependents(currentTask), function (dependent) { + if (--uncheckedDependencies[dependent] === 0) { + readyToCheck.push(dependent); + } + }); + } + + if (counter !== numTasks) { + throw new Error( + 'async.auto cannot execute tasks due to a recursive dependency' + ); + } + } + + function getDependents(taskName) { + var result = []; + baseForOwn(tasks, function (task, key) { + if (isArray(task) && baseIndexOf(task, taskName, 0) >= 0) { + result.push(key); + } + }); + return result; + } +}; + +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); +} + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol$1 ? Symbol$1.prototype : undefined; +var symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ +function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; +} + +/** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ +function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); +} + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the last unmatched string symbol. + */ +function charsEndIndex(strSymbols, chrSymbols) { + var index = strSymbols.length; + + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; +} + +/** + * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the first unmatched string symbol. + */ +function charsStartIndex(strSymbols, chrSymbols) { + var index = -1, + length = strSymbols.length; + + while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; +} + +/** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function asciiToArray(string) { + return string.split(''); +} + +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff'; +var rsComboMarksRange = '\\u0300-\\u036f'; +var reComboHalfMarksRange = '\\ufe20-\\ufe2f'; +var rsComboSymbolsRange = '\\u20d0-\\u20ff'; +var rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange; +var rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/** Used to compose unicode character classes. */ +var rsAstralRange$1 = '\\ud800-\\udfff'; +var rsComboMarksRange$1 = '\\u0300-\\u036f'; +var reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f'; +var rsComboSymbolsRange$1 = '\\u20d0-\\u20ff'; +var rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1; +var rsVarRange$1 = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + rsAstralRange$1 + ']'; +var rsCombo = '[' + rsComboRange$1 + ']'; +var rsFitz = '\\ud83c[\\udffb-\\udfff]'; +var rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')'; +var rsNonAstral = '[^' + rsAstralRange$1 + ']'; +var rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}'; +var rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]'; +var rsZWJ$1 = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?'; +var rsOptVar = '[' + rsVarRange$1 + ']?'; +var rsOptJoin = '(?:' + rsZWJ$1 + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*'; +var rsSeq = rsOptVar + reOptMod + rsOptJoin; +var rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function unicodeToArray(string) { + return string.match(reUnicode) || []; +} + +/** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); +} + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +/** Used to match leading and trailing whitespace. */ +var reTrim = /^\s+|\s+$/g; + +/** + * Removes leading and trailing whitespace or specified characters from `string`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to trim. + * @param {string} [chars=whitespace] The characters to trim. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {string} Returns the trimmed string. + * @example + * + * _.trim(' abc '); + * // => 'abc' + * + * _.trim('-_-abc-_-', '_-'); + * // => 'abc' + * + * _.map([' foo ', ' bar '], _.trim); + * // => ['foo', 'bar'] + */ +function trim(string, chars, guard) { + string = toString(string); + if (string && (guard || chars === undefined)) { + return string.replace(reTrim, ''); + } + if (!string || !(chars = baseToString(chars))) { + return string; + } + var strSymbols = stringToArray(string), + chrSymbols = stringToArray(chars), + start = charsStartIndex(strSymbols, chrSymbols), + end = charsEndIndex(strSymbols, chrSymbols) + 1; + + return castSlice(strSymbols, start, end).join(''); +} + +var FN_ARGS = /^(?:async\s+)?(function)?\s*[^\(]*\(\s*([^\)]*)\)/m; +var FN_ARG_SPLIT = /,/; +var FN_ARG = /(=.+)?(\s*)$/; +var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; + +function parseParams(func) { + func = func.toString().replace(STRIP_COMMENTS, ''); + func = func.match(FN_ARGS)[2].replace(' ', ''); + func = func ? func.split(FN_ARG_SPLIT) : []; + func = func.map(function (arg){ + return trim(arg.replace(FN_ARG, '')); + }); + return func; +} + +/** + * A dependency-injected version of the [async.auto]{@link module:ControlFlow.auto} function. Dependent + * tasks are specified as parameters to the function, after the usual callback + * parameter, with the parameter names matching the names of the tasks it + * depends on. This can provide even more readable task graphs which can be + * easier to maintain. + * + * If a final callback is specified, the task results are similarly injected, + * specified as named parameters after the initial error parameter. + * + * The autoInject function is purely syntactic sugar and its semantics are + * otherwise equivalent to [async.auto]{@link module:ControlFlow.auto}. + * + * @name autoInject + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.auto]{@link module:ControlFlow.auto} + * @category Control Flow + * @param {Object} tasks - An object, each of whose properties is an {@link AsyncFunction} of + * the form 'func([dependencies...], callback). The object's key of a property + * serves as the name of the task defined by that property, i.e. can be used + * when specifying requirements for other tasks. + * * The `callback` parameter is a `callback(err, result)` which must be called + * when finished, passing an `error` (which can be `null`) and the result of + * the function's execution. The remaining parameters name other tasks on + * which the task is dependent, and the results from those tasks are the + * arguments of those parameters. + * @param {Function} [callback] - An optional callback which is called when all + * the tasks have been completed. It receives the `err` argument if any `tasks` + * pass an error to their callback, and a `results` object with any completed + * task results, similar to `auto`. + * @example + * + * // The example from `auto` can be rewritten as follows: + * async.autoInject({ + * get_data: function(callback) { + * // async code to get some data + * callback(null, 'data', 'converted to array'); + * }, + * make_folder: function(callback) { + * // async code to create a directory to store a file in + * // this is run at the same time as getting the data + * callback(null, 'folder'); + * }, + * write_file: function(get_data, make_folder, callback) { + * // once there is some data and the directory exists, + * // write the data to a file in the directory + * callback(null, 'filename'); + * }, + * email_link: function(write_file, callback) { + * // once the file is written let's email a link to it... + * // write_file contains the filename returned by write_file. + * callback(null, {'file':write_file, 'email':'user@example.com'}); + * } + * }, function(err, results) { + * console.log('err = ', err); + * console.log('email_link = ', results.email_link); + * }); + * + * // If you are using a JS minifier that mangles parameter names, `autoInject` + * // will not work with plain functions, since the parameter names will be + * // collapsed to a single letter identifier. To work around this, you can + * // explicitly specify the names of the parameters your task function needs + * // in an array, similar to Angular.js dependency injection. + * + * // This still has an advantage over plain `auto`, since the results a task + * // depends on are still spread into arguments. + * async.autoInject({ + * //... + * write_file: ['get_data', 'make_folder', function(get_data, make_folder, callback) { + * callback(null, 'filename'); + * }], + * email_link: ['write_file', function(write_file, callback) { + * callback(null, {'file':write_file, 'email':'user@example.com'}); + * }] + * //... + * }, function(err, results) { + * console.log('err = ', err); + * console.log('email_link = ', results.email_link); + * }); + */ +function autoInject(tasks, callback) { + var newTasks = {}; + + baseForOwn(tasks, function (taskFn, key) { + var params; + var fnIsAsync = isAsync(taskFn); + var hasNoDeps = + (!fnIsAsync && taskFn.length === 1) || + (fnIsAsync && taskFn.length === 0); + + if (isArray(taskFn)) { + params = taskFn.slice(0, -1); + taskFn = taskFn[taskFn.length - 1]; + + newTasks[key] = params.concat(params.length > 0 ? newTask : taskFn); + } else if (hasNoDeps) { + // no dependencies, use the function as-is + newTasks[key] = taskFn; + } else { + params = parseParams(taskFn); + if (taskFn.length === 0 && !fnIsAsync && params.length === 0) { + throw new Error("autoInject task functions require explicit parameters."); + } + + // remove callback param + if (!fnIsAsync) params.pop(); + + newTasks[key] = params.concat(newTask); + } + + function newTask(results, taskCb) { + var newArgs = arrayMap(params, function (name) { + return results[name]; + }); + newArgs.push(taskCb); + wrapAsync(taskFn).apply(null, newArgs); + } + }); + + auto(newTasks, callback); +} + +// Simple doubly linked list (https://en.wikipedia.org/wiki/Doubly_linked_list) implementation +// used for queues. This implementation assumes that the node provided by the user can be modified +// to adjust the next and last properties. We implement only the minimal functionality +// for queue support. +function DLL() { + this.head = this.tail = null; + this.length = 0; +} + +function setInitial(dll, node) { + dll.length = 1; + dll.head = dll.tail = node; +} + +DLL.prototype.removeLink = function(node) { + if (node.prev) node.prev.next = node.next; + else this.head = node.next; + if (node.next) node.next.prev = node.prev; + else this.tail = node.prev; + + node.prev = node.next = null; + this.length -= 1; + return node; +}; + +DLL.prototype.empty = function () { + while(this.head) this.shift(); + return this; +}; + +DLL.prototype.insertAfter = function(node, newNode) { + newNode.prev = node; + newNode.next = node.next; + if (node.next) node.next.prev = newNode; + else this.tail = newNode; + node.next = newNode; + this.length += 1; +}; + +DLL.prototype.insertBefore = function(node, newNode) { + newNode.prev = node.prev; + newNode.next = node; + if (node.prev) node.prev.next = newNode; + else this.head = newNode; + node.prev = newNode; + this.length += 1; +}; + +DLL.prototype.unshift = function(node) { + if (this.head) this.insertBefore(this.head, node); + else setInitial(this, node); +}; + +DLL.prototype.push = function(node) { + if (this.tail) this.insertAfter(this.tail, node); + else setInitial(this, node); +}; + +DLL.prototype.shift = function() { + return this.head && this.removeLink(this.head); +}; + +DLL.prototype.pop = function() { + return this.tail && this.removeLink(this.tail); +}; + +DLL.prototype.toArray = function () { + var arr = Array(this.length); + var curr = this.head; + for(var idx = 0; idx < this.length; idx++) { + arr[idx] = curr.data; + curr = curr.next; + } + return arr; +}; + +DLL.prototype.remove = function (testFn) { + var curr = this.head; + while(!!curr) { + var next = curr.next; + if (testFn(curr)) { + this.removeLink(curr); + } + curr = next; + } + return this; +}; + +function queue(worker, concurrency, payload) { + if (concurrency == null) { + concurrency = 1; + } + else if(concurrency === 0) { + throw new Error('Concurrency must not be zero'); + } + + var _worker = wrapAsync(worker); + var numRunning = 0; + var workersList = []; + + var processingScheduled = false; + function _insert(data, insertAtFront, callback) { + if (callback != null && typeof callback !== 'function') { + throw new Error('task callback must be a function'); + } + q.started = true; + if (!isArray(data)) { + data = [data]; + } + if (data.length === 0 && q.idle()) { + // call drain immediately if there are no tasks + return setImmediate$1(function() { + q.drain(); + }); + } + + for (var i = 0, l = data.length; i < l; i++) { + var item = { + data: data[i], + callback: callback || noop + }; + + if (insertAtFront) { + q._tasks.unshift(item); + } else { + q._tasks.push(item); + } + } + + if (!processingScheduled) { + processingScheduled = true; + setImmediate$1(function() { + processingScheduled = false; + q.process(); + }); + } + } + + function _next(tasks) { + return function(err){ + numRunning -= 1; + + for (var i = 0, l = tasks.length; i < l; i++) { + var task = tasks[i]; + + var index = baseIndexOf(workersList, task, 0); + if (index === 0) { + workersList.shift(); + } else if (index > 0) { + workersList.splice(index, 1); + } + + task.callback.apply(task, arguments); + + if (err != null) { + q.error(err, task.data); + } + } + + if (numRunning <= (q.concurrency - q.buffer) ) { + q.unsaturated(); + } + + if (q.idle()) { + q.drain(); + } + q.process(); + }; + } + + var isProcessing = false; + var q = { + _tasks: new DLL(), + concurrency: concurrency, + payload: payload, + saturated: noop, + unsaturated:noop, + buffer: concurrency / 4, + empty: noop, + drain: noop, + error: noop, + started: false, + paused: false, + push: function (data, callback) { + _insert(data, false, callback); + }, + kill: function () { + q.drain = noop; + q._tasks.empty(); + }, + unshift: function (data, callback) { + _insert(data, true, callback); + }, + remove: function (testFn) { + q._tasks.remove(testFn); + }, + process: function () { + // Avoid trying to start too many processing operations. This can occur + // when callbacks resolve synchronously (#1267). + if (isProcessing) { + return; + } + isProcessing = true; + while(!q.paused && numRunning < q.concurrency && q._tasks.length){ + var tasks = [], data = []; + var l = q._tasks.length; + if (q.payload) l = Math.min(l, q.payload); + for (var i = 0; i < l; i++) { + var node = q._tasks.shift(); + tasks.push(node); + workersList.push(node); + data.push(node.data); + } + + numRunning += 1; + + if (q._tasks.length === 0) { + q.empty(); + } + + if (numRunning === q.concurrency) { + q.saturated(); + } + + var cb = onlyOnce(_next(tasks)); + _worker(data, cb); + } + isProcessing = false; + }, + length: function () { + return q._tasks.length; + }, + running: function () { + return numRunning; + }, + workersList: function () { + return workersList; + }, + idle: function() { + return q._tasks.length + numRunning === 0; + }, + pause: function () { + q.paused = true; + }, + resume: function () { + if (q.paused === false) { return; } + q.paused = false; + setImmediate$1(q.process); + } + }; + return q; +} + +/** + * A cargo of tasks for the worker function to complete. Cargo inherits all of + * the same methods and event callbacks as [`queue`]{@link module:ControlFlow.queue}. + * @typedef {Object} CargoObject + * @memberOf module:ControlFlow + * @property {Function} length - A function returning the number of items + * waiting to be processed. Invoke like `cargo.length()`. + * @property {number} payload - An `integer` for determining how many tasks + * should be process per round. This property can be changed after a `cargo` is + * created to alter the payload on-the-fly. + * @property {Function} push - Adds `task` to the `queue`. The callback is + * called once the `worker` has finished processing the task. Instead of a + * single task, an array of `tasks` can be submitted. The respective callback is + * used for every task in the list. Invoke like `cargo.push(task, [callback])`. + * @property {Function} saturated - A callback that is called when the + * `queue.length()` hits the concurrency and further tasks will be queued. + * @property {Function} empty - A callback that is called when the last item + * from the `queue` is given to a `worker`. + * @property {Function} drain - A callback that is called when the last item + * from the `queue` has returned from the `worker`. + * @property {Function} idle - a function returning false if there are items + * waiting or being processed, or true if not. Invoke like `cargo.idle()`. + * @property {Function} pause - a function that pauses the processing of tasks + * until `resume()` is called. Invoke like `cargo.pause()`. + * @property {Function} resume - a function that resumes the processing of + * queued tasks when the queue is paused. Invoke like `cargo.resume()`. + * @property {Function} kill - a function that removes the `drain` callback and + * empties remaining tasks from the queue forcing it to go idle. Invoke like `cargo.kill()`. + */ + +/** + * Creates a `cargo` object with the specified payload. Tasks added to the + * cargo will be processed altogether (up to the `payload` limit). If the + * `worker` is in progress, the task is queued until it becomes available. Once + * the `worker` has completed some tasks, each callback of those tasks is + * called. Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966) + * for how `cargo` and `queue` work. + * + * While [`queue`]{@link module:ControlFlow.queue} passes only one task to one of a group of workers + * at a time, cargo passes an array of tasks to a single worker, repeating + * when the worker is finished. + * + * @name cargo + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.queue]{@link module:ControlFlow.queue} + * @category Control Flow + * @param {AsyncFunction} worker - An asynchronous function for processing an array + * of queued tasks. Invoked with `(tasks, callback)`. + * @param {number} [payload=Infinity] - An optional `integer` for determining + * how many tasks should be processed per round; if omitted, the default is + * unlimited. + * @returns {module:ControlFlow.CargoObject} A cargo object to manage the tasks. Callbacks can + * attached as certain properties to listen for specific events during the + * lifecycle of the cargo and inner queue. + * @example + * + * // create a cargo object with payload 2 + * var cargo = async.cargo(function(tasks, callback) { + * for (var i=0; i true + */ +function identity(value) { + return value; +} + +function _createTester(check, getResult) { + return function(eachfn, arr, iteratee, cb) { + cb = cb || noop; + var testPassed = false; + var testResult; + eachfn(arr, function(value, _, callback) { + iteratee(value, function(err, result) { + if (err) { + callback(err); + } else if (check(result) && !testResult) { + testPassed = true; + testResult = getResult(true, value); + callback(null, breakLoop); + } else { + callback(); + } + }); + }, function(err) { + if (err) { + cb(err); + } else { + cb(null, testPassed ? testResult : getResult(false)); + } + }); + }; +} + +function _findGetResult(v, x) { + return x; +} + +/** + * Returns the first value in `coll` that passes an async truth test. The + * `iteratee` is applied in parallel, meaning the first iteratee to return + * `true` will fire the detect `callback` with that result. That means the + * result might not be the first item in the original `coll` (in terms of order) + * that passes the test. + + * If order within the original `coll` is important, then look at + * [`detectSeries`]{@link module:Collections.detectSeries}. + * + * @name detect + * @static + * @memberOf module:Collections + * @method + * @alias find + * @category Collections + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. + * The iteratee must complete with a boolean value as its result. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the `iteratee` functions have finished. + * Result will be the first item in the array that passes the truth test + * (iteratee) or the value `undefined` if none passed. Invoked with + * (err, result). + * @example + * + * async.detect(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, result) { + * // result now equals the first file in the list that exists + * }); + */ +var detect = doParallel(_createTester(identity, _findGetResult)); + +/** + * The same as [`detect`]{@link module:Collections.detect} but runs a maximum of `limit` async operations at a + * time. + * + * @name detectLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.detect]{@link module:Collections.detect} + * @alias findLimit + * @category Collections + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. + * The iteratee must complete with a boolean value as its result. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the `iteratee` functions have finished. + * Result will be the first item in the array that passes the truth test + * (iteratee) or the value `undefined` if none passed. Invoked with + * (err, result). + */ +var detectLimit = doParallelLimit(_createTester(identity, _findGetResult)); + +/** + * The same as [`detect`]{@link module:Collections.detect} but runs only a single async operation at a time. + * + * @name detectSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.detect]{@link module:Collections.detect} + * @alias findSeries + * @category Collections + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. + * The iteratee must complete with a boolean value as its result. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the `iteratee` functions have finished. + * Result will be the first item in the array that passes the truth test + * (iteratee) or the value `undefined` if none passed. Invoked with + * (err, result). + */ +var detectSeries = doLimit(detectLimit, 1); + +function consoleFunc(name) { + return function (fn/*, ...args*/) { + var args = slice(arguments, 1); + args.push(function (err/*, ...args*/) { + var args = slice(arguments, 1); + if (typeof console === 'object') { + if (err) { + if (console.error) { + console.error(err); + } + } else if (console[name]) { + arrayEach(args, function (x) { + console[name](x); + }); + } + } + }); + wrapAsync(fn).apply(null, args); + }; +} + +/** + * Logs the result of an [`async` function]{@link AsyncFunction} to the + * `console` using `console.dir` to display the properties of the resulting object. + * Only works in Node.js or in browsers that support `console.dir` and + * `console.error` (such as FF and Chrome). + * If multiple arguments are returned from the async function, + * `console.dir` is called on each argument in order. + * + * @name dir + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} function - The function you want to eventually apply + * all arguments to. + * @param {...*} arguments... - Any number of arguments to apply to the function. + * @example + * + * // in a module + * var hello = function(name, callback) { + * setTimeout(function() { + * callback(null, {hello: name}); + * }, 1000); + * }; + * + * // in the node repl + * node> async.dir(hello, 'world'); + * {hello: 'world'} + */ +var dir = consoleFunc('dir'); + +/** + * The post-check version of [`during`]{@link module:ControlFlow.during}. To reflect the difference in + * the order of operations, the arguments `test` and `fn` are switched. + * + * Also a version of [`doWhilst`]{@link module:ControlFlow.doWhilst} with asynchronous `test` function. + * @name doDuring + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.during]{@link module:ControlFlow.during} + * @category Control Flow + * @param {AsyncFunction} fn - An async function which is called each time + * `test` passes. Invoked with (callback). + * @param {AsyncFunction} test - asynchronous truth test to perform before each + * execution of `fn`. Invoked with (...args, callback), where `...args` are the + * non-error args from the previous callback of `fn`. + * @param {Function} [callback] - A callback which is called after the test + * function has failed and repeated execution of `fn` has stopped. `callback` + * will be passed an error if one occurred, otherwise `null`. + */ +function doDuring(fn, test, callback) { + callback = onlyOnce(callback || noop); + var _fn = wrapAsync(fn); + var _test = wrapAsync(test); + + function next(err/*, ...args*/) { + if (err) return callback(err); + var args = slice(arguments, 1); + args.push(check); + _test.apply(this, args); + } + + function check(err, truth) { + if (err) return callback(err); + if (!truth) return callback(null); + _fn(next); + } + + check(null, true); + +} + +/** + * The post-check version of [`whilst`]{@link module:ControlFlow.whilst}. To reflect the difference in + * the order of operations, the arguments `test` and `iteratee` are switched. + * + * `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript. + * + * @name doWhilst + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.whilst]{@link module:ControlFlow.whilst} + * @category Control Flow + * @param {AsyncFunction} iteratee - A function which is called each time `test` + * passes. Invoked with (callback). + * @param {Function} test - synchronous truth test to perform after each + * execution of `iteratee`. Invoked with any non-error callback results of + * `iteratee`. + * @param {Function} [callback] - A callback which is called after the test + * function has failed and repeated execution of `iteratee` has stopped. + * `callback` will be passed an error and any arguments passed to the final + * `iteratee`'s callback. Invoked with (err, [results]); + */ +function doWhilst(iteratee, test, callback) { + callback = onlyOnce(callback || noop); + var _iteratee = wrapAsync(iteratee); + var next = function(err/*, ...args*/) { + if (err) return callback(err); + var args = slice(arguments, 1); + if (test.apply(this, args)) return _iteratee(next); + callback.apply(null, [null].concat(args)); + }; + _iteratee(next); +} + +/** + * Like ['doWhilst']{@link module:ControlFlow.doWhilst}, except the `test` is inverted. Note the + * argument ordering differs from `until`. + * + * @name doUntil + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.doWhilst]{@link module:ControlFlow.doWhilst} + * @category Control Flow + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` fails. Invoked with (callback). + * @param {Function} test - synchronous truth test to perform after each + * execution of `iteratee`. Invoked with any non-error callback results of + * `iteratee`. + * @param {Function} [callback] - A callback which is called after the test + * function has passed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + */ +function doUntil(iteratee, test, callback) { + doWhilst(iteratee, function() { + return !test.apply(this, arguments); + }, callback); +} + +/** + * Like [`whilst`]{@link module:ControlFlow.whilst}, except the `test` is an asynchronous function that + * is passed a callback in the form of `function (err, truth)`. If error is + * passed to `test` or `fn`, the main callback is immediately called with the + * value of the error. + * + * @name during + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.whilst]{@link module:ControlFlow.whilst} + * @category Control Flow + * @param {AsyncFunction} test - asynchronous truth test to perform before each + * execution of `fn`. Invoked with (callback). + * @param {AsyncFunction} fn - An async function which is called each time + * `test` passes. Invoked with (callback). + * @param {Function} [callback] - A callback which is called after the test + * function has failed and repeated execution of `fn` has stopped. `callback` + * will be passed an error, if one occurred, otherwise `null`. + * @example + * + * var count = 0; + * + * async.during( + * function (callback) { + * return callback(null, count < 5); + * }, + * function (callback) { + * count++; + * setTimeout(callback, 1000); + * }, + * function (err) { + * // 5 seconds have passed + * } + * ); + */ +function during(test, fn, callback) { + callback = onlyOnce(callback || noop); + var _fn = wrapAsync(fn); + var _test = wrapAsync(test); + + function next(err) { + if (err) return callback(err); + _test(check); + } + + function check(err, truth) { + if (err) return callback(err); + if (!truth) return callback(null); + _fn(next); + } + + _test(check); +} + +function _withoutIndex(iteratee) { + return function (value, index, callback) { + return iteratee(value, callback); + }; +} + +/** + * Applies the function `iteratee` to each item in `coll`, in parallel. + * The `iteratee` is called with an item from the list, and a callback for when + * it has finished. If the `iteratee` passes an error to its `callback`, the + * main `callback` (for the `each` function) is immediately called with the + * error. + * + * Note, that since this function applies `iteratee` to each item in parallel, + * there is no guarantee that the iteratee functions will complete in order. + * + * @name each + * @static + * @memberOf module:Collections + * @method + * @alias forEach + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to + * each item in `coll`. Invoked with (item, callback). + * The array index is not passed to the iteratee. + * If you need the index, use `eachOf`. + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + * @example + * + * // assuming openFiles is an array of file names and saveFile is a function + * // to save the modified contents of that file: + * + * async.each(openFiles, saveFile, function(err){ + * // if any of the saves produced an error, err would equal that error + * }); + * + * // assuming openFiles is an array of file names + * async.each(openFiles, function(file, callback) { + * + * // Perform operation on file here. + * console.log('Processing file ' + file); + * + * if( file.length > 32 ) { + * console.log('This file name is too long'); + * callback('File name too long'); + * } else { + * // Do work to process file here + * console.log('File processed'); + * callback(); + * } + * }, function(err) { + * // if any of the file processing produced an error, err would equal that error + * if( err ) { + * // One of the iterations produced an error. + * // All processing will now stop. + * console.log('A file failed to process'); + * } else { + * console.log('All files have been processed successfully'); + * } + * }); + */ +function eachLimit(coll, iteratee, callback) { + eachOf(coll, _withoutIndex(wrapAsync(iteratee)), callback); +} + +/** + * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time. + * + * @name eachLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.each]{@link module:Collections.each} + * @alias forEachLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The array index is not passed to the iteratee. + * If you need the index, use `eachOfLimit`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + */ +function eachLimit$1(coll, limit, iteratee, callback) { + _eachOfLimit(limit)(coll, _withoutIndex(wrapAsync(iteratee)), callback); +} + +/** + * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time. + * + * @name eachSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.each]{@link module:Collections.each} + * @alias forEachSeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each + * item in `coll`. + * The array index is not passed to the iteratee. + * If you need the index, use `eachOfSeries`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + */ +var eachSeries = doLimit(eachLimit$1, 1); + +/** + * Wrap an async function and ensure it calls its callback on a later tick of + * the event loop. If the function already calls its callback on a next tick, + * no extra deferral is added. This is useful for preventing stack overflows + * (`RangeError: Maximum call stack size exceeded`) and generally keeping + * [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony) + * contained. ES2017 `async` functions are returned as-is -- they are immune + * to Zalgo's corrupting influences, as they always resolve on a later tick. + * + * @name ensureAsync + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - an async function, one that expects a node-style + * callback as its last argument. + * @returns {AsyncFunction} Returns a wrapped function with the exact same call + * signature as the function passed in. + * @example + * + * function sometimesAsync(arg, callback) { + * if (cache[arg]) { + * return callback(null, cache[arg]); // this would be synchronous!! + * } else { + * doSomeIO(arg, callback); // this IO would be asynchronous + * } + * } + * + * // this has a risk of stack overflows if many results are cached in a row + * async.mapSeries(args, sometimesAsync, done); + * + * // this will defer sometimesAsync's callback if necessary, + * // preventing stack overflows + * async.mapSeries(args, async.ensureAsync(sometimesAsync), done); + */ +function ensureAsync(fn) { + if (isAsync(fn)) return fn; + return initialParams(function (args, callback) { + var sync = true; + args.push(function () { + var innerArgs = arguments; + if (sync) { + setImmediate$1(function () { + callback.apply(null, innerArgs); + }); + } else { + callback.apply(null, innerArgs); + } + }); + fn.apply(this, args); + sync = false; + }); +} + +function notId(v) { + return !v; +} + +/** + * Returns `true` if every element in `coll` satisfies an async test. If any + * iteratee call returns `false`, the main `callback` is immediately called. + * + * @name every + * @static + * @memberOf module:Collections + * @method + * @alias all + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in parallel. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + * @example + * + * async.every(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, result) { + * // if result is true then every file exists + * }); + */ +var every = doParallel(_createTester(notId, notId)); + +/** + * The same as [`every`]{@link module:Collections.every} but runs a maximum of `limit` async operations at a time. + * + * @name everyLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.every]{@link module:Collections.every} + * @alias allLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in parallel. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + */ +var everyLimit = doParallelLimit(_createTester(notId, notId)); + +/** + * The same as [`every`]{@link module:Collections.every} but runs only a single async operation at a time. + * + * @name everySeries + * @static + * @memberOf module:Collections + * @method + * @see [async.every]{@link module:Collections.every} + * @alias allSeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collection in series. + * The iteratee must complete with a boolean result value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result will be either `true` or `false` + * depending on the values of the async tests. Invoked with (err, result). + */ +var everySeries = doLimit(everyLimit, 1); + +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +function filterArray(eachfn, arr, iteratee, callback) { + var truthValues = new Array(arr.length); + eachfn(arr, function (x, index, callback) { + iteratee(x, function (err, v) { + truthValues[index] = !!v; + callback(err); + }); + }, function (err) { + if (err) return callback(err); + var results = []; + for (var i = 0; i < arr.length; i++) { + if (truthValues[i]) results.push(arr[i]); + } + callback(null, results); + }); +} + +function filterGeneric(eachfn, coll, iteratee, callback) { + var results = []; + eachfn(coll, function (x, index, callback) { + iteratee(x, function (err, v) { + if (err) { + callback(err); + } else { + if (v) { + results.push({index: index, value: x}); + } + callback(); + } + }); + }, function (err) { + if (err) { + callback(err); + } else { + callback(null, arrayMap(results.sort(function (a, b) { + return a.index - b.index; + }), baseProperty('value'))); + } + }); +} + +function _filter(eachfn, coll, iteratee, callback) { + var filter = isArrayLike(coll) ? filterArray : filterGeneric; + filter(eachfn, coll, wrapAsync(iteratee), callback || noop); +} + +/** + * Returns a new array of all the values in `coll` which pass an async truth + * test. This operation is performed in parallel, but the results array will be + * in the same order as the original. + * + * @name filter + * @static + * @memberOf module:Collections + * @method + * @alias select + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @example + * + * async.filter(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, results) { + * // results now equals an array of the existing files + * }); + */ +var filter = doParallel(_filter); + +/** + * The same as [`filter`]{@link module:Collections.filter} but runs a maximum of `limit` async operations at a + * time. + * + * @name filterLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @alias selectLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + */ +var filterLimit = doParallelLimit(_filter); + +/** + * The same as [`filter`]{@link module:Collections.filter} but runs only a single async operation at a time. + * + * @name filterSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @alias selectSeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results) + */ +var filterSeries = doLimit(filterLimit, 1); + +/** + * Calls the asynchronous function `fn` with a callback parameter that allows it + * to call itself again, in series, indefinitely. + + * If an error is passed to the callback then `errback` is called with the + * error, and execution stops, otherwise it will never be called. + * + * @name forever + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {AsyncFunction} fn - an async function to call repeatedly. + * Invoked with (next). + * @param {Function} [errback] - when `fn` passes an error to it's callback, + * this function will be called, and execution stops. Invoked with (err). + * @example + * + * async.forever( + * function(next) { + * // next is suitable for passing to things that need a callback(err [, whatever]); + * // it will result in this function being called again. + * }, + * function(err) { + * // if next is called with a value in its first parameter, it will appear + * // in here as 'err', and execution will stop. + * } + * ); + */ +function forever(fn, errback) { + var done = onlyOnce(errback || noop); + var task = wrapAsync(ensureAsync(fn)); + + function next(err) { + if (err) return done(err); + task(next); + } + next(); +} + +/** + * The same as [`groupBy`]{@link module:Collections.groupBy} but runs a maximum of `limit` async operations at a time. + * + * @name groupByLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.groupBy]{@link module:Collections.groupBy} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whoses + * properties are arrays of values which returned the corresponding key. + */ +var groupByLimit = function(coll, limit, iteratee, callback) { + callback = callback || noop; + var _iteratee = wrapAsync(iteratee); + mapLimit(coll, limit, function(val, callback) { + _iteratee(val, function(err, key) { + if (err) return callback(err); + return callback(null, {key: key, val: val}); + }); + }, function(err, mapResults) { + var result = {}; + // from MDN, handle object having an `hasOwnProperty` prop + var hasOwnProperty = Object.prototype.hasOwnProperty; + + for (var i = 0; i < mapResults.length; i++) { + if (mapResults[i]) { + var key = mapResults[i].key; + var val = mapResults[i].val; + + if (hasOwnProperty.call(result, key)) { + result[key].push(val); + } else { + result[key] = [val]; + } + } + } + + return callback(err, result); + }); +}; + +/** + * Returns a new object, where each value corresponds to an array of items, from + * `coll`, that returned the corresponding key. That is, the keys of the object + * correspond to the values passed to the `iteratee` callback. + * + * Note: Since this function applies the `iteratee` to each item in parallel, + * there is no guarantee that the `iteratee` functions will complete in order. + * However, the values for each key in the `result` will be in the same order as + * the original `coll`. For Objects, the values will roughly be in the order of + * the original Objects' keys (but this can vary across JavaScript engines). + * + * @name groupBy + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whoses + * properties are arrays of values which returned the corresponding key. + * @example + * + * async.groupBy(['userId1', 'userId2', 'userId3'], function(userId, callback) { + * db.findById(userId, function(err, user) { + * if (err) return callback(err); + * return callback(null, user.age); + * }); + * }, function(err, result) { + * // result is object containing the userIds grouped by age + * // e.g. { 30: ['userId1', 'userId3'], 42: ['userId2']}; + * }); + */ +var groupBy = doLimit(groupByLimit, Infinity); + +/** + * The same as [`groupBy`]{@link module:Collections.groupBy} but runs only a single async operation at a time. + * + * @name groupBySeries + * @static + * @memberOf module:Collections + * @method + * @see [async.groupBy]{@link module:Collections.groupBy} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whoses + * properties are arrays of values which returned the corresponding key. + */ +var groupBySeries = doLimit(groupByLimit, 1); + +/** + * Logs the result of an `async` function to the `console`. Only works in + * Node.js or in browsers that support `console.log` and `console.error` (such + * as FF and Chrome). If multiple arguments are returned from the async + * function, `console.log` is called on each argument in order. + * + * @name log + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} function - The function you want to eventually apply + * all arguments to. + * @param {...*} arguments... - Any number of arguments to apply to the function. + * @example + * + * // in a module + * var hello = function(name, callback) { + * setTimeout(function() { + * callback(null, 'hello ' + name); + * }, 1000); + * }; + * + * // in the node repl + * node> async.log(hello, 'world'); + * 'hello world' + */ +var log = consoleFunc('log'); + +/** + * The same as [`mapValues`]{@link module:Collections.mapValues} but runs a maximum of `limit` async operations at a + * time. + * + * @name mapValuesLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.mapValues]{@link module:Collections.mapValues} + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + */ +function mapValuesLimit(obj, limit, iteratee, callback) { + callback = once(callback || noop); + var newObj = {}; + var _iteratee = wrapAsync(iteratee); + eachOfLimit(obj, limit, function(val, key, next) { + _iteratee(val, key, function (err, result) { + if (err) return next(err); + newObj[key] = result; + next(); + }); + }, function (err) { + callback(err, newObj); + }); +} + +/** + * A relative of [`map`]{@link module:Collections.map}, designed for use with objects. + * + * Produces a new Object by mapping each value of `obj` through the `iteratee` + * function. The `iteratee` is called each `value` and `key` from `obj` and a + * callback for when it has finished processing. Each of these callbacks takes + * two arguments: an `error`, and the transformed item from `obj`. If `iteratee` + * passes an error to its callback, the main `callback` (for the `mapValues` + * function) is immediately called with the error. + * + * Note, the order of the keys in the result is not guaranteed. The keys will + * be roughly in the order they complete, (but this is very engine-specific) + * + * @name mapValues + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + * @example + * + * async.mapValues({ + * f1: 'file1', + * f2: 'file2', + * f3: 'file3' + * }, function (file, key, callback) { + * fs.stat(file, callback); + * }, function(err, result) { + * // result is now a map of stats for each file, e.g. + * // { + * // f1: [stats for file1], + * // f2: [stats for file2], + * // f3: [stats for file3] + * // } + * }); + */ + +var mapValues = doLimit(mapValuesLimit, Infinity); + +/** + * The same as [`mapValues`]{@link module:Collections.mapValues} but runs only a single async operation at a time. + * + * @name mapValuesSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.mapValues]{@link module:Collections.mapValues} + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + */ +var mapValuesSeries = doLimit(mapValuesLimit, 1); + +function has(obj, key) { + return key in obj; +} + +/** + * Caches the results of an async function. When creating a hash to store + * function results against, the callback is omitted from the hash and an + * optional hash function can be used. + * + * If no hash function is specified, the first argument is used as a hash key, + * which may work reasonably if it is a string or a data type that converts to a + * distinct string. Note that objects and arrays will not behave reasonably. + * Neither will cases where the other arguments are significant. In such cases, + * specify your own hash function. + * + * The cache of results is exposed as the `memo` property of the function + * returned by `memoize`. + * + * @name memoize + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - The async function to proxy and cache results from. + * @param {Function} hasher - An optional function for generating a custom hash + * for storing results. It has all the arguments applied to it apart from the + * callback, and must be synchronous. + * @returns {AsyncFunction} a memoized version of `fn` + * @example + * + * var slow_fn = function(name, callback) { + * // do something + * callback(null, result); + * }; + * var fn = async.memoize(slow_fn); + * + * // fn can now be used as if it were slow_fn + * fn('some name', function() { + * // callback + * }); + */ +function memoize(fn, hasher) { + var memo = Object.create(null); + var queues = Object.create(null); + hasher = hasher || identity; + var _fn = wrapAsync(fn); + var memoized = initialParams(function memoized(args, callback) { + var key = hasher.apply(null, args); + if (has(memo, key)) { + setImmediate$1(function() { + callback.apply(null, memo[key]); + }); + } else if (has(queues, key)) { + queues[key].push(callback); + } else { + queues[key] = [callback]; + _fn.apply(null, args.concat(function(/*args*/) { + var args = slice(arguments); + memo[key] = args; + var q = queues[key]; + delete queues[key]; + for (var i = 0, l = q.length; i < l; i++) { + q[i].apply(null, args); + } + })); + } + }); + memoized.memo = memo; + memoized.unmemoized = fn; + return memoized; +} + +/** + * Calls `callback` on a later loop around the event loop. In Node.js this just + * calls `process.nextTick`. In the browser it will use `setImmediate` if + * available, otherwise `setTimeout(callback, 0)`, which means other higher + * priority events may precede the execution of `callback`. + * + * This is used internally for browser-compatibility purposes. + * + * @name nextTick + * @static + * @memberOf module:Utils + * @method + * @see [async.setImmediate]{@link module:Utils.setImmediate} + * @category Util + * @param {Function} callback - The function to call on a later loop around + * the event loop. Invoked with (args...). + * @param {...*} args... - any number of additional arguments to pass to the + * callback on the next tick. + * @example + * + * var call_order = []; + * async.nextTick(function() { + * call_order.push('two'); + * // call_order now equals ['one','two'] + * }); + * call_order.push('one'); + * + * async.setImmediate(function (a, b, c) { + * // a, b, and c equal 1, 2, and 3 + * }, 1, 2, 3); + */ +var _defer$1; + +if (hasNextTick) { + _defer$1 = process.nextTick; +} else if (hasSetImmediate) { + _defer$1 = setImmediate; +} else { + _defer$1 = fallback; +} + +var nextTick = wrap(_defer$1); + +function _parallel(eachfn, tasks, callback) { + callback = callback || noop; + var results = isArrayLike(tasks) ? [] : {}; + + eachfn(tasks, function (task, key, callback) { + wrapAsync(task)(function (err, result) { + if (arguments.length > 2) { + result = slice(arguments, 1); + } + results[key] = result; + callback(err); + }); + }, function (err) { + callback(err, results); + }); +} + +/** + * Run the `tasks` collection of functions in parallel, without waiting until + * the previous function has completed. If any of the functions pass an error to + * its callback, the main `callback` is immediately called with the value of the + * error. Once the `tasks` have completed, the results are passed to the final + * `callback` as an array. + * + * **Note:** `parallel` is about kicking-off I/O tasks in parallel, not about + * parallel execution of code. If your tasks do not use any timers or perform + * any I/O, they will actually be executed in series. Any synchronous setup + * sections for each task will happen one after the other. JavaScript remains + * single-threaded. + * + * **Hint:** Use [`reflect`]{@link module:Utils.reflect} to continue the + * execution of other tasks when a task fails. + * + * It is also possible to use an object instead of an array. Each property will + * be run as a function and the results will be passed to the final `callback` + * as an object instead of an array. This can be a more readable way of handling + * results from {@link async.parallel}. + * + * @name parallel + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|Object} tasks - A collection of + * [async functions]{@link AsyncFunction} to run. + * Each async function can complete with any number of optional `result` values. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed successfully. This function gets a results array + * (or object) containing all the result arguments passed to the task callbacks. + * Invoked with (err, results). + * + * @example + * async.parallel([ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ], + * // optional callback + * function(err, results) { + * // the results array will equal ['one','two'] even though + * // the second function had a shorter timeout. + * }); + * + * // an example using an object instead of an array + * async.parallel({ + * one: function(callback) { + * setTimeout(function() { + * callback(null, 1); + * }, 200); + * }, + * two: function(callback) { + * setTimeout(function() { + * callback(null, 2); + * }, 100); + * } + * }, function(err, results) { + * // results is now equals to: {one: 1, two: 2} + * }); + */ +function parallelLimit(tasks, callback) { + _parallel(eachOf, tasks, callback); +} + +/** + * The same as [`parallel`]{@link module:ControlFlow.parallel} but runs a maximum of `limit` async operations at a + * time. + * + * @name parallelLimit + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.parallel]{@link module:ControlFlow.parallel} + * @category Control Flow + * @param {Array|Iterable|Object} tasks - A collection of + * [async functions]{@link AsyncFunction} to run. + * Each async function can complete with any number of optional `result` values. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed successfully. This function gets a results array + * (or object) containing all the result arguments passed to the task callbacks. + * Invoked with (err, results). + */ +function parallelLimit$1(tasks, limit, callback) { + _parallel(_eachOfLimit(limit), tasks, callback); +} + +/** + * A queue of tasks for the worker function to complete. + * @typedef {Object} QueueObject + * @memberOf module:ControlFlow + * @property {Function} length - a function returning the number of items + * waiting to be processed. Invoke with `queue.length()`. + * @property {boolean} started - a boolean indicating whether or not any + * items have been pushed and processed by the queue. + * @property {Function} running - a function returning the number of items + * currently being processed. Invoke with `queue.running()`. + * @property {Function} workersList - a function returning the array of items + * currently being processed. Invoke with `queue.workersList()`. + * @property {Function} idle - a function returning false if there are items + * waiting or being processed, or true if not. Invoke with `queue.idle()`. + * @property {number} concurrency - an integer for determining how many `worker` + * functions should be run in parallel. This property can be changed after a + * `queue` is created to alter the concurrency on-the-fly. + * @property {Function} push - add a new task to the `queue`. Calls `callback` + * once the `worker` has finished processing the task. Instead of a single task, + * a `tasks` array can be submitted. The respective callback is used for every + * task in the list. Invoke with `queue.push(task, [callback])`, + * @property {Function} unshift - add a new task to the front of the `queue`. + * Invoke with `queue.unshift(task, [callback])`. + * @property {Function} remove - remove items from the queue that match a test + * function. The test function will be passed an object with a `data` property, + * and a `priority` property, if this is a + * [priorityQueue]{@link module:ControlFlow.priorityQueue} object. + * Invoked with `queue.remove(testFn)`, where `testFn` is of the form + * `function ({data, priority}) {}` and returns a Boolean. + * @property {Function} saturated - a callback that is called when the number of + * running workers hits the `concurrency` limit, and further tasks will be + * queued. + * @property {Function} unsaturated - a callback that is called when the number + * of running workers is less than the `concurrency` & `buffer` limits, and + * further tasks will not be queued. + * @property {number} buffer - A minimum threshold buffer in order to say that + * the `queue` is `unsaturated`. + * @property {Function} empty - a callback that is called when the last item + * from the `queue` is given to a `worker`. + * @property {Function} drain - a callback that is called when the last item + * from the `queue` has returned from the `worker`. + * @property {Function} error - a callback that is called when a task errors. + * Has the signature `function(error, task)`. + * @property {boolean} paused - a boolean for determining whether the queue is + * in a paused state. + * @property {Function} pause - a function that pauses the processing of tasks + * until `resume()` is called. Invoke with `queue.pause()`. + * @property {Function} resume - a function that resumes the processing of + * queued tasks when the queue is paused. Invoke with `queue.resume()`. + * @property {Function} kill - a function that removes the `drain` callback and + * empties remaining tasks from the queue forcing it to go idle. No more tasks + * should be pushed to the queue after calling this function. Invoke with `queue.kill()`. + */ + +/** + * Creates a `queue` object with the specified `concurrency`. Tasks added to the + * `queue` are processed in parallel (up to the `concurrency` limit). If all + * `worker`s are in progress, the task is queued until one becomes available. + * Once a `worker` completes a `task`, that `task`'s callback is called. + * + * @name queue + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {AsyncFunction} worker - An async function for processing a queued task. + * If you want to handle errors from an individual task, pass a callback to + * `q.push()`. Invoked with (task, callback). + * @param {number} [concurrency=1] - An `integer` for determining how many + * `worker` functions should be run in parallel. If omitted, the concurrency + * defaults to `1`. If the concurrency is `0`, an error is thrown. + * @returns {module:ControlFlow.QueueObject} A queue object to manage the tasks. Callbacks can + * attached as certain properties to listen for specific events during the + * lifecycle of the queue. + * @example + * + * // create a queue object with concurrency 2 + * var q = async.queue(function(task, callback) { + * console.log('hello ' + task.name); + * callback(); + * }, 2); + * + * // assign a callback + * q.drain = function() { + * console.log('all items have been processed'); + * }; + * + * // add some items to the queue + * q.push({name: 'foo'}, function(err) { + * console.log('finished processing foo'); + * }); + * q.push({name: 'bar'}, function (err) { + * console.log('finished processing bar'); + * }); + * + * // add some items to the queue (batch-wise) + * q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function(err) { + * console.log('finished processing item'); + * }); + * + * // add some items to the front of the queue + * q.unshift({name: 'bar'}, function (err) { + * console.log('finished processing bar'); + * }); + */ +var queue$1 = function (worker, concurrency) { + var _worker = wrapAsync(worker); + return queue(function (items, cb) { + _worker(items[0], cb); + }, concurrency, 1); +}; + +/** + * The same as [async.queue]{@link module:ControlFlow.queue} only tasks are assigned a priority and + * completed in ascending priority order. + * + * @name priorityQueue + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.queue]{@link module:ControlFlow.queue} + * @category Control Flow + * @param {AsyncFunction} worker - An async function for processing a queued task. + * If you want to handle errors from an individual task, pass a callback to + * `q.push()`. + * Invoked with (task, callback). + * @param {number} concurrency - An `integer` for determining how many `worker` + * functions should be run in parallel. If omitted, the concurrency defaults to + * `1`. If the concurrency is `0`, an error is thrown. + * @returns {module:ControlFlow.QueueObject} A priorityQueue object to manage the tasks. There are two + * differences between `queue` and `priorityQueue` objects: + * * `push(task, priority, [callback])` - `priority` should be a number. If an + * array of `tasks` is given, all tasks will be assigned the same priority. + * * The `unshift` method was removed. + */ +var priorityQueue = function(worker, concurrency) { + // Start with a normal queue + var q = queue$1(worker, concurrency); + + // Override push to accept second parameter representing priority + q.push = function(data, priority, callback) { + if (callback == null) callback = noop; + if (typeof callback !== 'function') { + throw new Error('task callback must be a function'); + } + q.started = true; + if (!isArray(data)) { + data = [data]; + } + if (data.length === 0) { + // call drain immediately if there are no tasks + return setImmediate$1(function() { + q.drain(); + }); + } + + priority = priority || 0; + var nextNode = q._tasks.head; + while (nextNode && priority >= nextNode.priority) { + nextNode = nextNode.next; + } + + for (var i = 0, l = data.length; i < l; i++) { + var item = { + data: data[i], + priority: priority, + callback: callback + }; + + if (nextNode) { + q._tasks.insertBefore(nextNode, item); + } else { + q._tasks.push(item); + } + } + setImmediate$1(q.process); + }; + + // Remove unshift function + delete q.unshift; + + return q; +}; + +/** + * Runs the `tasks` array of functions in parallel, without waiting until the + * previous function has completed. Once any of the `tasks` complete or pass an + * error to its callback, the main `callback` is immediately called. It's + * equivalent to `Promise.race()`. + * + * @name race + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array} tasks - An array containing [async functions]{@link AsyncFunction} + * to run. Each function can complete with an optional `result` value. + * @param {Function} callback - A callback to run once any of the functions have + * completed. This function gets an error or result from the first function that + * completed. Invoked with (err, result). + * @returns undefined + * @example + * + * async.race([ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ], + * // main callback + * function(err, result) { + * // the result will be equal to 'two' as it finishes earlier + * }); + */ +function race(tasks, callback) { + callback = once(callback || noop); + if (!isArray(tasks)) return callback(new TypeError('First argument to race must be an array of functions')); + if (!tasks.length) return callback(); + for (var i = 0, l = tasks.length; i < l; i++) { + wrapAsync(tasks[i])(callback); + } +} + +/** + * Same as [`reduce`]{@link module:Collections.reduce}, only operates on `array` in reverse order. + * + * @name reduceRight + * @static + * @memberOf module:Collections + * @method + * @see [async.reduce]{@link module:Collections.reduce} + * @alias foldr + * @category Collection + * @param {Array} array - A collection to iterate over. + * @param {*} memo - The initial state of the reduction. + * @param {AsyncFunction} iteratee - A function applied to each item in the + * array to produce the next step in the reduction. + * The `iteratee` should complete with the next state of the reduction. + * If the iteratee complete with an error, the reduction is stopped and the + * main `callback` is immediately called with the error. + * Invoked with (memo, item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result is the reduced value. Invoked with + * (err, result). + */ +function reduceRight (array, memo, iteratee, callback) { + var reversed = slice(array).reverse(); + reduce(reversed, memo, iteratee, callback); +} + +/** + * Wraps the async function in another function that always completes with a + * result object, even when it errors. + * + * The result object has either the property `error` or `value`. + * + * @name reflect + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - The async function you want to wrap + * @returns {Function} - A function that always passes null to it's callback as + * the error. The second argument to the callback will be an `object` with + * either an `error` or a `value` property. + * @example + * + * async.parallel([ + * async.reflect(function(callback) { + * // do some stuff ... + * callback(null, 'one'); + * }), + * async.reflect(function(callback) { + * // do some more stuff but error ... + * callback('bad stuff happened'); + * }), + * async.reflect(function(callback) { + * // do some more stuff ... + * callback(null, 'two'); + * }) + * ], + * // optional callback + * function(err, results) { + * // values + * // results[0].value = 'one' + * // results[1].error = 'bad stuff happened' + * // results[2].value = 'two' + * }); + */ +function reflect(fn) { + var _fn = wrapAsync(fn); + return initialParams(function reflectOn(args, reflectCallback) { + args.push(function callback(error, cbArg) { + if (error) { + reflectCallback(null, { error: error }); + } else { + var value; + if (arguments.length <= 2) { + value = cbArg; + } else { + value = slice(arguments, 1); + } + reflectCallback(null, { value: value }); + } + }); + + return _fn.apply(this, args); + }); +} + +/** + * A helper function that wraps an array or an object of functions with `reflect`. + * + * @name reflectAll + * @static + * @memberOf module:Utils + * @method + * @see [async.reflect]{@link module:Utils.reflect} + * @category Util + * @param {Array|Object|Iterable} tasks - The collection of + * [async functions]{@link AsyncFunction} to wrap in `async.reflect`. + * @returns {Array} Returns an array of async functions, each wrapped in + * `async.reflect` + * @example + * + * let tasks = [ + * function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * function(callback) { + * // do some more stuff but error ... + * callback(new Error('bad stuff happened')); + * }, + * function(callback) { + * setTimeout(function() { + * callback(null, 'two'); + * }, 100); + * } + * ]; + * + * async.parallel(async.reflectAll(tasks), + * // optional callback + * function(err, results) { + * // values + * // results[0].value = 'one' + * // results[1].error = Error('bad stuff happened') + * // results[2].value = 'two' + * }); + * + * // an example using an object instead of an array + * let tasks = { + * one: function(callback) { + * setTimeout(function() { + * callback(null, 'one'); + * }, 200); + * }, + * two: function(callback) { + * callback('two'); + * }, + * three: function(callback) { + * setTimeout(function() { + * callback(null, 'three'); + * }, 100); + * } + * }; + * + * async.parallel(async.reflectAll(tasks), + * // optional callback + * function(err, results) { + * // values + * // results.one.value = 'one' + * // results.two.error = 'two' + * // results.three.value = 'three' + * }); + */ +function reflectAll(tasks) { + var results; + if (isArray(tasks)) { + results = arrayMap(tasks, reflect); + } else { + results = {}; + baseForOwn(tasks, function(task, key) { + results[key] = reflect.call(this, task); + }); + } + return results; +} + +function reject$1(eachfn, arr, iteratee, callback) { + _filter(eachfn, arr, function(value, cb) { + iteratee(value, function(err, v) { + cb(err, !v); + }); + }, callback); +} + +/** + * The opposite of [`filter`]{@link module:Collections.filter}. Removes values that pass an `async` truth test. + * + * @name reject + * @static + * @memberOf module:Collections + * @method + * @see [async.filter]{@link module:Collections.filter} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @example + * + * async.reject(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, results) { + * // results now equals an array of missing files + * createFiles(results); + * }); + */ +var reject = doParallel(reject$1); + +/** + * The same as [`reject`]{@link module:Collections.reject} but runs a maximum of `limit` async operations at a + * time. + * + * @name rejectLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.reject]{@link module:Collections.reject} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + */ +var rejectLimit = doParallelLimit(reject$1); + +/** + * The same as [`reject`]{@link module:Collections.reject} but runs only a single async operation at a time. + * + * @name rejectSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.reject]{@link module:Collections.reject} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + */ +var rejectSeries = doLimit(rejectLimit, 1); + +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ +function constant$1(value) { + return function() { + return value; + }; +} + +/** + * Attempts to get a successful response from `task` no more than `times` times + * before returning an error. If the task is successful, the `callback` will be + * passed the result of the successful task. If all attempts fail, the callback + * will be passed the error and result (if any) of the final attempt. + * + * @name retry + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @see [async.retryable]{@link module:ControlFlow.retryable} + * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - Can be either an + * object with `times` and `interval` or a number. + * * `times` - The number of attempts to make before giving up. The default + * is `5`. + * * `interval` - The time to wait between retries, in milliseconds. The + * default is `0`. The interval may also be specified as a function of the + * retry count (see example). + * * `errorFilter` - An optional synchronous function that is invoked on + * erroneous result. If it returns `true` the retry attempts will continue; + * if the function returns `false` the retry flow is aborted with the current + * attempt's error and result being returned to the final callback. + * Invoked with (err). + * * If `opts` is a number, the number specifies the number of times to retry, + * with the default interval of `0`. + * @param {AsyncFunction} task - An async function to retry. + * Invoked with (callback). + * @param {Function} [callback] - An optional callback which is called when the + * task has succeeded, or after the final failed attempt. It receives the `err` + * and `result` arguments of the last attempt at completing the `task`. Invoked + * with (err, results). + * + * @example + * + * // The `retry` function can be used as a stand-alone control flow by passing + * // a callback, as shown below: + * + * // try calling apiMethod 3 times + * async.retry(3, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod 3 times, waiting 200 ms between each retry + * async.retry({times: 3, interval: 200}, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod 10 times with exponential backoff + * // (i.e. intervals of 100, 200, 400, 800, 1600, ... milliseconds) + * async.retry({ + * times: 10, + * interval: function(retryCount) { + * return 50 * Math.pow(2, retryCount); + * } + * }, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod the default 5 times no delay between each retry + * async.retry(apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod only when error condition satisfies, all other + * // errors will abort the retry control flow and return to final callback + * async.retry({ + * errorFilter: function(err) { + * return err.message === 'Temporary error'; // only retry on a specific error + * } + * }, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // to retry individual methods that are not as reliable within other + * // control flow functions, use the `retryable` wrapper: + * async.auto({ + * users: api.getUsers.bind(api), + * payments: async.retryable(3, api.getPayments.bind(api)) + * }, function(err, results) { + * // do something with the results + * }); + * + */ +function retry(opts, task, callback) { + var DEFAULT_TIMES = 5; + var DEFAULT_INTERVAL = 0; + + var options = { + times: DEFAULT_TIMES, + intervalFunc: constant$1(DEFAULT_INTERVAL) + }; + + function parseTimes(acc, t) { + if (typeof t === 'object') { + acc.times = +t.times || DEFAULT_TIMES; + + acc.intervalFunc = typeof t.interval === 'function' ? + t.interval : + constant$1(+t.interval || DEFAULT_INTERVAL); + + acc.errorFilter = t.errorFilter; + } else if (typeof t === 'number' || typeof t === 'string') { + acc.times = +t || DEFAULT_TIMES; + } else { + throw new Error("Invalid arguments for async.retry"); + } + } + + if (arguments.length < 3 && typeof opts === 'function') { + callback = task || noop; + task = opts; + } else { + parseTimes(options, opts); + callback = callback || noop; + } + + if (typeof task !== 'function') { + throw new Error("Invalid arguments for async.retry"); + } + + var _task = wrapAsync(task); + + var attempt = 1; + function retryAttempt() { + _task(function(err) { + if (err && attempt++ < options.times && + (typeof options.errorFilter != 'function' || + options.errorFilter(err))) { + setTimeout(retryAttempt, options.intervalFunc(attempt)); + } else { + callback.apply(null, arguments); + } + }); + } + + retryAttempt(); +} + +/** + * A close relative of [`retry`]{@link module:ControlFlow.retry}. This method + * wraps a task and makes it retryable, rather than immediately calling it + * with retries. + * + * @name retryable + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.retry]{@link module:ControlFlow.retry} + * @category Control Flow + * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - optional + * options, exactly the same as from `retry` + * @param {AsyncFunction} task - the asynchronous function to wrap. + * This function will be passed any arguments passed to the returned wrapper. + * Invoked with (...args, callback). + * @returns {AsyncFunction} The wrapped function, which when invoked, will + * retry on an error, based on the parameters specified in `opts`. + * This function will accept the same parameters as `task`. + * @example + * + * async.auto({ + * dep1: async.retryable(3, getFromFlakyService), + * process: ["dep1", async.retryable(3, function (results, cb) { + * maybeProcessData(results.dep1, cb); + * })] + * }, callback); + */ +var retryable = function (opts, task) { + if (!task) { + task = opts; + opts = null; + } + var _task = wrapAsync(task); + return initialParams(function (args, callback) { + function taskFn(cb) { + _task.apply(null, args.concat(cb)); + } + + if (opts) retry(opts, taskFn, callback); + else retry(taskFn, callback); + + }); +}; + +/** + * Run the functions in the `tasks` collection in series, each one running once + * the previous function has completed. If any functions in the series pass an + * error to its callback, no more functions are run, and `callback` is + * immediately called with the value of the error. Otherwise, `callback` + * receives an array of results when `tasks` have completed. + * + * It is also possible to use an object instead of an array. Each property will + * be run as a function, and the results will be passed to the final `callback` + * as an object instead of an array. This can be a more readable way of handling + * results from {@link async.series}. + * + * **Note** that while many implementations preserve the order of object + * properties, the [ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6) + * explicitly states that + * + * > The mechanics and order of enumerating the properties is not specified. + * + * So if you rely on the order in which your series of functions are executed, + * and want this to work on all platforms, consider using an array. + * + * @name series + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|Object} tasks - A collection containing + * [async functions]{@link AsyncFunction} to run in series. + * Each function can complete with any number of optional `result` values. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed. This function gets a results array (or object) + * containing all the result arguments passed to the `task` callbacks. Invoked + * with (err, result). + * @example + * async.series([ + * function(callback) { + * // do some stuff ... + * callback(null, 'one'); + * }, + * function(callback) { + * // do some more stuff ... + * callback(null, 'two'); + * } + * ], + * // optional callback + * function(err, results) { + * // results is now equal to ['one', 'two'] + * }); + * + * async.series({ + * one: function(callback) { + * setTimeout(function() { + * callback(null, 1); + * }, 200); + * }, + * two: function(callback){ + * setTimeout(function() { + * callback(null, 2); + * }, 100); + * } + * }, function(err, results) { + * // results is now equal to: {one: 1, two: 2} + * }); + */ +function series(tasks, callback) { + _parallel(eachOfSeries, tasks, callback); +} + +/** + * Returns `true` if at least one element in the `coll` satisfies an async test. + * If any iteratee call returns `true`, the main `callback` is immediately + * called. + * + * @name some + * @static + * @memberOf module:Collections + * @method + * @alias any + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in parallel. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + * @example + * + * async.some(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, result) { + * // if result is true then at least one of the files exists + * }); + */ +var some = doParallel(_createTester(Boolean, identity)); + +/** + * The same as [`some`]{@link module:Collections.some} but runs a maximum of `limit` async operations at a time. + * + * @name someLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.some]{@link module:Collections.some} + * @alias anyLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in parallel. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + */ +var someLimit = doParallelLimit(_createTester(Boolean, identity)); + +/** + * The same as [`some`]{@link module:Collections.some} but runs only a single async operation at a time. + * + * @name someSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.some]{@link module:Collections.some} + * @alias anySeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in series. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + */ +var someSeries = doLimit(someLimit, 1); + +/** + * Sorts a list by the results of running each `coll` value through an async + * `iteratee`. + * + * @name sortBy + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a value to use as the sort criteria as + * its `result`. + * Invoked with (item, callback). + * @param {Function} callback - A callback which is called after all the + * `iteratee` functions have finished, or an error occurs. Results is the items + * from the original `coll` sorted by the values returned by the `iteratee` + * calls. Invoked with (err, results). + * @example + * + * async.sortBy(['file1','file2','file3'], function(file, callback) { + * fs.stat(file, function(err, stats) { + * callback(err, stats.mtime); + * }); + * }, function(err, results) { + * // results is now the original array of files sorted by + * // modified date + * }); + * + * // By modifying the callback parameter the + * // sorting order can be influenced: + * + * // ascending order + * async.sortBy([1,9,3,5], function(x, callback) { + * callback(null, x); + * }, function(err,result) { + * // result callback + * }); + * + * // descending order + * async.sortBy([1,9,3,5], function(x, callback) { + * callback(null, x*-1); //<- x*-1 instead of x, turns the order around + * }, function(err,result) { + * // result callback + * }); + */ +function sortBy (coll, iteratee, callback) { + var _iteratee = wrapAsync(iteratee); + map(coll, function (x, callback) { + _iteratee(x, function (err, criteria) { + if (err) return callback(err); + callback(null, {value: x, criteria: criteria}); + }); + }, function (err, results) { + if (err) return callback(err); + callback(null, arrayMap(results.sort(comparator), baseProperty('value'))); + }); + + function comparator(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + } +} + +/** + * Sets a time limit on an asynchronous function. If the function does not call + * its callback within the specified milliseconds, it will be called with a + * timeout error. The code property for the error object will be `'ETIMEDOUT'`. + * + * @name timeout + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} asyncFn - The async function to limit in time. + * @param {number} milliseconds - The specified time limit. + * @param {*} [info] - Any variable you want attached (`string`, `object`, etc) + * to timeout Error for more information.. + * @returns {AsyncFunction} Returns a wrapped function that can be used with any + * of the control flow functions. + * Invoke this function with the same parameters as you would `asyncFunc`. + * @example + * + * function myFunction(foo, callback) { + * doAsyncTask(foo, function(err, data) { + * // handle errors + * if (err) return callback(err); + * + * // do some stuff ... + * + * // return processed data + * return callback(null, data); + * }); + * } + * + * var wrapped = async.timeout(myFunction, 1000); + * + * // call `wrapped` as you would `myFunction` + * wrapped({ bar: 'bar' }, function(err, data) { + * // if `myFunction` takes < 1000 ms to execute, `err` + * // and `data` will have their expected values + * + * // else `err` will be an Error with the code 'ETIMEDOUT' + * }); + */ +function timeout(asyncFn, milliseconds, info) { + var fn = wrapAsync(asyncFn); + + return initialParams(function (args, callback) { + var timedOut = false; + var timer; + + function timeoutCallback() { + var name = asyncFn.name || 'anonymous'; + var error = new Error('Callback function "' + name + '" timed out.'); + error.code = 'ETIMEDOUT'; + if (info) { + error.info = info; + } + timedOut = true; + callback(error); + } + + args.push(function () { + if (!timedOut) { + callback.apply(null, arguments); + clearTimeout(timer); + } + }); + + // setup timer and call original function + timer = setTimeout(timeoutCallback, milliseconds); + fn.apply(null, args); + }); +} + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil; +var nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/** + * The same as [times]{@link module:ControlFlow.times} but runs a maximum of `limit` async operations at a + * time. + * + * @name timesLimit + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.times]{@link module:ControlFlow.times} + * @category Control Flow + * @param {number} count - The number of times to run the function. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see [async.map]{@link module:Collections.map}. + */ +function timeLimit(count, limit, iteratee, callback) { + var _iteratee = wrapAsync(iteratee); + mapLimit(baseRange(0, count, 1), limit, _iteratee, callback); +} + +/** + * Calls the `iteratee` function `n` times, and accumulates results in the same + * manner you would use with [map]{@link module:Collections.map}. + * + * @name times + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.map]{@link module:Collections.map} + * @category Control Flow + * @param {number} n - The number of times to run the function. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see {@link module:Collections.map}. + * @example + * + * // Pretend this is some complicated async factory + * var createUser = function(id, callback) { + * callback(null, { + * id: 'user' + id + * }); + * }; + * + * // generate 5 users + * async.times(5, function(n, next) { + * createUser(n, function(err, user) { + * next(err, user); + * }); + * }, function(err, users) { + * // we should now have 5 users + * }); + */ +var times = doLimit(timeLimit, Infinity); + +/** + * The same as [times]{@link module:ControlFlow.times} but runs only a single async operation at a time. + * + * @name timesSeries + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.times]{@link module:ControlFlow.times} + * @category Control Flow + * @param {number} n - The number of times to run the function. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see {@link module:Collections.map}. + */ +var timesSeries = doLimit(timeLimit, 1); + +/** + * A relative of `reduce`. Takes an Object or Array, and iterates over each + * element in series, each step potentially mutating an `accumulator` value. + * The type of the accumulator defaults to the type of collection passed in. + * + * @name transform + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {*} [accumulator] - The initial state of the transform. If omitted, + * it will default to an empty Object or Array, depending on the type of `coll` + * @param {AsyncFunction} iteratee - A function applied to each item in the + * collection that potentially modifies the accumulator. + * Invoked with (accumulator, item, key, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result is the transformed accumulator. + * Invoked with (err, result). + * @example + * + * async.transform([1,2,3], function(acc, item, index, callback) { + * // pointless async: + * process.nextTick(function() { + * acc.push(item * 2) + * callback(null) + * }); + * }, function(err, result) { + * // result is now equal to [2, 4, 6] + * }); + * + * @example + * + * async.transform({a: 1, b: 2, c: 3}, function (obj, val, key, callback) { + * setImmediate(function () { + * obj[key] = val * 2; + * callback(); + * }) + * }, function (err, result) { + * // result is equal to {a: 2, b: 4, c: 6} + * }) + */ +function transform (coll, accumulator, iteratee, callback) { + if (arguments.length <= 3) { + callback = iteratee; + iteratee = accumulator; + accumulator = isArray(coll) ? [] : {}; + } + callback = once(callback || noop); + var _iteratee = wrapAsync(iteratee); + + eachOf(coll, function(v, k, cb) { + _iteratee(accumulator, v, k, cb); + }, function(err) { + callback(err, accumulator); + }); +} + +/** + * It runs each task in series but stops whenever any of the functions were + * successful. If one of the tasks were successful, the `callback` will be + * passed the result of the successful task. If all tasks fail, the callback + * will be passed the error and result (if any) of the final attempt. + * + * @name tryEach + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array|Iterable|Object} tasks - A collection containing functions to + * run, each function is passed a `callback(err, result)` it must call on + * completion with an error `err` (which can be `null`) and an optional `result` + * value. + * @param {Function} [callback] - An optional callback which is called when one + * of the tasks has succeeded, or all have failed. It receives the `err` and + * `result` arguments of the last attempt at completing the `task`. Invoked with + * (err, results). + * @example + * async.tryEach([ + * function getDataFromFirstWebsite(callback) { + * // Try getting the data from the first website + * callback(err, data); + * }, + * function getDataFromSecondWebsite(callback) { + * // First website failed, + * // Try getting the data from the backup website + * callback(err, data); + * } + * ], + * // optional callback + * function(err, results) { + * Now do something with the data. + * }); + * + */ +function tryEach(tasks, callback) { + var error = null; + var result; + callback = callback || noop; + eachSeries(tasks, function(task, callback) { + wrapAsync(task)(function (err, res/*, ...args*/) { + if (arguments.length > 2) { + result = slice(arguments, 1); + } else { + result = res; + } + error = err; + callback(!err); + }); + }, function () { + callback(error, result); + }); +} + +/** + * Undoes a [memoize]{@link module:Utils.memoize}d function, reverting it to the original, + * unmemoized form. Handy for testing. + * + * @name unmemoize + * @static + * @memberOf module:Utils + * @method + * @see [async.memoize]{@link module:Utils.memoize} + * @category Util + * @param {AsyncFunction} fn - the memoized function + * @returns {AsyncFunction} a function that calls the original unmemoized function + */ +function unmemoize(fn) { + return function () { + return (fn.unmemoized || fn).apply(null, arguments); + }; +} + +/** + * Repeatedly call `iteratee`, while `test` returns `true`. Calls `callback` when + * stopped, or an error occurs. + * + * @name whilst + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Function} test - synchronous truth test to perform before each + * execution of `iteratee`. Invoked with (). + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` passes. Invoked with (callback). + * @param {Function} [callback] - A callback which is called after the test + * function has failed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + * @returns undefined + * @example + * + * var count = 0; + * async.whilst( + * function() { return count < 5; }, + * function(callback) { + * count++; + * setTimeout(function() { + * callback(null, count); + * }, 1000); + * }, + * function (err, n) { + * // 5 seconds have passed, n = 5 + * } + * ); + */ +function whilst(test, iteratee, callback) { + callback = onlyOnce(callback || noop); + var _iteratee = wrapAsync(iteratee); + if (!test()) return callback(null); + var next = function(err/*, ...args*/) { + if (err) return callback(err); + if (test()) return _iteratee(next); + var args = slice(arguments, 1); + callback.apply(null, [null].concat(args)); + }; + _iteratee(next); +} + +/** + * Repeatedly call `iteratee` until `test` returns `true`. Calls `callback` when + * stopped, or an error occurs. `callback` will be passed an error and any + * arguments passed to the final `iteratee`'s callback. + * + * The inverse of [whilst]{@link module:ControlFlow.whilst}. + * + * @name until + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.whilst]{@link module:ControlFlow.whilst} + * @category Control Flow + * @param {Function} test - synchronous truth test to perform before each + * execution of `iteratee`. Invoked with (). + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` fails. Invoked with (callback). + * @param {Function} [callback] - A callback which is called after the test + * function has passed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + */ +function until(test, iteratee, callback) { + whilst(function() { + return !test.apply(this, arguments); + }, iteratee, callback); +} + +/** + * Runs the `tasks` array of functions in series, each passing their results to + * the next in the array. However, if any of the `tasks` pass an error to their + * own callback, the next function is not executed, and the main `callback` is + * immediately called with the error. + * + * @name waterfall + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Array} tasks - An array of [async functions]{@link AsyncFunction} + * to run. + * Each function should complete with any number of `result` values. + * The `result` values will be passed as arguments, in order, to the next task. + * @param {Function} [callback] - An optional callback to run once all the + * functions have completed. This will be passed the results of the last task's + * callback. Invoked with (err, [results]). + * @returns undefined + * @example + * + * async.waterfall([ + * function(callback) { + * callback(null, 'one', 'two'); + * }, + * function(arg1, arg2, callback) { + * // arg1 now equals 'one' and arg2 now equals 'two' + * callback(null, 'three'); + * }, + * function(arg1, callback) { + * // arg1 now equals 'three' + * callback(null, 'done'); + * } + * ], function (err, result) { + * // result now equals 'done' + * }); + * + * // Or, with named functions: + * async.waterfall([ + * myFirstFunction, + * mySecondFunction, + * myLastFunction, + * ], function (err, result) { + * // result now equals 'done' + * }); + * function myFirstFunction(callback) { + * callback(null, 'one', 'two'); + * } + * function mySecondFunction(arg1, arg2, callback) { + * // arg1 now equals 'one' and arg2 now equals 'two' + * callback(null, 'three'); + * } + * function myLastFunction(arg1, callback) { + * // arg1 now equals 'three' + * callback(null, 'done'); + * } + */ +var waterfall = function(tasks, callback) { + callback = once(callback || noop); + if (!isArray(tasks)) return callback(new Error('First argument to waterfall must be an array of functions')); + if (!tasks.length) return callback(); + var taskIndex = 0; + + function nextTask(args) { + var task = wrapAsync(tasks[taskIndex++]); + args.push(onlyOnce(next)); + task.apply(null, args); + } + + function next(err/*, ...args*/) { + if (err || taskIndex === tasks.length) { + return callback.apply(null, arguments); + } + nextTask(slice(arguments, 1)); + } + + nextTask([]); +}; + +/** + * An "async function" in the context of Async is an asynchronous function with + * a variable number of parameters, with the final parameter being a callback. + * (`function (arg1, arg2, ..., callback) {}`) + * The final callback is of the form `callback(err, results...)`, which must be + * called once the function is completed. The callback should be called with a + * Error as its first argument to signal that an error occurred. + * Otherwise, if no error occurred, it should be called with `null` as the first + * argument, and any additional `result` arguments that may apply, to signal + * successful completion. + * The callback must be called exactly once, ideally on a later tick of the + * JavaScript event loop. + * + * This type of function is also referred to as a "Node-style async function", + * or a "continuation passing-style function" (CPS). Most of the methods of this + * library are themselves CPS/Node-style async functions, or functions that + * return CPS/Node-style async functions. + * + * Wherever we accept a Node-style async function, we also directly accept an + * [ES2017 `async` function]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function}. + * In this case, the `async` function will not be passed a final callback + * argument, and any thrown error will be used as the `err` argument of the + * implicit callback, and the return value will be used as the `result` value. + * (i.e. a `rejected` of the returned Promise becomes the `err` callback + * argument, and a `resolved` value becomes the `result`.) + * + * Note, due to JavaScript limitations, we can only detect native `async` + * functions and not transpilied implementations. + * Your environment must have `async`/`await` support for this to work. + * (e.g. Node > v7.6, or a recent version of a modern browser). + * If you are using `async` functions through a transpiler (e.g. Babel), you + * must still wrap the function with [asyncify]{@link module:Utils.asyncify}, + * because the `async function` will be compiled to an ordinary function that + * returns a promise. + * + * @typedef {Function} AsyncFunction + * @static + */ + +/** + * Async is a utility module which provides straight-forward, powerful functions + * for working with asynchronous JavaScript. Although originally designed for + * use with [Node.js](http://nodejs.org) and installable via + * `npm install --save async`, it can also be used directly in the browser. + * @module async + * @see AsyncFunction + */ + + +/** + * A collection of `async` functions for manipulating collections, such as + * arrays and objects. + * @module Collections + */ + +/** + * A collection of `async` functions for controlling the flow through a script. + * @module ControlFlow + */ + +/** + * A collection of `async` utility functions. + * @module Utils + */ + +var index = { + apply: apply, + applyEach: applyEach, + applyEachSeries: applyEachSeries, + asyncify: asyncify, + auto: auto, + autoInject: autoInject, + cargo: cargo, + compose: compose, + concat: concat, + concatLimit: concatLimit, + concatSeries: concatSeries, + constant: constant, + detect: detect, + detectLimit: detectLimit, + detectSeries: detectSeries, + dir: dir, + doDuring: doDuring, + doUntil: doUntil, + doWhilst: doWhilst, + during: during, + each: eachLimit, + eachLimit: eachLimit$1, + eachOf: eachOf, + eachOfLimit: eachOfLimit, + eachOfSeries: eachOfSeries, + eachSeries: eachSeries, + ensureAsync: ensureAsync, + every: every, + everyLimit: everyLimit, + everySeries: everySeries, + filter: filter, + filterLimit: filterLimit, + filterSeries: filterSeries, + forever: forever, + groupBy: groupBy, + groupByLimit: groupByLimit, + groupBySeries: groupBySeries, + log: log, + map: map, + mapLimit: mapLimit, + mapSeries: mapSeries, + mapValues: mapValues, + mapValuesLimit: mapValuesLimit, + mapValuesSeries: mapValuesSeries, + memoize: memoize, + nextTick: nextTick, + parallel: parallelLimit, + parallelLimit: parallelLimit$1, + priorityQueue: priorityQueue, + queue: queue$1, + race: race, + reduce: reduce, + reduceRight: reduceRight, + reflect: reflect, + reflectAll: reflectAll, + reject: reject, + rejectLimit: rejectLimit, + rejectSeries: rejectSeries, + retry: retry, + retryable: retryable, + seq: seq, + series: series, + setImmediate: setImmediate$1, + some: some, + someLimit: someLimit, + someSeries: someSeries, + sortBy: sortBy, + timeout: timeout, + times: times, + timesLimit: timeLimit, + timesSeries: timesSeries, + transform: transform, + tryEach: tryEach, + unmemoize: unmemoize, + until: until, + waterfall: waterfall, + whilst: whilst, + + // aliases + all: every, + allLimit: everyLimit, + allSeries: everySeries, + any: some, + anyLimit: someLimit, + anySeries: someSeries, + find: detect, + findLimit: detectLimit, + findSeries: detectSeries, + forEach: eachLimit, + forEachSeries: eachSeries, + forEachLimit: eachLimit$1, + forEachOf: eachOf, + forEachOfSeries: eachOfSeries, + forEachOfLimit: eachOfLimit, + inject: reduce, + foldl: reduce, + foldr: reduceRight, + select: filter, + selectLimit: filterLimit, + selectSeries: filterSeries, + wrapSync: asyncify +}; + +exports['default'] = index; +exports.apply = apply; +exports.applyEach = applyEach; +exports.applyEachSeries = applyEachSeries; +exports.asyncify = asyncify; +exports.auto = auto; +exports.autoInject = autoInject; +exports.cargo = cargo; +exports.compose = compose; +exports.concat = concat; +exports.concatLimit = concatLimit; +exports.concatSeries = concatSeries; +exports.constant = constant; +exports.detect = detect; +exports.detectLimit = detectLimit; +exports.detectSeries = detectSeries; +exports.dir = dir; +exports.doDuring = doDuring; +exports.doUntil = doUntil; +exports.doWhilst = doWhilst; +exports.during = during; +exports.each = eachLimit; +exports.eachLimit = eachLimit$1; +exports.eachOf = eachOf; +exports.eachOfLimit = eachOfLimit; +exports.eachOfSeries = eachOfSeries; +exports.eachSeries = eachSeries; +exports.ensureAsync = ensureAsync; +exports.every = every; +exports.everyLimit = everyLimit; +exports.everySeries = everySeries; +exports.filter = filter; +exports.filterLimit = filterLimit; +exports.filterSeries = filterSeries; +exports.forever = forever; +exports.groupBy = groupBy; +exports.groupByLimit = groupByLimit; +exports.groupBySeries = groupBySeries; +exports.log = log; +exports.map = map; +exports.mapLimit = mapLimit; +exports.mapSeries = mapSeries; +exports.mapValues = mapValues; +exports.mapValuesLimit = mapValuesLimit; +exports.mapValuesSeries = mapValuesSeries; +exports.memoize = memoize; +exports.nextTick = nextTick; +exports.parallel = parallelLimit; +exports.parallelLimit = parallelLimit$1; +exports.priorityQueue = priorityQueue; +exports.queue = queue$1; +exports.race = race; +exports.reduce = reduce; +exports.reduceRight = reduceRight; +exports.reflect = reflect; +exports.reflectAll = reflectAll; +exports.reject = reject; +exports.rejectLimit = rejectLimit; +exports.rejectSeries = rejectSeries; +exports.retry = retry; +exports.retryable = retryable; +exports.seq = seq; +exports.series = series; +exports.setImmediate = setImmediate$1; +exports.some = some; +exports.someLimit = someLimit; +exports.someSeries = someSeries; +exports.sortBy = sortBy; +exports.timeout = timeout; +exports.times = times; +exports.timesLimit = timeLimit; +exports.timesSeries = timesSeries; +exports.transform = transform; +exports.tryEach = tryEach; +exports.unmemoize = unmemoize; +exports.until = until; +exports.waterfall = waterfall; +exports.whilst = whilst; +exports.all = every; +exports.allLimit = everyLimit; +exports.allSeries = everySeries; +exports.any = some; +exports.anyLimit = someLimit; +exports.anySeries = someSeries; +exports.find = detect; +exports.findLimit = detectLimit; +exports.findSeries = detectSeries; +exports.forEach = eachLimit; +exports.forEachSeries = eachSeries; +exports.forEachLimit = eachLimit$1; +exports.forEachOf = eachOf; +exports.forEachOfSeries = eachOfSeries; +exports.forEachOfLimit = eachOfLimit; +exports.inject = reduce; +exports.foldl = reduce; +exports.foldr = reduceRight; +exports.select = filter; +exports.selectLimit = filterLimit; +exports.selectSeries = filterSeries; +exports.wrapSync = asyncify; + +Object.defineProperty(exports, '__esModule', { value: true }); + +}))); + +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("timers").setImmediate) +},{"_process":109,"timers":1415}],43:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = eachLimit; + +var _eachOfLimit = require('./internal/eachOfLimit'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _withoutIndex = require('./internal/withoutIndex'); + +var _withoutIndex2 = _interopRequireDefault(_withoutIndex); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time. + * + * @name eachLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.each]{@link module:Collections.each} + * @alias forEachLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The array index is not passed to the iteratee. + * If you need the index, use `eachOfLimit`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + */ +function eachLimit(coll, limit, iteratee, callback) { + (0, _eachOfLimit2.default)(limit)(coll, (0, _withoutIndex2.default)((0, _wrapAsync2.default)(iteratee)), callback); +} +module.exports = exports['default']; +},{"./internal/eachOfLimit":47,"./internal/withoutIndex":55,"./internal/wrapAsync":56}],44:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _eachLimit = require('./eachLimit'); + +var _eachLimit2 = _interopRequireDefault(_eachLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time. + * + * @name eachSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.each]{@link module:Collections.each} + * @alias forEachSeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each + * item in `coll`. + * The array index is not passed to the iteratee. + * If you need the index, use `eachOfSeries`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + */ +exports.default = (0, _doLimit2.default)(_eachLimit2.default, 1); +module.exports = exports['default']; +},{"./eachLimit":43,"./internal/doLimit":46}],45:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +// A temporary value used to identify if the loop should be broken. +// See #1064, #1293 +exports.default = {}; +module.exports = exports["default"]; +},{}],46:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = doLimit; +function doLimit(fn, limit) { + return function (iterable, iteratee, callback) { + return fn(iterable, limit, iteratee, callback); + }; +} +module.exports = exports["default"]; +},{}],47:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _eachOfLimit; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _once = require('./once'); + +var _once2 = _interopRequireDefault(_once); + +var _iterator = require('./iterator'); + +var _iterator2 = _interopRequireDefault(_iterator); + +var _onlyOnce = require('./onlyOnce'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _breakLoop = require('./breakLoop'); + +var _breakLoop2 = _interopRequireDefault(_breakLoop); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _eachOfLimit(limit) { + return function (obj, iteratee, callback) { + callback = (0, _once2.default)(callback || _noop2.default); + if (limit <= 0 || !obj) { + return callback(null); + } + var nextElem = (0, _iterator2.default)(obj); + var done = false; + var running = 0; + var looping = false; + + function iterateeCallback(err, value) { + running -= 1; + if (err) { + done = true; + callback(err); + } else if (value === _breakLoop2.default || done && running <= 0) { + done = true; + return callback(null); + } else if (!looping) { + replenish(); + } + } + + function replenish() { + looping = true; + while (running < limit && !done) { + var elem = nextElem(); + if (elem === null) { + done = true; + if (running <= 0) { + callback(null); + } + return; + } + running += 1; + iteratee(elem.value, elem.key, (0, _onlyOnce2.default)(iterateeCallback)); + } + looping = false; + } + + replenish(); + }; +} +module.exports = exports['default']; +},{"./breakLoop":45,"./iterator":50,"./once":51,"./onlyOnce":52,"lodash/noop":930}],48:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (coll) { + return iteratorSymbol && coll[iteratorSymbol] && coll[iteratorSymbol](); +}; + +var iteratorSymbol = typeof Symbol === 'function' && Symbol.iterator; + +module.exports = exports['default']; +},{}],49:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (fn) { + return function () /*...args, callback*/{ + var args = (0, _slice2.default)(arguments); + var callback = args.pop(); + fn.call(this, args, callback); + }; +}; + +var _slice = require('./slice'); + +var _slice2 = _interopRequireDefault(_slice); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = exports['default']; +},{"./slice":54}],50:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = iterator; + +var _isArrayLike = require('lodash/isArrayLike'); + +var _isArrayLike2 = _interopRequireDefault(_isArrayLike); + +var _getIterator = require('./getIterator'); + +var _getIterator2 = _interopRequireDefault(_getIterator); + +var _keys = require('lodash/keys'); + +var _keys2 = _interopRequireDefault(_keys); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function createArrayIterator(coll) { + var i = -1; + var len = coll.length; + return function next() { + return ++i < len ? { value: coll[i], key: i } : null; + }; +} + +function createES2015Iterator(iterator) { + var i = -1; + return function next() { + var item = iterator.next(); + if (item.done) return null; + i++; + return { value: item.value, key: i }; + }; +} + +function createObjectIterator(obj) { + var okeys = (0, _keys2.default)(obj); + var i = -1; + var len = okeys.length; + return function next() { + var key = okeys[++i]; + return i < len ? { value: obj[key], key: key } : null; + }; +} + +function iterator(coll) { + if ((0, _isArrayLike2.default)(coll)) { + return createArrayIterator(coll); + } + + var iterator = (0, _getIterator2.default)(coll); + return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll); +} +module.exports = exports['default']; +},{"./getIterator":48,"lodash/isArrayLike":922,"lodash/keys":929}],51:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = once; +function once(fn) { + return function () { + if (fn === null) return; + var callFn = fn; + fn = null; + callFn.apply(this, arguments); + }; +} +module.exports = exports["default"]; +},{}],52:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = onlyOnce; +function onlyOnce(fn) { + return function () { + if (fn === null) throw new Error("Callback was already called."); + var callFn = fn; + fn = null; + callFn.apply(this, arguments); + }; +} +module.exports = exports["default"]; +},{}],53:[function(require,module,exports){ +(function (process,setImmediate){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.hasNextTick = exports.hasSetImmediate = undefined; +exports.fallback = fallback; +exports.wrap = wrap; + +var _slice = require('./slice'); + +var _slice2 = _interopRequireDefault(_slice); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var hasSetImmediate = exports.hasSetImmediate = typeof setImmediate === 'function' && setImmediate; +var hasNextTick = exports.hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function'; + +function fallback(fn) { + setTimeout(fn, 0); +} + +function wrap(defer) { + return function (fn /*, ...args*/) { + var args = (0, _slice2.default)(arguments, 1); + defer(function () { + fn.apply(null, args); + }); + }; +} + +var _defer; + +if (hasSetImmediate) { + _defer = setImmediate; +} else if (hasNextTick) { + _defer = process.nextTick; +} else { + _defer = fallback; +} + +exports.default = wrap(_defer); +}).call(this,require('_process'),require("timers").setImmediate) +},{"./slice":54,"_process":109,"timers":1415}],54:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = slice; +function slice(arrayLike, start) { + start = start | 0; + var newLen = Math.max(arrayLike.length - start, 0); + var newArr = Array(newLen); + for (var idx = 0; idx < newLen; idx++) { + newArr[idx] = arrayLike[start + idx]; + } + return newArr; +} +module.exports = exports["default"]; +},{}],55:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _withoutIndex; +function _withoutIndex(iteratee) { + return function (value, index, callback) { + return iteratee(value, callback); + }; +} +module.exports = exports["default"]; +},{}],56:[function(require,module,exports){ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.isAsync = undefined; + +var _asyncify = require('../asyncify'); + +var _asyncify2 = _interopRequireDefault(_asyncify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var supportsSymbol = typeof Symbol === 'function'; + +function isAsync(fn) { + return supportsSymbol && fn[Symbol.toStringTag] === 'AsyncFunction'; +} + +function wrapAsync(asyncFn) { + return isAsync(asyncFn) ? (0, _asyncify2.default)(asyncFn) : asyncFn; +} + +exports.default = wrapAsync; +exports.isAsync = isAsync; +},{"../asyncify":41}],57:[function(require,module,exports){ + +/*! + * Copyright 2010 LearnBoost + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Module dependencies. + */ + +var crypto = require('crypto') + , parse = require('url').parse + ; + +/** + * Valid keys. + */ + +var keys = + [ 'acl' + , 'location' + , 'logging' + , 'notification' + , 'partNumber' + , 'policy' + , 'requestPayment' + , 'torrent' + , 'uploadId' + , 'uploads' + , 'versionId' + , 'versioning' + , 'versions' + , 'website' + ] + +/** + * Return an "Authorization" header value with the given `options` + * in the form of "AWS :" + * + * @param {Object} options + * @return {String} + * @api private + */ + +function authorization (options) { + return 'AWS ' + options.key + ':' + sign(options) +} + +module.exports = authorization +module.exports.authorization = authorization + +/** + * Simple HMAC-SHA1 Wrapper + * + * @param {Object} options + * @return {String} + * @api private + */ + +function hmacSha1 (options) { + return crypto.createHmac('sha1', options.secret).update(options.message).digest('base64') +} + +module.exports.hmacSha1 = hmacSha1 + +/** + * Create a base64 sha1 HMAC for `options`. + * + * @param {Object} options + * @return {String} + * @api private + */ + +function sign (options) { + options.message = stringToSign(options) + return hmacSha1(options) +} +module.exports.sign = sign + +/** + * Create a base64 sha1 HMAC for `options`. + * + * Specifically to be used with S3 presigned URLs + * + * @param {Object} options + * @return {String} + * @api private + */ + +function signQuery (options) { + options.message = queryStringToSign(options) + return hmacSha1(options) +} +module.exports.signQuery= signQuery + +/** + * Return a string for sign() with the given `options`. + * + * Spec: + * + * \n + * \n + * \n + * \n + * [headers\n] + * + * + * @param {Object} options + * @return {String} + * @api private + */ + +function stringToSign (options) { + var headers = options.amazonHeaders || '' + if (headers) headers += '\n' + var r = + [ options.verb + , options.md5 + , options.contentType + , options.date ? options.date.toUTCString() : '' + , headers + options.resource + ] + return r.join('\n') +} +module.exports.stringToSign = stringToSign + +/** + * Return a string for sign() with the given `options`, but is meant exclusively + * for S3 presigned URLs + * + * Spec: + * + * \n + * + * + * @param {Object} options + * @return {String} + * @api private + */ + +function queryStringToSign (options){ + return 'GET\n\n\n' + options.date + '\n' + options.resource +} +module.exports.queryStringToSign = queryStringToSign + +/** + * Perform the following: + * + * - ignore non-amazon headers + * - lowercase fields + * - sort lexicographically + * - trim whitespace between ":" + * - join with newline + * + * @param {Object} headers + * @return {String} + * @api private + */ + +function canonicalizeHeaders (headers) { + var buf = [] + , fields = Object.keys(headers) + ; + for (var i = 0, len = fields.length; i < len; ++i) { + var field = fields[i] + , val = headers[field] + , field = field.toLowerCase() + ; + if (0 !== field.indexOf('x-amz')) continue + buf.push(field + ':' + val) + } + return buf.sort().join('\n') +} +module.exports.canonicalizeHeaders = canonicalizeHeaders + +/** + * Perform the following: + * + * - ignore non sub-resources + * - sort lexicographically + * + * @param {String} resource + * @return {String} + * @api private + */ + +function canonicalizeResource (resource) { + var url = parse(resource, true) + , path = url.pathname + , buf = [] + ; + + Object.keys(url.query).forEach(function(key){ + if (!~keys.indexOf(key)) return + var val = '' == url.query[key] ? '' : '=' + encodeURIComponent(url.query[key]) + buf.push(key + val) + }) + + return path + (buf.length ? '?' + buf.sort().join('&') : '') +} +module.exports.canonicalizeResource = canonicalizeResource + +},{"crypto":470,"url":1433}],58:[function(require,module,exports){ +(function (process,Buffer){ +var aws4 = exports, + url = require('url'), + querystring = require('querystring'), + crypto = require('crypto'), + lru = require('./lru'), + credentialsCache = lru(1000) + +// http://docs.amazonwebservices.com/general/latest/gr/signature-version-4.html + +function hmac(key, string, encoding) { + return crypto.createHmac('sha256', key).update(string, 'utf8').digest(encoding) +} + +function hash(string, encoding) { + return crypto.createHash('sha256').update(string, 'utf8').digest(encoding) +} + +// This function assumes the string has already been percent encoded +function encodeRfc3986(urlEncodedString) { + return urlEncodedString.replace(/[!'()*]/g, function(c) { + return '%' + c.charCodeAt(0).toString(16).toUpperCase() + }) +} + +// request: { path | body, [host], [method], [headers], [service], [region] } +// credentials: { accessKeyId, secretAccessKey, [sessionToken] } +function RequestSigner(request, credentials) { + + if (typeof request === 'string') request = url.parse(request) + + var headers = request.headers = (request.headers || {}), + hostParts = this.matchHost(request.hostname || request.host || headers.Host || headers.host) + + this.request = request + this.credentials = credentials || this.defaultCredentials() + + this.service = request.service || hostParts[0] || '' + this.region = request.region || hostParts[1] || 'us-east-1' + + // SES uses a different domain from the service name + if (this.service === 'email') this.service = 'ses' + + if (!request.method && request.body) + request.method = 'POST' + + if (!headers.Host && !headers.host) { + headers.Host = request.hostname || request.host || this.createHost() + + // If a port is specified explicitly, use it as is + if (request.port) + headers.Host += ':' + request.port + } + if (!request.hostname && !request.host) + request.hostname = headers.Host || headers.host + + this.isCodeCommitGit = this.service === 'codecommit' && request.method === 'GIT' +} + +RequestSigner.prototype.matchHost = function(host) { + var match = (host || '').match(/([^\.]+)\.(?:([^\.]*)\.)?amazonaws\.com(\.cn)?$/) + var hostParts = (match || []).slice(1, 3) + + // ES's hostParts are sometimes the other way round, if the value that is expected + // to be region equals ‘es’ switch them back + // e.g. search-cluster-name-aaaa00aaaa0aaa0aaaaaaa0aaa.us-east-1.es.amazonaws.com + if (hostParts[1] === 'es') + hostParts = hostParts.reverse() + + return hostParts +} + +// http://docs.aws.amazon.com/general/latest/gr/rande.html +RequestSigner.prototype.isSingleRegion = function() { + // Special case for S3 and SimpleDB in us-east-1 + if (['s3', 'sdb'].indexOf(this.service) >= 0 && this.region === 'us-east-1') return true + + return ['cloudfront', 'ls', 'route53', 'iam', 'importexport', 'sts'] + .indexOf(this.service) >= 0 +} + +RequestSigner.prototype.createHost = function() { + var region = this.isSingleRegion() ? '' : + (this.service === 's3' && this.region !== 'us-east-1' ? '-' : '.') + this.region, + service = this.service === 'ses' ? 'email' : this.service + return service + region + '.amazonaws.com' +} + +RequestSigner.prototype.prepareRequest = function() { + this.parsePath() + + var request = this.request, headers = request.headers, query + + if (request.signQuery) { + + this.parsedPath.query = query = this.parsedPath.query || {} + + if (this.credentials.sessionToken) + query['X-Amz-Security-Token'] = this.credentials.sessionToken + + if (this.service === 's3' && !query['X-Amz-Expires']) + query['X-Amz-Expires'] = 86400 + + if (query['X-Amz-Date']) + this.datetime = query['X-Amz-Date'] + else + query['X-Amz-Date'] = this.getDateTime() + + query['X-Amz-Algorithm'] = 'AWS4-HMAC-SHA256' + query['X-Amz-Credential'] = this.credentials.accessKeyId + '/' + this.credentialString() + query['X-Amz-SignedHeaders'] = this.signedHeaders() + + } else { + + if (!request.doNotModifyHeaders && !this.isCodeCommitGit) { + if (request.body && !headers['Content-Type'] && !headers['content-type']) + headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8' + + if (request.body && !headers['Content-Length'] && !headers['content-length']) + headers['Content-Length'] = Buffer.byteLength(request.body) + + if (this.credentials.sessionToken && !headers['X-Amz-Security-Token'] && !headers['x-amz-security-token']) + headers['X-Amz-Security-Token'] = this.credentials.sessionToken + + if (this.service === 's3' && !headers['X-Amz-Content-Sha256'] && !headers['x-amz-content-sha256']) + headers['X-Amz-Content-Sha256'] = hash(this.request.body || '', 'hex') + + if (headers['X-Amz-Date'] || headers['x-amz-date']) + this.datetime = headers['X-Amz-Date'] || headers['x-amz-date'] + else + headers['X-Amz-Date'] = this.getDateTime() + } + + delete headers.Authorization + delete headers.authorization + } +} + +RequestSigner.prototype.sign = function() { + if (!this.parsedPath) this.prepareRequest() + + if (this.request.signQuery) { + this.parsedPath.query['X-Amz-Signature'] = this.signature() + } else { + this.request.headers.Authorization = this.authHeader() + } + + this.request.path = this.formatPath() + + return this.request +} + +RequestSigner.prototype.getDateTime = function() { + if (!this.datetime) { + var headers = this.request.headers, + date = new Date(headers.Date || headers.date || new Date) + + this.datetime = date.toISOString().replace(/[:\-]|\.\d{3}/g, '') + + // Remove the trailing 'Z' on the timestamp string for CodeCommit git access + if (this.isCodeCommitGit) this.datetime = this.datetime.slice(0, -1) + } + return this.datetime +} + +RequestSigner.prototype.getDate = function() { + return this.getDateTime().substr(0, 8) +} + +RequestSigner.prototype.authHeader = function() { + return [ + 'AWS4-HMAC-SHA256 Credential=' + this.credentials.accessKeyId + '/' + this.credentialString(), + 'SignedHeaders=' + this.signedHeaders(), + 'Signature=' + this.signature(), + ].join(', ') +} + +RequestSigner.prototype.signature = function() { + var date = this.getDate(), + cacheKey = [this.credentials.secretAccessKey, date, this.region, this.service].join(), + kDate, kRegion, kService, kCredentials = credentialsCache.get(cacheKey) + if (!kCredentials) { + kDate = hmac('AWS4' + this.credentials.secretAccessKey, date) + kRegion = hmac(kDate, this.region) + kService = hmac(kRegion, this.service) + kCredentials = hmac(kService, 'aws4_request') + credentialsCache.set(cacheKey, kCredentials) + } + return hmac(kCredentials, this.stringToSign(), 'hex') +} + +RequestSigner.prototype.stringToSign = function() { + return [ + 'AWS4-HMAC-SHA256', + this.getDateTime(), + this.credentialString(), + hash(this.canonicalString(), 'hex'), + ].join('\n') +} + +RequestSigner.prototype.canonicalString = function() { + if (!this.parsedPath) this.prepareRequest() + + var pathStr = this.parsedPath.path, + query = this.parsedPath.query, + headers = this.request.headers, + queryStr = '', + normalizePath = this.service !== 's3', + decodePath = this.service === 's3' || this.request.doNotEncodePath, + decodeSlashesInPath = this.service === 's3', + firstValOnly = this.service === 's3', + bodyHash + + if (this.service === 's3' && this.request.signQuery) { + bodyHash = 'UNSIGNED-PAYLOAD' + } else if (this.isCodeCommitGit) { + bodyHash = '' + } else { + bodyHash = headers['X-Amz-Content-Sha256'] || headers['x-amz-content-sha256'] || + hash(this.request.body || '', 'hex') + } + + if (query) { + queryStr = encodeRfc3986(querystring.stringify(Object.keys(query).sort().reduce(function(obj, key) { + if (!key) return obj + obj[key] = !Array.isArray(query[key]) ? query[key] : + (firstValOnly ? query[key][0] : query[key].slice().sort()) + return obj + }, {}))) + } + if (pathStr !== '/') { + if (normalizePath) pathStr = pathStr.replace(/\/{2,}/g, '/') + pathStr = pathStr.split('/').reduce(function(path, piece) { + if (normalizePath && piece === '..') { + path.pop() + } else if (!normalizePath || piece !== '.') { + if (decodePath) piece = decodeURIComponent(piece) + path.push(encodeRfc3986(encodeURIComponent(piece))) + } + return path + }, []).join('/') + if (pathStr[0] !== '/') pathStr = '/' + pathStr + if (decodeSlashesInPath) pathStr = pathStr.replace(/%2F/g, '/') + } + + return [ + this.request.method || 'GET', + pathStr, + queryStr, + this.canonicalHeaders() + '\n', + this.signedHeaders(), + bodyHash, + ].join('\n') +} + +RequestSigner.prototype.canonicalHeaders = function() { + var headers = this.request.headers + function trimAll(header) { + return header.toString().trim().replace(/\s+/g, ' ') + } + return Object.keys(headers) + .sort(function(a, b) { return a.toLowerCase() < b.toLowerCase() ? -1 : 1 }) + .map(function(key) { return key.toLowerCase() + ':' + trimAll(headers[key]) }) + .join('\n') +} + +RequestSigner.prototype.signedHeaders = function() { + return Object.keys(this.request.headers) + .map(function(key) { return key.toLowerCase() }) + .sort() + .join(';') +} + +RequestSigner.prototype.credentialString = function() { + return [ + this.getDate(), + this.region, + this.service, + 'aws4_request', + ].join('/') +} + +RequestSigner.prototype.defaultCredentials = function() { + var env = process.env + return { + accessKeyId: env.AWS_ACCESS_KEY_ID || env.AWS_ACCESS_KEY, + secretAccessKey: env.AWS_SECRET_ACCESS_KEY || env.AWS_SECRET_KEY, + sessionToken: env.AWS_SESSION_TOKEN, + } +} + +RequestSigner.prototype.parsePath = function() { + var path = this.request.path || '/', + queryIx = path.indexOf('?'), + query = null + + if (queryIx >= 0) { + query = querystring.parse(path.slice(queryIx + 1)) + path = path.slice(0, queryIx) + } + + // S3 doesn't always encode characters > 127 correctly and + // all services don't encode characters > 255 correctly + // So if there are non-reserved chars (and it's not already all % encoded), just encode them all + if (/[^0-9A-Za-z!'()*\-._~%/]/.test(path)) { + path = path.split('/').map(function(piece) { + return encodeURIComponent(decodeURIComponent(piece)) + }).join('/') + } + + this.parsedPath = { + path: path, + query: query, + } +} + +RequestSigner.prototype.formatPath = function() { + var path = this.parsedPath.path, + query = this.parsedPath.query + + if (!query) return path + + // Services don't support empty query string keys + if (query[''] != null) delete query[''] + + return path + '?' + encodeRfc3986(querystring.stringify(query)) +} + +aws4.RequestSigner = RequestSigner + +aws4.sign = function(request, credentials) { + return new RequestSigner(request, credentials).sign() +} + +}).call(this,require('_process'),require("buffer").Buffer) +},{"./lru":59,"_process":109,"buffer":113,"crypto":470,"querystring":1035,"url":1433}],59:[function(require,module,exports){ +module.exports = function(size) { + return new LruCache(size) +} + +function LruCache(size) { + this.capacity = size | 0 + this.map = Object.create(null) + this.list = new DoublyLinkedList() +} + +LruCache.prototype.get = function(key) { + var node = this.map[key] + if (node == null) return undefined + this.used(node) + return node.val +} + +LruCache.prototype.set = function(key, val) { + var node = this.map[key] + if (node != null) { + node.val = val + } else { + if (!this.capacity) this.prune() + if (!this.capacity) return false + node = new DoublyLinkedNode(key, val) + this.map[key] = node + this.capacity-- + } + this.used(node) + return true +} + +LruCache.prototype.used = function(node) { + this.list.moveToFront(node) +} + +LruCache.prototype.prune = function() { + var node = this.list.pop() + if (node != null) { + delete this.map[node.key] + this.capacity++ + } +} + + +function DoublyLinkedList() { + this.firstNode = null + this.lastNode = null +} + +DoublyLinkedList.prototype.moveToFront = function(node) { + if (this.firstNode == node) return + + this.remove(node) + + if (this.firstNode == null) { + this.firstNode = node + this.lastNode = node + node.prev = null + node.next = null + } else { + node.prev = null + node.next = this.firstNode + node.next.prev = node + this.firstNode = node + } +} + +DoublyLinkedList.prototype.pop = function() { + var lastNode = this.lastNode + if (lastNode != null) { + this.remove(lastNode) + } + return lastNode +} + +DoublyLinkedList.prototype.remove = function(node) { + if (this.firstNode == node) { + this.firstNode = node.next + } else if (node.prev != null) { + node.prev.next = node.next + } + if (this.lastNode == node) { + this.lastNode = node.prev + } else if (node.next != null) { + node.next.prev = node.prev + } +} + + +function DoublyLinkedNode(key, val) { + this.key = key + this.val = val + this.prev = null + this.next = null +} + +},{}],60:[function(require,module,exports){ +(function (global){ +"use strict"; + +require("core-js/shim"); + +require("regenerator-runtime/runtime"); + +require("core-js/fn/regexp/escape"); + +if (global._babelPolyfill) { + throw new Error("only one instance of babel-polyfill is allowed"); +} +global._babelPolyfill = true; + +var DEFINE_PROPERTY = "defineProperty"; +function define(O, key, value) { + O[key] || Object[DEFINE_PROPERTY](O, key, { + writable: true, + configurable: true, + value: value + }); +} + +define(String.prototype, "padLeft", "".padStart); +define(String.prototype, "padRight", "".padEnd); + +"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach(function (key) { + [][key] && define(Array, key, Function.call.bind([][key])); +}); +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"core-js/fn/regexp/escape":135,"core-js/shim":463,"regenerator-runtime/runtime":61}],61:[function(require,module,exports){ +(function (global){ +/** + * Copyright (c) 2014, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * https://raw.github.com/facebook/regenerator/master/LICENSE file. An + * additional grant of patent rights can be found in the PATENTS file in + * the same directory. + */ + +!(function(global) { + "use strict"; + + var Op = Object.prototype; + var hasOwn = Op.hasOwnProperty; + var undefined; // More compressible than void 0. + var $Symbol = typeof Symbol === "function" ? Symbol : {}; + var iteratorSymbol = $Symbol.iterator || "@@iterator"; + var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; + var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; + + var inModule = typeof module === "object"; + var runtime = global.regeneratorRuntime; + if (runtime) { + if (inModule) { + // If regeneratorRuntime is defined globally and we're in a module, + // make the exports object identical to regeneratorRuntime. + module.exports = runtime; + } + // Don't bother evaluating the rest of this file if the runtime was + // already defined globally. + return; + } + + // Define the runtime globally (as expected by generated code) as either + // module.exports (if we're in a module) or a new, empty object. + runtime = global.regeneratorRuntime = inModule ? module.exports : {}; + + function wrap(innerFn, outerFn, self, tryLocsList) { + // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. + var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; + var generator = Object.create(protoGenerator.prototype); + var context = new Context(tryLocsList || []); + + // The ._invoke method unifies the implementations of the .next, + // .throw, and .return methods. + generator._invoke = makeInvokeMethod(innerFn, self, context); + + return generator; + } + runtime.wrap = wrap; + + // Try/catch helper to minimize deoptimizations. Returns a completion + // record like context.tryEntries[i].completion. This interface could + // have been (and was previously) designed to take a closure to be + // invoked without arguments, but in all the cases we care about we + // already have an existing method we want to call, so there's no need + // to create a new function object. We can even get away with assuming + // the method takes exactly one argument, since that happens to be true + // in every case, so we don't have to touch the arguments object. The + // only additional allocation required is the completion record, which + // has a stable shape and so hopefully should be cheap to allocate. + function tryCatch(fn, obj, arg) { + try { + return { type: "normal", arg: fn.call(obj, arg) }; + } catch (err) { + return { type: "throw", arg: err }; + } + } + + var GenStateSuspendedStart = "suspendedStart"; + var GenStateSuspendedYield = "suspendedYield"; + var GenStateExecuting = "executing"; + var GenStateCompleted = "completed"; + + // Returning this object from the innerFn has the same effect as + // breaking out of the dispatch switch statement. + var ContinueSentinel = {}; + + // Dummy constructor functions that we use as the .constructor and + // .constructor.prototype properties for functions that return Generator + // objects. For full spec compliance, you may wish to configure your + // minifier not to mangle the names of these two functions. + function Generator() {} + function GeneratorFunction() {} + function GeneratorFunctionPrototype() {} + + // This is a polyfill for %IteratorPrototype% for environments that + // don't natively support it. + var IteratorPrototype = {}; + IteratorPrototype[iteratorSymbol] = function () { + return this; + }; + + var getProto = Object.getPrototypeOf; + var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); + if (NativeIteratorPrototype && + NativeIteratorPrototype !== Op && + hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { + // This environment has a native %IteratorPrototype%; use it instead + // of the polyfill. + IteratorPrototype = NativeIteratorPrototype; + } + + var Gp = GeneratorFunctionPrototype.prototype = + Generator.prototype = Object.create(IteratorPrototype); + GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; + GeneratorFunctionPrototype.constructor = GeneratorFunction; + GeneratorFunctionPrototype[toStringTagSymbol] = + GeneratorFunction.displayName = "GeneratorFunction"; + + // Helper for defining the .next, .throw, and .return methods of the + // Iterator interface in terms of a single ._invoke method. + function defineIteratorMethods(prototype) { + ["next", "throw", "return"].forEach(function(method) { + prototype[method] = function(arg) { + return this._invoke(method, arg); + }; + }); + } + + runtime.isGeneratorFunction = function(genFun) { + var ctor = typeof genFun === "function" && genFun.constructor; + return ctor + ? ctor === GeneratorFunction || + // For the native GeneratorFunction constructor, the best we can + // do is to check its .name property. + (ctor.displayName || ctor.name) === "GeneratorFunction" + : false; + }; + + runtime.mark = function(genFun) { + if (Object.setPrototypeOf) { + Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); + } else { + genFun.__proto__ = GeneratorFunctionPrototype; + if (!(toStringTagSymbol in genFun)) { + genFun[toStringTagSymbol] = "GeneratorFunction"; + } + } + genFun.prototype = Object.create(Gp); + return genFun; + }; + + // Within the body of any async function, `await x` is transformed to + // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test + // `hasOwn.call(value, "__await")` to determine if the yielded value is + // meant to be awaited. + runtime.awrap = function(arg) { + return { __await: arg }; + }; + + function AsyncIterator(generator) { + function invoke(method, arg, resolve, reject) { + var record = tryCatch(generator[method], generator, arg); + if (record.type === "throw") { + reject(record.arg); + } else { + var result = record.arg; + var value = result.value; + if (value && + typeof value === "object" && + hasOwn.call(value, "__await")) { + return Promise.resolve(value.__await).then(function(value) { + invoke("next", value, resolve, reject); + }, function(err) { + invoke("throw", err, resolve, reject); + }); + } + + return Promise.resolve(value).then(function(unwrapped) { + // When a yielded Promise is resolved, its final value becomes + // the .value of the Promise<{value,done}> result for the + // current iteration. If the Promise is rejected, however, the + // result for this iteration will be rejected with the same + // reason. Note that rejections of yielded Promises are not + // thrown back into the generator function, as is the case + // when an awaited Promise is rejected. This difference in + // behavior between yield and await is important, because it + // allows the consumer to decide what to do with the yielded + // rejection (swallow it and continue, manually .throw it back + // into the generator, abandon iteration, whatever). With + // await, by contrast, there is no opportunity to examine the + // rejection reason outside the generator function, so the + // only option is to throw it from the await expression, and + // let the generator function handle the exception. + result.value = unwrapped; + resolve(result); + }, reject); + } + } + + if (typeof global.process === "object" && global.process.domain) { + invoke = global.process.domain.bind(invoke); + } + + var previousPromise; + + function enqueue(method, arg) { + function callInvokeWithMethodAndArg() { + return new Promise(function(resolve, reject) { + invoke(method, arg, resolve, reject); + }); + } + + return previousPromise = + // If enqueue has been called before, then we want to wait until + // all previous Promises have been resolved before calling invoke, + // so that results are always delivered in the correct order. If + // enqueue has not been called before, then it is important to + // call invoke immediately, without waiting on a callback to fire, + // so that the async generator function has the opportunity to do + // any necessary setup in a predictable way. This predictability + // is why the Promise constructor synchronously invokes its + // executor callback, and why async functions synchronously + // execute code before the first await. Since we implement simple + // async functions in terms of async generators, it is especially + // important to get this right, even though it requires care. + previousPromise ? previousPromise.then( + callInvokeWithMethodAndArg, + // Avoid propagating failures to Promises returned by later + // invocations of the iterator. + callInvokeWithMethodAndArg + ) : callInvokeWithMethodAndArg(); + } + + // Define the unified helper method that is used to implement .next, + // .throw, and .return (see defineIteratorMethods). + this._invoke = enqueue; + } + + defineIteratorMethods(AsyncIterator.prototype); + AsyncIterator.prototype[asyncIteratorSymbol] = function () { + return this; + }; + runtime.AsyncIterator = AsyncIterator; + + // Note that simple async functions are implemented on top of + // AsyncIterator objects; they just return a Promise for the value of + // the final result produced by the iterator. + runtime.async = function(innerFn, outerFn, self, tryLocsList) { + var iter = new AsyncIterator( + wrap(innerFn, outerFn, self, tryLocsList) + ); + + return runtime.isGeneratorFunction(outerFn) + ? iter // If outerFn is a generator, return the full iterator. + : iter.next().then(function(result) { + return result.done ? result.value : iter.next(); + }); + }; + + function makeInvokeMethod(innerFn, self, context) { + var state = GenStateSuspendedStart; + + return function invoke(method, arg) { + if (state === GenStateExecuting) { + throw new Error("Generator is already running"); + } + + if (state === GenStateCompleted) { + if (method === "throw") { + throw arg; + } + + // Be forgiving, per 25.3.3.3.3 of the spec: + // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume + return doneResult(); + } + + context.method = method; + context.arg = arg; + + while (true) { + var delegate = context.delegate; + if (delegate) { + var delegateResult = maybeInvokeDelegate(delegate, context); + if (delegateResult) { + if (delegateResult === ContinueSentinel) continue; + return delegateResult; + } + } + + if (context.method === "next") { + // Setting context._sent for legacy support of Babel's + // function.sent implementation. + context.sent = context._sent = context.arg; + + } else if (context.method === "throw") { + if (state === GenStateSuspendedStart) { + state = GenStateCompleted; + throw context.arg; + } + + context.dispatchException(context.arg); + + } else if (context.method === "return") { + context.abrupt("return", context.arg); + } + + state = GenStateExecuting; + + var record = tryCatch(innerFn, self, context); + if (record.type === "normal") { + // If an exception is thrown from innerFn, we leave state === + // GenStateExecuting and loop back for another invocation. + state = context.done + ? GenStateCompleted + : GenStateSuspendedYield; + + if (record.arg === ContinueSentinel) { + continue; + } + + return { + value: record.arg, + done: context.done + }; + + } else if (record.type === "throw") { + state = GenStateCompleted; + // Dispatch the exception by looping back around to the + // context.dispatchException(context.arg) call above. + context.method = "throw"; + context.arg = record.arg; + } + } + }; + } + + // Call delegate.iterator[context.method](context.arg) and handle the + // result, either by returning a { value, done } result from the + // delegate iterator, or by modifying context.method and context.arg, + // setting context.delegate to null, and returning the ContinueSentinel. + function maybeInvokeDelegate(delegate, context) { + var method = delegate.iterator[context.method]; + if (method === undefined) { + // A .throw or .return when the delegate iterator has no .throw + // method always terminates the yield* loop. + context.delegate = null; + + if (context.method === "throw") { + if (delegate.iterator.return) { + // If the delegate iterator has a return method, give it a + // chance to clean up. + context.method = "return"; + context.arg = undefined; + maybeInvokeDelegate(delegate, context); + + if (context.method === "throw") { + // If maybeInvokeDelegate(context) changed context.method from + // "return" to "throw", let that override the TypeError below. + return ContinueSentinel; + } + } + + context.method = "throw"; + context.arg = new TypeError( + "The iterator does not provide a 'throw' method"); + } + + return ContinueSentinel; + } + + var record = tryCatch(method, delegate.iterator, context.arg); + + if (record.type === "throw") { + context.method = "throw"; + context.arg = record.arg; + context.delegate = null; + return ContinueSentinel; + } + + var info = record.arg; + + if (! info) { + context.method = "throw"; + context.arg = new TypeError("iterator result is not an object"); + context.delegate = null; + return ContinueSentinel; + } + + if (info.done) { + // Assign the result of the finished delegate to the temporary + // variable specified by delegate.resultName (see delegateYield). + context[delegate.resultName] = info.value; + + // Resume execution at the desired location (see delegateYield). + context.next = delegate.nextLoc; + + // If context.method was "throw" but the delegate handled the + // exception, let the outer generator proceed normally. If + // context.method was "next", forget context.arg since it has been + // "consumed" by the delegate iterator. If context.method was + // "return", allow the original .return call to continue in the + // outer generator. + if (context.method !== "return") { + context.method = "next"; + context.arg = undefined; + } + + } else { + // Re-yield the result returned by the delegate method. + return info; + } + + // The delegate iterator is finished, so forget it and continue with + // the outer generator. + context.delegate = null; + return ContinueSentinel; + } + + // Define Generator.prototype.{next,throw,return} in terms of the + // unified ._invoke helper method. + defineIteratorMethods(Gp); + + Gp[toStringTagSymbol] = "Generator"; + + // A Generator should always return itself as the iterator object when the + // @@iterator function is called on it. Some browsers' implementations of the + // iterator prototype chain incorrectly implement this, causing the Generator + // object to not be returned from this call. This ensures that doesn't happen. + // See https://github.com/facebook/regenerator/issues/274 for more details. + Gp[iteratorSymbol] = function() { + return this; + }; + + Gp.toString = function() { + return "[object Generator]"; + }; + + function pushTryEntry(locs) { + var entry = { tryLoc: locs[0] }; + + if (1 in locs) { + entry.catchLoc = locs[1]; + } + + if (2 in locs) { + entry.finallyLoc = locs[2]; + entry.afterLoc = locs[3]; + } + + this.tryEntries.push(entry); + } + + function resetTryEntry(entry) { + var record = entry.completion || {}; + record.type = "normal"; + delete record.arg; + entry.completion = record; + } + + function Context(tryLocsList) { + // The root entry object (effectively a try statement without a catch + // or a finally block) gives us a place to store values thrown from + // locations where there is no enclosing try statement. + this.tryEntries = [{ tryLoc: "root" }]; + tryLocsList.forEach(pushTryEntry, this); + this.reset(true); + } + + runtime.keys = function(object) { + var keys = []; + for (var key in object) { + keys.push(key); + } + keys.reverse(); + + // Rather than returning an object with a next method, we keep + // things simple and return the next function itself. + return function next() { + while (keys.length) { + var key = keys.pop(); + if (key in object) { + next.value = key; + next.done = false; + return next; + } + } + + // To avoid creating an additional object, we just hang the .value + // and .done properties off the next function object itself. This + // also ensures that the minifier will not anonymize the function. + next.done = true; + return next; + }; + }; + + function values(iterable) { + if (iterable) { + var iteratorMethod = iterable[iteratorSymbol]; + if (iteratorMethod) { + return iteratorMethod.call(iterable); + } + + if (typeof iterable.next === "function") { + return iterable; + } + + if (!isNaN(iterable.length)) { + var i = -1, next = function next() { + while (++i < iterable.length) { + if (hasOwn.call(iterable, i)) { + next.value = iterable[i]; + next.done = false; + return next; + } + } + + next.value = undefined; + next.done = true; + + return next; + }; + + return next.next = next; + } + } + + // Return an iterator with no values. + return { next: doneResult }; + } + runtime.values = values; + + function doneResult() { + return { value: undefined, done: true }; + } + + Context.prototype = { + constructor: Context, + + reset: function(skipTempReset) { + this.prev = 0; + this.next = 0; + // Resetting context._sent for legacy support of Babel's + // function.sent implementation. + this.sent = this._sent = undefined; + this.done = false; + this.delegate = null; + + this.method = "next"; + this.arg = undefined; + + this.tryEntries.forEach(resetTryEntry); + + if (!skipTempReset) { + for (var name in this) { + // Not sure about the optimal order of these conditions: + if (name.charAt(0) === "t" && + hasOwn.call(this, name) && + !isNaN(+name.slice(1))) { + this[name] = undefined; + } + } + } + }, + + stop: function() { + this.done = true; + + var rootEntry = this.tryEntries[0]; + var rootRecord = rootEntry.completion; + if (rootRecord.type === "throw") { + throw rootRecord.arg; + } + + return this.rval; + }, + + dispatchException: function(exception) { + if (this.done) { + throw exception; + } + + var context = this; + function handle(loc, caught) { + record.type = "throw"; + record.arg = exception; + context.next = loc; + + if (caught) { + // If the dispatched exception was caught by a catch block, + // then let that catch block handle the exception normally. + context.method = "next"; + context.arg = undefined; + } + + return !! caught; + } + + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + var record = entry.completion; + + if (entry.tryLoc === "root") { + // Exception thrown outside of any try block that could handle + // it, so set the completion value of the entire function to + // throw the exception. + return handle("end"); + } + + if (entry.tryLoc <= this.prev) { + var hasCatch = hasOwn.call(entry, "catchLoc"); + var hasFinally = hasOwn.call(entry, "finallyLoc"); + + if (hasCatch && hasFinally) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } else if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + + } else if (hasCatch) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } + + } else if (hasFinally) { + if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + + } else { + throw new Error("try statement without catch or finally"); + } + } + } + }, + + abrupt: function(type, arg) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.tryLoc <= this.prev && + hasOwn.call(entry, "finallyLoc") && + this.prev < entry.finallyLoc) { + var finallyEntry = entry; + break; + } + } + + if (finallyEntry && + (type === "break" || + type === "continue") && + finallyEntry.tryLoc <= arg && + arg <= finallyEntry.finallyLoc) { + // Ignore the finally entry if control is not jumping to a + // location outside the try/catch block. + finallyEntry = null; + } + + var record = finallyEntry ? finallyEntry.completion : {}; + record.type = type; + record.arg = arg; + + if (finallyEntry) { + this.method = "next"; + this.next = finallyEntry.finallyLoc; + return ContinueSentinel; + } + + return this.complete(record); + }, + + complete: function(record, afterLoc) { + if (record.type === "throw") { + throw record.arg; + } + + if (record.type === "break" || + record.type === "continue") { + this.next = record.arg; + } else if (record.type === "return") { + this.rval = this.arg = record.arg; + this.method = "return"; + this.next = "end"; + } else if (record.type === "normal" && afterLoc) { + this.next = afterLoc; + } + + return ContinueSentinel; + }, + + finish: function(finallyLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.finallyLoc === finallyLoc) { + this.complete(entry.completion, entry.afterLoc); + resetTryEntry(entry); + return ContinueSentinel; + } + } + }, + + "catch": function(tryLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.tryLoc === tryLoc) { + var record = entry.completion; + if (record.type === "throw") { + var thrown = record.arg; + resetTryEntry(entry); + } + return thrown; + } + } + + // The context.catch method must only be called with a location + // argument that corresponds to a known catch block. + throw new Error("illegal catch attempt"); + }, + + delegateYield: function(iterable, resultName, nextLoc) { + this.delegate = { + iterator: values(iterable), + resultName: resultName, + nextLoc: nextLoc + }; + + if (this.method === "next") { + // Deliberately forget the last sent value so that we don't + // accidentally pass it on to the delegate. + this.arg = undefined; + } + + return ContinueSentinel; + } + }; +})( + // Among the various tricks for obtaining a reference to the global + // object, this seems to be the most reliable technique that does not + // use indirect eval (which violates Content Security Policy). + typeof global === "object" ? global : + typeof window === "object" ? window : + typeof self === "object" ? self : this +); + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],62:[function(require,module,exports){ +'use strict' + +exports.byteLength = byteLength +exports.toByteArray = toByteArray +exports.fromByteArray = fromByteArray + +var lookup = [] +var revLookup = [] +var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array + +var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' +for (var i = 0, len = code.length; i < len; ++i) { + lookup[i] = code[i] + revLookup[code.charCodeAt(i)] = i +} + +// Support decoding URL-safe base64 strings, as Node.js does. +// See: https://en.wikipedia.org/wiki/Base64#URL_applications +revLookup['-'.charCodeAt(0)] = 62 +revLookup['_'.charCodeAt(0)] = 63 + +function getLens (b64) { + var len = b64.length + + if (len % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // Trim off extra bytes after placeholder bytes are found + // See: https://github.com/beatgammit/base64-js/issues/42 + var validLen = b64.indexOf('=') + if (validLen === -1) validLen = len + + var placeHoldersLen = validLen === len + ? 0 + : 4 - (validLen % 4) + + return [validLen, placeHoldersLen] +} + +// base64 is 4/3 + up to two characters of the original data +function byteLength (b64) { + var lens = getLens(b64) + var validLen = lens[0] + var placeHoldersLen = lens[1] + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen +} + +function _byteLength (b64, validLen, placeHoldersLen) { + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen +} + +function toByteArray (b64) { + var tmp + var lens = getLens(b64) + var validLen = lens[0] + var placeHoldersLen = lens[1] + + var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) + + var curByte = 0 + + // if there are placeholders, only get up to the last complete 4 chars + var len = placeHoldersLen > 0 + ? validLen - 4 + : validLen + + for (var i = 0; i < len; i += 4) { + tmp = + (revLookup[b64.charCodeAt(i)] << 18) | + (revLookup[b64.charCodeAt(i + 1)] << 12) | + (revLookup[b64.charCodeAt(i + 2)] << 6) | + revLookup[b64.charCodeAt(i + 3)] + arr[curByte++] = (tmp >> 16) & 0xFF + arr[curByte++] = (tmp >> 8) & 0xFF + arr[curByte++] = tmp & 0xFF + } + + if (placeHoldersLen === 2) { + tmp = + (revLookup[b64.charCodeAt(i)] << 2) | + (revLookup[b64.charCodeAt(i + 1)] >> 4) + arr[curByte++] = tmp & 0xFF + } + + if (placeHoldersLen === 1) { + tmp = + (revLookup[b64.charCodeAt(i)] << 10) | + (revLookup[b64.charCodeAt(i + 1)] << 4) | + (revLookup[b64.charCodeAt(i + 2)] >> 2) + arr[curByte++] = (tmp >> 8) & 0xFF + arr[curByte++] = tmp & 0xFF + } + + return arr +} + +function tripletToBase64 (num) { + return lookup[num >> 18 & 0x3F] + + lookup[num >> 12 & 0x3F] + + lookup[num >> 6 & 0x3F] + + lookup[num & 0x3F] +} + +function encodeChunk (uint8, start, end) { + var tmp + var output = [] + for (var i = start; i < end; i += 3) { + tmp = + ((uint8[i] << 16) & 0xFF0000) + + ((uint8[i + 1] << 8) & 0xFF00) + + (uint8[i + 2] & 0xFF) + output.push(tripletToBase64(tmp)) + } + return output.join('') +} + +function fromByteArray (uint8) { + var tmp + var len = uint8.length + var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes + var parts = [] + var maxChunkLength = 16383 // must be multiple of 3 + + // go through the array every three bytes, we'll deal with trailing stuff later + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk( + uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength) + )) + } + + // pad the end with zeros, but make sure to not forget the extra bytes + if (extraBytes === 1) { + tmp = uint8[len - 1] + parts.push( + lookup[tmp >> 2] + + lookup[(tmp << 4) & 0x3F] + + '==' + ) + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + uint8[len - 1] + parts.push( + lookup[tmp >> 10] + + lookup[(tmp >> 4) & 0x3F] + + lookup[(tmp << 2) & 0x3F] + + '=' + ) + } + + return parts.join('') +} + +},{}],63:[function(require,module,exports){ +'use strict'; + +var crypto_hash_sha512 = require('tweetnacl').lowlevel.crypto_hash; + +/* + * This file is a 1:1 port from the OpenBSD blowfish.c and bcrypt_pbkdf.c. As a + * result, it retains the original copyright and license. The two files are + * under slightly different (but compatible) licenses, and are here combined in + * one file. + * + * Credit for the actual porting work goes to: + * Devi Mandiri + */ + +/* + * The Blowfish portions are under the following license: + * + * Blowfish block cipher for OpenBSD + * Copyright 1997 Niels Provos + * All rights reserved. + * + * Implementation advice by David Mazieres . + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * The bcrypt_pbkdf portions are under the following license: + * + * Copyright (c) 2013 Ted Unangst + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * Performance improvements (Javascript-specific): + * + * Copyright 2016, Joyent Inc + * Author: Alex Wilson + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +// Ported from OpenBSD bcrypt_pbkdf.c v1.9 + +var BLF_J = 0; + +var Blowfish = function() { + this.S = [ + new Uint32Array([ + 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, + 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, + 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, + 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, + 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, + 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, + 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, + 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e, + 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, + 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, + 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, + 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, + 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, + 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677, + 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, + 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, + 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, + 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, + 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, + 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, + 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, + 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, + 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, + 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, + 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, + 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, + 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, + 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, + 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, + 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, + 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, + 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09, + 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, + 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, + 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, + 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, + 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, + 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, + 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, + 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, + 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, + 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, + 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, + 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, + 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, + 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, + 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, + 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, + 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, + 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1, + 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, + 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, + 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, + 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, + 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, + 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, + 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, + 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, + 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, + 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, + 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, + 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, + 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, + 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a]), + new Uint32Array([ + 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, + 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, + 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, + 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, + 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, + 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, + 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, + 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, + 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, + 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, + 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, + 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, + 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, + 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7, + 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, + 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, + 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, + 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, + 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, + 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87, + 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, + 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, + 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, + 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, + 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, + 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, + 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, + 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, + 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, + 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, + 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, + 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, + 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, + 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, + 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, + 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, + 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, + 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, + 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, + 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, + 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, + 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, + 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, + 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281, + 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, + 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, + 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, + 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, + 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, + 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0, + 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, + 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, + 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, + 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, + 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, + 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061, + 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, + 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, + 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, + 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, + 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, + 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, + 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, + 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7]), + new Uint32Array([ + 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, + 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, + 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, + 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, + 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, + 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, + 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, + 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, + 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, + 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, + 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, + 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, + 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, + 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, + 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, + 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, + 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, + 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, + 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, + 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, + 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, + 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, + 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, + 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, + 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, + 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, + 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, + 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, + 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, + 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, + 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, + 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, + 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, + 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, + 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, + 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, + 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, + 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, + 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, + 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, + 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, + 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, + 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, + 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, + 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, + 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, + 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, + 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, + 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, + 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, + 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, + 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, + 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, + 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, + 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, + 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62, + 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, + 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, + 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, + 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, + 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, + 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, + 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, + 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0]), + new Uint32Array([ + 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, + 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe, + 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, + 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, + 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, + 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, + 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, + 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22, + 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, + 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, + 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, + 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, + 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, + 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, + 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, + 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, + 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, + 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, + 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, + 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, + 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, + 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, + 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, + 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, + 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, + 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, + 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, + 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, + 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, + 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, + 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, + 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, + 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, + 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, + 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, + 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, + 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, + 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, + 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, + 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, + 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, + 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, + 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, + 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, + 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, + 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, + 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, + 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, + 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, + 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, + 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, + 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, + 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, + 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, + 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, + 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, + 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, + 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, + 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, + 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, + 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, + 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, + 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, + 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6]) + ]; + this.P = new Uint32Array([ + 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, + 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, + 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, + 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, + 0x9216d5d9, 0x8979fb1b]); +}; + +function F(S, x8, i) { + return (((S[0][x8[i+3]] + + S[1][x8[i+2]]) ^ + S[2][x8[i+1]]) + + S[3][x8[i]]); +}; + +Blowfish.prototype.encipher = function(x, x8) { + if (x8 === undefined) { + x8 = new Uint8Array(x.buffer); + if (x.byteOffset !== 0) + x8 = x8.subarray(x.byteOffset); + } + x[0] ^= this.P[0]; + for (var i = 1; i < 16; i += 2) { + x[1] ^= F(this.S, x8, 0) ^ this.P[i]; + x[0] ^= F(this.S, x8, 4) ^ this.P[i+1]; + } + var t = x[0]; + x[0] = x[1] ^ this.P[17]; + x[1] = t; +}; + +Blowfish.prototype.decipher = function(x) { + var x8 = new Uint8Array(x.buffer); + if (x.byteOffset !== 0) + x8 = x8.subarray(x.byteOffset); + x[0] ^= this.P[17]; + for (var i = 16; i > 0; i -= 2) { + x[1] ^= F(this.S, x8, 0) ^ this.P[i]; + x[0] ^= F(this.S, x8, 4) ^ this.P[i-1]; + } + var t = x[0]; + x[0] = x[1] ^ this.P[0]; + x[1] = t; +}; + +function stream2word(data, databytes){ + var i, temp = 0; + for (i = 0; i < 4; i++, BLF_J++) { + if (BLF_J >= databytes) BLF_J = 0; + temp = (temp << 8) | data[BLF_J]; + } + return temp; +}; + +Blowfish.prototype.expand0state = function(key, keybytes) { + var d = new Uint32Array(2), i, k; + var d8 = new Uint8Array(d.buffer); + + for (i = 0, BLF_J = 0; i < 18; i++) { + this.P[i] ^= stream2word(key, keybytes); + } + BLF_J = 0; + + for (i = 0; i < 18; i += 2) { + this.encipher(d, d8); + this.P[i] = d[0]; + this.P[i+1] = d[1]; + } + + for (i = 0; i < 4; i++) { + for (k = 0; k < 256; k += 2) { + this.encipher(d, d8); + this.S[i][k] = d[0]; + this.S[i][k+1] = d[1]; + } + } +}; + +Blowfish.prototype.expandstate = function(data, databytes, key, keybytes) { + var d = new Uint32Array(2), i, k; + + for (i = 0, BLF_J = 0; i < 18; i++) { + this.P[i] ^= stream2word(key, keybytes); + } + + for (i = 0, BLF_J = 0; i < 18; i += 2) { + d[0] ^= stream2word(data, databytes); + d[1] ^= stream2word(data, databytes); + this.encipher(d); + this.P[i] = d[0]; + this.P[i+1] = d[1]; + } + + for (i = 0; i < 4; i++) { + for (k = 0; k < 256; k += 2) { + d[0] ^= stream2word(data, databytes); + d[1] ^= stream2word(data, databytes); + this.encipher(d); + this.S[i][k] = d[0]; + this.S[i][k+1] = d[1]; + } + } + BLF_J = 0; +}; + +Blowfish.prototype.enc = function(data, blocks) { + for (var i = 0; i < blocks; i++) { + this.encipher(data.subarray(i*2)); + } +}; + +Blowfish.prototype.dec = function(data, blocks) { + for (var i = 0; i < blocks; i++) { + this.decipher(data.subarray(i*2)); + } +}; + +var BCRYPT_BLOCKS = 8, + BCRYPT_HASHSIZE = 32; + +function bcrypt_hash(sha2pass, sha2salt, out) { + var state = new Blowfish(), + cdata = new Uint32Array(BCRYPT_BLOCKS), i, + ciphertext = new Uint8Array([79,120,121,99,104,114,111,109,97,116,105, + 99,66,108,111,119,102,105,115,104,83,119,97,116,68,121,110,97,109, + 105,116,101]); //"OxychromaticBlowfishSwatDynamite" + + state.expandstate(sha2salt, 64, sha2pass, 64); + for (i = 0; i < 64; i++) { + state.expand0state(sha2salt, 64); + state.expand0state(sha2pass, 64); + } + + for (i = 0; i < BCRYPT_BLOCKS; i++) + cdata[i] = stream2word(ciphertext, ciphertext.byteLength); + for (i = 0; i < 64; i++) + state.enc(cdata, cdata.byteLength / 8); + + for (i = 0; i < BCRYPT_BLOCKS; i++) { + out[4*i+3] = cdata[i] >>> 24; + out[4*i+2] = cdata[i] >>> 16; + out[4*i+1] = cdata[i] >>> 8; + out[4*i+0] = cdata[i]; + } +}; + +function bcrypt_pbkdf(pass, passlen, salt, saltlen, key, keylen, rounds) { + var sha2pass = new Uint8Array(64), + sha2salt = new Uint8Array(64), + out = new Uint8Array(BCRYPT_HASHSIZE), + tmpout = new Uint8Array(BCRYPT_HASHSIZE), + countsalt = new Uint8Array(saltlen+4), + i, j, amt, stride, dest, count, + origkeylen = keylen; + + if (rounds < 1) + return -1; + if (passlen === 0 || saltlen === 0 || keylen === 0 || + keylen > (out.byteLength * out.byteLength) || saltlen > (1<<20)) + return -1; + + stride = Math.floor((keylen + out.byteLength - 1) / out.byteLength); + amt = Math.floor((keylen + stride - 1) / stride); + + for (i = 0; i < saltlen; i++) + countsalt[i] = salt[i]; + + crypto_hash_sha512(sha2pass, pass, passlen); + + for (count = 1; keylen > 0; count++) { + countsalt[saltlen+0] = count >>> 24; + countsalt[saltlen+1] = count >>> 16; + countsalt[saltlen+2] = count >>> 8; + countsalt[saltlen+3] = count; + + crypto_hash_sha512(sha2salt, countsalt, saltlen + 4); + bcrypt_hash(sha2pass, sha2salt, tmpout); + for (i = out.byteLength; i--;) + out[i] = tmpout[i]; + + for (i = 1; i < rounds; i++) { + crypto_hash_sha512(sha2salt, tmpout, tmpout.byteLength); + bcrypt_hash(sha2pass, sha2salt, tmpout); + for (j = 0; j < out.byteLength; j++) + out[j] ^= tmpout[j]; + } + + amt = Math.min(amt, keylen); + for (i = 0; i < amt; i++) { + dest = i * stride + (count - 1); + if (dest >= origkeylen) + break; + key[dest] = out[i]; + } + keylen -= i; + } + + return 0; +}; + +module.exports = { + BLOCKS: BCRYPT_BLOCKS, + HASHSIZE: BCRYPT_HASHSIZE, + hash: bcrypt_hash, + pbkdf: bcrypt_pbkdf +}; + +},{"tweetnacl":1427}],64:[function(require,module,exports){ +var document = require('global/document') +var hyperx = require('hyperx') +var onload = require('on-load') + +var SVGNS = 'http://www.w3.org/2000/svg' +var XLINKNS = 'http://www.w3.org/1999/xlink' + +var BOOL_PROPS = { + autofocus: 1, + checked: 1, + defaultchecked: 1, + disabled: 1, + formnovalidate: 1, + indeterminate: 1, + readonly: 1, + required: 1, + selected: 1, + willvalidate: 1 +} +var COMMENT_TAG = '!--' +var SVG_TAGS = [ + 'svg', + 'altGlyph', 'altGlyphDef', 'altGlyphItem', 'animate', 'animateColor', + 'animateMotion', 'animateTransform', 'circle', 'clipPath', 'color-profile', + 'cursor', 'defs', 'desc', 'ellipse', 'feBlend', 'feColorMatrix', + 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', + 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', + 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', + 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', + 'feSpotLight', 'feTile', 'feTurbulence', 'filter', 'font', 'font-face', + 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', + 'foreignObject', 'g', 'glyph', 'glyphRef', 'hkern', 'image', 'line', + 'linearGradient', 'marker', 'mask', 'metadata', 'missing-glyph', 'mpath', + 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', + 'set', 'stop', 'switch', 'symbol', 'text', 'textPath', 'title', 'tref', + 'tspan', 'use', 'view', 'vkern' +] + +function belCreateElement (tag, props, children) { + var el + + // If an svg tag, it needs a namespace + if (SVG_TAGS.indexOf(tag) !== -1) { + props.namespace = SVGNS + } + + // If we are using a namespace + var ns = false + if (props.namespace) { + ns = props.namespace + delete props.namespace + } + + // Create the element + if (ns) { + el = document.createElementNS(ns, tag) + } else if (tag === COMMENT_TAG) { + return document.createComment(props.comment) + } else { + el = document.createElement(tag) + } + + // If adding onload events + if (props.onload || props.onunload) { + var load = props.onload || function () {} + var unload = props.onunload || function () {} + onload(el, function belOnload () { + load(el) + }, function belOnunload () { + unload(el) + }, + // We have to use non-standard `caller` to find who invokes `belCreateElement` + belCreateElement.caller.caller.caller) + delete props.onload + delete props.onunload + } + + // Create the properties + for (var p in props) { + if (props.hasOwnProperty(p)) { + var key = p.toLowerCase() + var val = props[p] + // Normalize className + if (key === 'classname') { + key = 'class' + p = 'class' + } + // The for attribute gets transformed to htmlFor, but we just set as for + if (p === 'htmlFor') { + p = 'for' + } + // If a property is boolean, set itself to the key + if (BOOL_PROPS[key]) { + if (val === 'true') val = key + else if (val === 'false') continue + } + // If a property prefers being set directly vs setAttribute + if (key.slice(0, 2) === 'on') { + el[p] = val + } else { + if (ns) { + if (p === 'xlink:href') { + el.setAttributeNS(XLINKNS, p, val) + } else if (/^xmlns($|:)/i.test(p)) { + // skip xmlns definitions + } else { + el.setAttributeNS(null, p, val) + } + } else { + el.setAttribute(p, val) + } + } + } + } + + function appendChild (childs) { + if (!Array.isArray(childs)) return + for (var i = 0; i < childs.length; i++) { + var node = childs[i] + if (Array.isArray(node)) { + appendChild(node) + continue + } + + if (typeof node === 'number' || + typeof node === 'boolean' || + typeof node === 'function' || + node instanceof Date || + node instanceof RegExp) { + node = node.toString() + } + + if (typeof node === 'string') { + if (el.lastChild && el.lastChild.nodeName === '#text') { + el.lastChild.nodeValue += node + continue + } + node = document.createTextNode(node) + } + + if (node && node.nodeType) { + el.appendChild(node) + } + } + } + appendChild(children) + + return el +} + +module.exports = hyperx(belCreateElement, {comments: true}) +module.exports.default = module.exports +module.exports.createElement = belCreateElement + +},{"global/document":731,"hyperx":824,"on-load":984}],65:[function(require,module,exports){ +// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki +// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S] +// NOTE: SIGHASH byte ignored AND restricted, truncate before use + +var Buffer = require('safe-buffer').Buffer + +function check (buffer) { + if (buffer.length < 8) return false + if (buffer.length > 72) return false + if (buffer[0] !== 0x30) return false + if (buffer[1] !== buffer.length - 2) return false + if (buffer[2] !== 0x02) return false + + var lenR = buffer[3] + if (lenR === 0) return false + if (5 + lenR >= buffer.length) return false + if (buffer[4 + lenR] !== 0x02) return false + + var lenS = buffer[5 + lenR] + if (lenS === 0) return false + if ((6 + lenR + lenS) !== buffer.length) return false + + if (buffer[4] & 0x80) return false + if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false + + if (buffer[lenR + 6] & 0x80) return false + if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false + return true +} + +function decode (buffer) { + if (buffer.length < 8) throw new Error('DER sequence length is too short') + if (buffer.length > 72) throw new Error('DER sequence length is too long') + if (buffer[0] !== 0x30) throw new Error('Expected DER sequence') + if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid') + if (buffer[2] !== 0x02) throw new Error('Expected DER integer') + + var lenR = buffer[3] + if (lenR === 0) throw new Error('R length is zero') + if (5 + lenR >= buffer.length) throw new Error('R length is too long') + if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)') + + var lenS = buffer[5 + lenR] + if (lenS === 0) throw new Error('S length is zero') + if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid') + + if (buffer[4] & 0x80) throw new Error('R value is negative') + if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded') + + if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative') + if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded') + + // non-BIP66 - extract R, S values + return { + r: buffer.slice(4, 4 + lenR), + s: buffer.slice(6 + lenR) + } +} + +/* + * Expects r and s to be positive DER integers. + * + * The DER format uses the most significant bit as a sign bit (& 0x80). + * If the significant bit is set AND the integer is positive, a 0x00 is prepended. + * + * Examples: + * + * 0 => 0x00 + * 1 => 0x01 + * -1 => 0xff + * 127 => 0x7f + * -127 => 0x81 + * 128 => 0x0080 + * -128 => 0x80 + * 255 => 0x00ff + * -255 => 0xff01 + * 16300 => 0x3fac + * -16300 => 0xc054 + * 62300 => 0x00f35c + * -62300 => 0xff0ca4 +*/ +function encode (r, s) { + var lenR = r.length + var lenS = s.length + if (lenR === 0) throw new Error('R length is zero') + if (lenS === 0) throw new Error('S length is zero') + if (lenR > 33) throw new Error('R length is too long') + if (lenS > 33) throw new Error('S length is too long') + if (r[0] & 0x80) throw new Error('R value is negative') + if (s[0] & 0x80) throw new Error('S value is negative') + if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded') + if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded') + + var signature = Buffer.allocUnsafe(6 + lenR + lenS) + + // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S] + signature[0] = 0x30 + signature[1] = signature.length - 2 + signature[2] = 0x02 + signature[3] = r.length + r.copy(signature, 4) + signature[4 + lenR] = 0x02 + signature[5 + lenR] = s.length + s.copy(signature, 6 + lenR) + + return signature +} + +module.exports = { + check: check, + decode: decode, + encode: encode +} + +},{"safe-buffer":1334}],66:[function(require,module,exports){ +(function (module, exports) { + 'use strict'; + + // Utils + function assert (val, msg) { + if (!val) throw new Error(msg || 'Assertion failed'); + } + + // Could use `inherits` module, but don't want to move from single file + // architecture yet. + function inherits (ctor, superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } + + // BN + + function BN (number, base, endian) { + if (BN.isBN(number)) { + return number; + } + + this.negative = 0; + this.words = null; + this.length = 0; + + // Reduction context + this.red = null; + + if (number !== null) { + if (base === 'le' || base === 'be') { + endian = base; + base = 10; + } + + this._init(number || 0, base || 10, endian || 'be'); + } + } + if (typeof module === 'object') { + module.exports = BN; + } else { + exports.BN = BN; + } + + BN.BN = BN; + BN.wordSize = 26; + + var Buffer; + try { + Buffer = require('buffer').Buffer; + } catch (e) { + } + + BN.isBN = function isBN (num) { + if (num instanceof BN) { + return true; + } + + return num !== null && typeof num === 'object' && + num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); + }; + + BN.max = function max (left, right) { + if (left.cmp(right) > 0) return left; + return right; + }; + + BN.min = function min (left, right) { + if (left.cmp(right) < 0) return left; + return right; + }; + + BN.prototype._init = function init (number, base, endian) { + if (typeof number === 'number') { + return this._initNumber(number, base, endian); + } + + if (typeof number === 'object') { + return this._initArray(number, base, endian); + } + + if (base === 'hex') { + base = 16; + } + assert(base === (base | 0) && base >= 2 && base <= 36); + + number = number.toString().replace(/\s+/g, ''); + var start = 0; + if (number[0] === '-') { + start++; + } + + if (base === 16) { + this._parseHex(number, start); + } else { + this._parseBase(number, base, start); + } + + if (number[0] === '-') { + this.negative = 1; + } + + this.strip(); + + if (endian !== 'le') return; + + this._initArray(this.toArray(), base, endian); + }; + + BN.prototype._initNumber = function _initNumber (number, base, endian) { + if (number < 0) { + this.negative = 1; + number = -number; + } + if (number < 0x4000000) { + this.words = [ number & 0x3ffffff ]; + this.length = 1; + } else if (number < 0x10000000000000) { + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff + ]; + this.length = 2; + } else { + assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff, + 1 + ]; + this.length = 3; + } + + if (endian !== 'le') return; + + // Reverse the bytes + this._initArray(this.toArray(), base, endian); + }; + + BN.prototype._initArray = function _initArray (number, base, endian) { + // Perhaps a Uint8Array + assert(typeof number.length === 'number'); + if (number.length <= 0) { + this.words = [ 0 ]; + this.length = 1; + return this; + } + + this.length = Math.ceil(number.length / 3); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + var j, w; + var off = 0; + if (endian === 'be') { + for (i = number.length - 1, j = 0; i >= 0; i -= 3) { + w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } else if (endian === 'le') { + for (i = 0, j = 0; i < number.length; i += 3) { + w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } + return this.strip(); + }; + + function parseHex (str, start, end) { + var r = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; + + r <<= 4; + + // 'a' - 'f' + if (c >= 49 && c <= 54) { + r |= c - 49 + 0xa; + + // 'A' - 'F' + } else if (c >= 17 && c <= 22) { + r |= c - 17 + 0xa; + + // '0' - '9' + } else { + r |= c & 0xf; + } + } + return r; + } + + BN.prototype._parseHex = function _parseHex (number, start) { + // Create possibly bigger array to ensure that it fits the number + this.length = Math.ceil((number.length - start) / 6); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } + + var j, w; + // Scan 24-bit chunks and add them to the number + var off = 0; + for (i = number.length - 6, j = 0; i >= start; i -= 6) { + w = parseHex(number, i, i + 6); + this.words[j] |= (w << off) & 0x3ffffff; + // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb + this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + if (i + 6 !== start) { + w = parseHex(number, start, i + 6); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; + } + this.strip(); + }; + + function parseBase (str, start, end, mul) { + var r = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; + + r *= mul; + + // 'a' + if (c >= 49) { + r += c - 49 + 0xa; + + // 'A' + } else if (c >= 17) { + r += c - 17 + 0xa; + + // '0' - '9' + } else { + r += c; + } + } + return r; + } + + BN.prototype._parseBase = function _parseBase (number, base, start) { + // Initialize as zero + this.words = [ 0 ]; + this.length = 1; + + // Find length of limb in base + for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { + limbLen++; + } + limbLen--; + limbPow = (limbPow / base) | 0; + + var total = number.length - start; + var mod = total % limbLen; + var end = Math.min(total, total - mod) + start; + + var word = 0; + for (var i = start; i < end; i += limbLen) { + word = parseBase(number, i, i + limbLen, base); + + this.imuln(limbPow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + + if (mod !== 0) { + var pow = 1; + word = parseBase(number, i, number.length, base); + + for (i = 0; i < mod; i++) { + pow *= base; + } + + this.imuln(pow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + }; + + BN.prototype.copy = function copy (dest) { + dest.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + dest.words[i] = this.words[i]; + } + dest.length = this.length; + dest.negative = this.negative; + dest.red = this.red; + }; + + BN.prototype.clone = function clone () { + var r = new BN(null); + this.copy(r); + return r; + }; + + BN.prototype._expand = function _expand (size) { + while (this.length < size) { + this.words[this.length++] = 0; + } + return this; + }; + + // Remove leading `0` from `this` + BN.prototype.strip = function strip () { + while (this.length > 1 && this.words[this.length - 1] === 0) { + this.length--; + } + return this._normSign(); + }; + + BN.prototype._normSign = function _normSign () { + // -0 = 0 + if (this.length === 1 && this.words[0] === 0) { + this.negative = 0; + } + return this; + }; + + BN.prototype.inspect = function inspect () { + return (this.red ? ''; + }; + + /* + + var zeros = []; + var groupSizes = []; + var groupBases = []; + + var s = ''; + var i = -1; + while (++i < BN.wordSize) { + zeros[i] = s; + s += '0'; + } + groupSizes[0] = 0; + groupSizes[1] = 0; + groupBases[0] = 0; + groupBases[1] = 0; + var base = 2 - 1; + while (++base < 36 + 1) { + var groupSize = 0; + var groupBase = 1; + while (groupBase < (1 << BN.wordSize) / base) { + groupBase *= base; + groupSize += 1; + } + groupSizes[base] = groupSize; + groupBases[base] = groupBase; + } + + */ + + var zeros = [ + '', + '0', + '00', + '000', + '0000', + '00000', + '000000', + '0000000', + '00000000', + '000000000', + '0000000000', + '00000000000', + '000000000000', + '0000000000000', + '00000000000000', + '000000000000000', + '0000000000000000', + '00000000000000000', + '000000000000000000', + '0000000000000000000', + '00000000000000000000', + '000000000000000000000', + '0000000000000000000000', + '00000000000000000000000', + '000000000000000000000000', + '0000000000000000000000000' + ]; + + var groupSizes = [ + 0, 0, + 25, 16, 12, 11, 10, 9, 8, + 8, 7, 7, 7, 7, 6, 6, + 6, 6, 6, 6, 6, 5, 5, + 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5 + ]; + + var groupBases = [ + 0, 0, + 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, + 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, + 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, + 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, + 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 + ]; + + BN.prototype.toString = function toString (base, padding) { + base = base || 10; + padding = padding | 0 || 1; + + var out; + if (base === 16 || base === 'hex') { + out = ''; + var off = 0; + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = this.words[i]; + var word = (((w << off) | carry) & 0xffffff).toString(16); + carry = (w >>> (24 - off)) & 0xffffff; + if (carry !== 0 || i !== this.length - 1) { + out = zeros[6 - word.length] + word + out; + } else { + out = word + out; + } + off += 2; + if (off >= 26) { + off -= 26; + i--; + } + } + if (carry !== 0) { + out = carry.toString(16) + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + if (base === (base | 0) && base >= 2 && base <= 36) { + // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); + var groupSize = groupSizes[base]; + // var groupBase = Math.pow(base, groupSize); + var groupBase = groupBases[base]; + out = ''; + var c = this.clone(); + c.negative = 0; + while (!c.isZero()) { + var r = c.modn(groupBase).toString(base); + c = c.idivn(groupBase); + + if (!c.isZero()) { + out = zeros[groupSize - r.length] + r + out; + } else { + out = r + out; + } + } + if (this.isZero()) { + out = '0' + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + assert(false, 'Base should be between 2 and 36'); + }; + + BN.prototype.toNumber = function toNumber () { + var ret = this.words[0]; + if (this.length === 2) { + ret += this.words[1] * 0x4000000; + } else if (this.length === 3 && this.words[2] === 0x01) { + // NOTE: at this stage it is known that the top bit is set + ret += 0x10000000000000 + (this.words[1] * 0x4000000); + } else if (this.length > 2) { + assert(false, 'Number can only safely store up to 53 bits'); + } + return (this.negative !== 0) ? -ret : ret; + }; + + BN.prototype.toJSON = function toJSON () { + return this.toString(16); + }; + + BN.prototype.toBuffer = function toBuffer (endian, length) { + assert(typeof Buffer !== 'undefined'); + return this.toArrayLike(Buffer, endian, length); + }; + + BN.prototype.toArray = function toArray (endian, length) { + return this.toArrayLike(Array, endian, length); + }; + + BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { + var byteLength = this.byteLength(); + var reqLength = length || Math.max(1, byteLength); + assert(byteLength <= reqLength, 'byte array longer than desired length'); + assert(reqLength > 0, 'Requested array length <= 0'); + + this.strip(); + var littleEndian = endian === 'le'; + var res = new ArrayType(reqLength); + + var b, i; + var q = this.clone(); + if (!littleEndian) { + // Assume big-endian + for (i = 0; i < reqLength - byteLength; i++) { + res[i] = 0; + } + + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + + res[reqLength - i - 1] = b; + } + } else { + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); + + res[i] = b; + } + + for (; i < reqLength; i++) { + res[i] = 0; + } + } + + return res; + }; + + if (Math.clz32) { + BN.prototype._countBits = function _countBits (w) { + return 32 - Math.clz32(w); + }; + } else { + BN.prototype._countBits = function _countBits (w) { + var t = w; + var r = 0; + if (t >= 0x1000) { + r += 13; + t >>>= 13; + } + if (t >= 0x40) { + r += 7; + t >>>= 7; + } + if (t >= 0x8) { + r += 4; + t >>>= 4; + } + if (t >= 0x02) { + r += 2; + t >>>= 2; + } + return r + t; + }; + } + + BN.prototype._zeroBits = function _zeroBits (w) { + // Short-cut + if (w === 0) return 26; + + var t = w; + var r = 0; + if ((t & 0x1fff) === 0) { + r += 13; + t >>>= 13; + } + if ((t & 0x7f) === 0) { + r += 7; + t >>>= 7; + } + if ((t & 0xf) === 0) { + r += 4; + t >>>= 4; + } + if ((t & 0x3) === 0) { + r += 2; + t >>>= 2; + } + if ((t & 0x1) === 0) { + r++; + } + return r; + }; + + // Return number of used bits in a BN + BN.prototype.bitLength = function bitLength () { + var w = this.words[this.length - 1]; + var hi = this._countBits(w); + return (this.length - 1) * 26 + hi; + }; + + function toBitArray (num) { + var w = new Array(num.bitLength()); + + for (var bit = 0; bit < w.length; bit++) { + var off = (bit / 26) | 0; + var wbit = bit % 26; + + w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; + } + + return w; + } + + // Number of trailing zero bits + BN.prototype.zeroBits = function zeroBits () { + if (this.isZero()) return 0; + + var r = 0; + for (var i = 0; i < this.length; i++) { + var b = this._zeroBits(this.words[i]); + r += b; + if (b !== 26) break; + } + return r; + }; + + BN.prototype.byteLength = function byteLength () { + return Math.ceil(this.bitLength() / 8); + }; + + BN.prototype.toTwos = function toTwos (width) { + if (this.negative !== 0) { + return this.abs().inotn(width).iaddn(1); + } + return this.clone(); + }; + + BN.prototype.fromTwos = function fromTwos (width) { + if (this.testn(width - 1)) { + return this.notn(width).iaddn(1).ineg(); + } + return this.clone(); + }; + + BN.prototype.isNeg = function isNeg () { + return this.negative !== 0; + }; + + // Return negative clone of `this` + BN.prototype.neg = function neg () { + return this.clone().ineg(); + }; + + BN.prototype.ineg = function ineg () { + if (!this.isZero()) { + this.negative ^= 1; + } + + return this; + }; + + // Or `num` with `this` in-place + BN.prototype.iuor = function iuor (num) { + while (this.length < num.length) { + this.words[this.length++] = 0; + } + + for (var i = 0; i < num.length; i++) { + this.words[i] = this.words[i] | num.words[i]; + } + + return this.strip(); + }; + + BN.prototype.ior = function ior (num) { + assert((this.negative | num.negative) === 0); + return this.iuor(num); + }; + + // Or `num` with `this` + BN.prototype.or = function or (num) { + if (this.length > num.length) return this.clone().ior(num); + return num.clone().ior(this); + }; + + BN.prototype.uor = function uor (num) { + if (this.length > num.length) return this.clone().iuor(num); + return num.clone().iuor(this); + }; + + // And `num` with `this` in-place + BN.prototype.iuand = function iuand (num) { + // b = min-length(num, this) + var b; + if (this.length > num.length) { + b = num; + } else { + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = this.words[i] & num.words[i]; + } + + this.length = b.length; + + return this.strip(); + }; + + BN.prototype.iand = function iand (num) { + assert((this.negative | num.negative) === 0); + return this.iuand(num); + }; + + // And `num` with `this` + BN.prototype.and = function and (num) { + if (this.length > num.length) return this.clone().iand(num); + return num.clone().iand(this); + }; + + BN.prototype.uand = function uand (num) { + if (this.length > num.length) return this.clone().iuand(num); + return num.clone().iuand(this); + }; + + // Xor `num` with `this` in-place + BN.prototype.iuxor = function iuxor (num) { + // a.length > b.length + var a; + var b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + for (var i = 0; i < b.length; i++) { + this.words[i] = a.words[i] ^ b.words[i]; + } + + if (this !== a) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = a.length; + + return this.strip(); + }; + + BN.prototype.ixor = function ixor (num) { + assert((this.negative | num.negative) === 0); + return this.iuxor(num); + }; + + // Xor `num` with `this` + BN.prototype.xor = function xor (num) { + if (this.length > num.length) return this.clone().ixor(num); + return num.clone().ixor(this); + }; + + BN.prototype.uxor = function uxor (num) { + if (this.length > num.length) return this.clone().iuxor(num); + return num.clone().iuxor(this); + }; + + // Not ``this`` with ``width`` bitwidth + BN.prototype.inotn = function inotn (width) { + assert(typeof width === 'number' && width >= 0); + + var bytesNeeded = Math.ceil(width / 26) | 0; + var bitsLeft = width % 26; + + // Extend the buffer with leading zeroes + this._expand(bytesNeeded); + + if (bitsLeft > 0) { + bytesNeeded--; + } + + // Handle complete words + for (var i = 0; i < bytesNeeded; i++) { + this.words[i] = ~this.words[i] & 0x3ffffff; + } + + // Handle the residue + if (bitsLeft > 0) { + this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); + } + + // And remove leading zeroes + return this.strip(); + }; + + BN.prototype.notn = function notn (width) { + return this.clone().inotn(width); + }; + + // Set `bit` of `this` + BN.prototype.setn = function setn (bit, val) { + assert(typeof bit === 'number' && bit >= 0); + + var off = (bit / 26) | 0; + var wbit = bit % 26; + + this._expand(off + 1); + + if (val) { + this.words[off] = this.words[off] | (1 << wbit); + } else { + this.words[off] = this.words[off] & ~(1 << wbit); + } + + return this.strip(); + }; + + // Add `num` to `this` in-place + BN.prototype.iadd = function iadd (num) { + var r; + + // negative + positive + if (this.negative !== 0 && num.negative === 0) { + this.negative = 0; + r = this.isub(num); + this.negative ^= 1; + return this._normSign(); + + // positive + negative + } else if (this.negative === 0 && num.negative !== 0) { + num.negative = 0; + r = this.isub(num); + num.negative = 1; + return r._normSign(); + } + + // a.length > b.length + var a, b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) + (b.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + + this.length = a.length; + if (carry !== 0) { + this.words[this.length] = carry; + this.length++; + // Copy the rest of the words + } else if (a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + return this; + }; + + // Add `num` to `this` + BN.prototype.add = function add (num) { + var res; + if (num.negative !== 0 && this.negative === 0) { + num.negative = 0; + res = this.sub(num); + num.negative ^= 1; + return res; + } else if (num.negative === 0 && this.negative !== 0) { + this.negative = 0; + res = num.sub(this); + this.negative = 1; + return res; + } + + if (this.length > num.length) return this.clone().iadd(num); + + return num.clone().iadd(this); + }; + + // Subtract `num` from `this` in-place + BN.prototype.isub = function isub (num) { + // this - (-num) = this + num + if (num.negative !== 0) { + num.negative = 0; + var r = this.iadd(num); + num.negative = 1; + return r._normSign(); + + // -this - num = -(this + num) + } else if (this.negative !== 0) { + this.negative = 0; + this.iadd(num); + this.negative = 1; + return this._normSign(); + } + + // At this point both numbers are positive + var cmp = this.cmp(num); + + // Optimization - zeroify + if (cmp === 0) { + this.negative = 0; + this.length = 1; + this.words[0] = 0; + return this; + } + + // a > b + var a, b; + if (cmp > 0) { + a = this; + b = num; + } else { + a = num; + b = this; + } + + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) - (b.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + + // Copy rest of the words + if (carry === 0 && i < a.length && a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } + + this.length = Math.max(this.length, i); + + if (a !== this) { + this.negative = 1; + } + + return this.strip(); + }; + + // Subtract `num` from `this` + BN.prototype.sub = function sub (num) { + return this.clone().isub(num); + }; + + function smallMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + var len = (self.length + num.length) | 0; + out.length = len; + len = (len - 1) | 0; + + // Peel one iteration (compiler can't do it, because of code complexity) + var a = self.words[0] | 0; + var b = num.words[0] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + var carry = (r / 0x4000000) | 0; + out.words[0] = lo; + + for (var k = 1; k < len; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = carry >>> 26; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = (k - j) | 0; + a = self.words[i] | 0; + b = num.words[j] | 0; + r = a * b + rword; + ncarry += (r / 0x4000000) | 0; + rword = r & 0x3ffffff; + } + out.words[k] = rword | 0; + carry = ncarry | 0; + } + if (carry !== 0) { + out.words[k] = carry | 0; + } else { + out.length--; + } + + return out.strip(); + } + + // TODO(indutny): it may be reasonable to omit it for users who don't need + // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit + // multiplication (like elliptic secp256k1). + var comb10MulTo = function comb10MulTo (self, num, out) { + var a = self.words; + var b = num.words; + var o = out.words; + var c = 0; + var lo; + var mid; + var hi; + var a0 = a[0] | 0; + var al0 = a0 & 0x1fff; + var ah0 = a0 >>> 13; + var a1 = a[1] | 0; + var al1 = a1 & 0x1fff; + var ah1 = a1 >>> 13; + var a2 = a[2] | 0; + var al2 = a2 & 0x1fff; + var ah2 = a2 >>> 13; + var a3 = a[3] | 0; + var al3 = a3 & 0x1fff; + var ah3 = a3 >>> 13; + var a4 = a[4] | 0; + var al4 = a4 & 0x1fff; + var ah4 = a4 >>> 13; + var a5 = a[5] | 0; + var al5 = a5 & 0x1fff; + var ah5 = a5 >>> 13; + var a6 = a[6] | 0; + var al6 = a6 & 0x1fff; + var ah6 = a6 >>> 13; + var a7 = a[7] | 0; + var al7 = a7 & 0x1fff; + var ah7 = a7 >>> 13; + var a8 = a[8] | 0; + var al8 = a8 & 0x1fff; + var ah8 = a8 >>> 13; + var a9 = a[9] | 0; + var al9 = a9 & 0x1fff; + var ah9 = a9 >>> 13; + var b0 = b[0] | 0; + var bl0 = b0 & 0x1fff; + var bh0 = b0 >>> 13; + var b1 = b[1] | 0; + var bl1 = b1 & 0x1fff; + var bh1 = b1 >>> 13; + var b2 = b[2] | 0; + var bl2 = b2 & 0x1fff; + var bh2 = b2 >>> 13; + var b3 = b[3] | 0; + var bl3 = b3 & 0x1fff; + var bh3 = b3 >>> 13; + var b4 = b[4] | 0; + var bl4 = b4 & 0x1fff; + var bh4 = b4 >>> 13; + var b5 = b[5] | 0; + var bl5 = b5 & 0x1fff; + var bh5 = b5 >>> 13; + var b6 = b[6] | 0; + var bl6 = b6 & 0x1fff; + var bh6 = b6 >>> 13; + var b7 = b[7] | 0; + var bl7 = b7 & 0x1fff; + var bh7 = b7 >>> 13; + var b8 = b[8] | 0; + var bl8 = b8 & 0x1fff; + var bh8 = b8 >>> 13; + var b9 = b[9] | 0; + var bl9 = b9 & 0x1fff; + var bh9 = b9 >>> 13; + + out.negative = self.negative ^ num.negative; + out.length = 19; + /* k = 0 */ + lo = Math.imul(al0, bl0); + mid = Math.imul(al0, bh0); + mid = (mid + Math.imul(ah0, bl0)) | 0; + hi = Math.imul(ah0, bh0); + var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; + w0 &= 0x3ffffff; + /* k = 1 */ + lo = Math.imul(al1, bl0); + mid = Math.imul(al1, bh0); + mid = (mid + Math.imul(ah1, bl0)) | 0; + hi = Math.imul(ah1, bh0); + lo = (lo + Math.imul(al0, bl1)) | 0; + mid = (mid + Math.imul(al0, bh1)) | 0; + mid = (mid + Math.imul(ah0, bl1)) | 0; + hi = (hi + Math.imul(ah0, bh1)) | 0; + var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; + w1 &= 0x3ffffff; + /* k = 2 */ + lo = Math.imul(al2, bl0); + mid = Math.imul(al2, bh0); + mid = (mid + Math.imul(ah2, bl0)) | 0; + hi = Math.imul(ah2, bh0); + lo = (lo + Math.imul(al1, bl1)) | 0; + mid = (mid + Math.imul(al1, bh1)) | 0; + mid = (mid + Math.imul(ah1, bl1)) | 0; + hi = (hi + Math.imul(ah1, bh1)) | 0; + lo = (lo + Math.imul(al0, bl2)) | 0; + mid = (mid + Math.imul(al0, bh2)) | 0; + mid = (mid + Math.imul(ah0, bl2)) | 0; + hi = (hi + Math.imul(ah0, bh2)) | 0; + var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; + w2 &= 0x3ffffff; + /* k = 3 */ + lo = Math.imul(al3, bl0); + mid = Math.imul(al3, bh0); + mid = (mid + Math.imul(ah3, bl0)) | 0; + hi = Math.imul(ah3, bh0); + lo = (lo + Math.imul(al2, bl1)) | 0; + mid = (mid + Math.imul(al2, bh1)) | 0; + mid = (mid + Math.imul(ah2, bl1)) | 0; + hi = (hi + Math.imul(ah2, bh1)) | 0; + lo = (lo + Math.imul(al1, bl2)) | 0; + mid = (mid + Math.imul(al1, bh2)) | 0; + mid = (mid + Math.imul(ah1, bl2)) | 0; + hi = (hi + Math.imul(ah1, bh2)) | 0; + lo = (lo + Math.imul(al0, bl3)) | 0; + mid = (mid + Math.imul(al0, bh3)) | 0; + mid = (mid + Math.imul(ah0, bl3)) | 0; + hi = (hi + Math.imul(ah0, bh3)) | 0; + var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; + w3 &= 0x3ffffff; + /* k = 4 */ + lo = Math.imul(al4, bl0); + mid = Math.imul(al4, bh0); + mid = (mid + Math.imul(ah4, bl0)) | 0; + hi = Math.imul(ah4, bh0); + lo = (lo + Math.imul(al3, bl1)) | 0; + mid = (mid + Math.imul(al3, bh1)) | 0; + mid = (mid + Math.imul(ah3, bl1)) | 0; + hi = (hi + Math.imul(ah3, bh1)) | 0; + lo = (lo + Math.imul(al2, bl2)) | 0; + mid = (mid + Math.imul(al2, bh2)) | 0; + mid = (mid + Math.imul(ah2, bl2)) | 0; + hi = (hi + Math.imul(ah2, bh2)) | 0; + lo = (lo + Math.imul(al1, bl3)) | 0; + mid = (mid + Math.imul(al1, bh3)) | 0; + mid = (mid + Math.imul(ah1, bl3)) | 0; + hi = (hi + Math.imul(ah1, bh3)) | 0; + lo = (lo + Math.imul(al0, bl4)) | 0; + mid = (mid + Math.imul(al0, bh4)) | 0; + mid = (mid + Math.imul(ah0, bl4)) | 0; + hi = (hi + Math.imul(ah0, bh4)) | 0; + var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; + w4 &= 0x3ffffff; + /* k = 5 */ + lo = Math.imul(al5, bl0); + mid = Math.imul(al5, bh0); + mid = (mid + Math.imul(ah5, bl0)) | 0; + hi = Math.imul(ah5, bh0); + lo = (lo + Math.imul(al4, bl1)) | 0; + mid = (mid + Math.imul(al4, bh1)) | 0; + mid = (mid + Math.imul(ah4, bl1)) | 0; + hi = (hi + Math.imul(ah4, bh1)) | 0; + lo = (lo + Math.imul(al3, bl2)) | 0; + mid = (mid + Math.imul(al3, bh2)) | 0; + mid = (mid + Math.imul(ah3, bl2)) | 0; + hi = (hi + Math.imul(ah3, bh2)) | 0; + lo = (lo + Math.imul(al2, bl3)) | 0; + mid = (mid + Math.imul(al2, bh3)) | 0; + mid = (mid + Math.imul(ah2, bl3)) | 0; + hi = (hi + Math.imul(ah2, bh3)) | 0; + lo = (lo + Math.imul(al1, bl4)) | 0; + mid = (mid + Math.imul(al1, bh4)) | 0; + mid = (mid + Math.imul(ah1, bl4)) | 0; + hi = (hi + Math.imul(ah1, bh4)) | 0; + lo = (lo + Math.imul(al0, bl5)) | 0; + mid = (mid + Math.imul(al0, bh5)) | 0; + mid = (mid + Math.imul(ah0, bl5)) | 0; + hi = (hi + Math.imul(ah0, bh5)) | 0; + var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; + w5 &= 0x3ffffff; + /* k = 6 */ + lo = Math.imul(al6, bl0); + mid = Math.imul(al6, bh0); + mid = (mid + Math.imul(ah6, bl0)) | 0; + hi = Math.imul(ah6, bh0); + lo = (lo + Math.imul(al5, bl1)) | 0; + mid = (mid + Math.imul(al5, bh1)) | 0; + mid = (mid + Math.imul(ah5, bl1)) | 0; + hi = (hi + Math.imul(ah5, bh1)) | 0; + lo = (lo + Math.imul(al4, bl2)) | 0; + mid = (mid + Math.imul(al4, bh2)) | 0; + mid = (mid + Math.imul(ah4, bl2)) | 0; + hi = (hi + Math.imul(ah4, bh2)) | 0; + lo = (lo + Math.imul(al3, bl3)) | 0; + mid = (mid + Math.imul(al3, bh3)) | 0; + mid = (mid + Math.imul(ah3, bl3)) | 0; + hi = (hi + Math.imul(ah3, bh3)) | 0; + lo = (lo + Math.imul(al2, bl4)) | 0; + mid = (mid + Math.imul(al2, bh4)) | 0; + mid = (mid + Math.imul(ah2, bl4)) | 0; + hi = (hi + Math.imul(ah2, bh4)) | 0; + lo = (lo + Math.imul(al1, bl5)) | 0; + mid = (mid + Math.imul(al1, bh5)) | 0; + mid = (mid + Math.imul(ah1, bl5)) | 0; + hi = (hi + Math.imul(ah1, bh5)) | 0; + lo = (lo + Math.imul(al0, bl6)) | 0; + mid = (mid + Math.imul(al0, bh6)) | 0; + mid = (mid + Math.imul(ah0, bl6)) | 0; + hi = (hi + Math.imul(ah0, bh6)) | 0; + var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; + w6 &= 0x3ffffff; + /* k = 7 */ + lo = Math.imul(al7, bl0); + mid = Math.imul(al7, bh0); + mid = (mid + Math.imul(ah7, bl0)) | 0; + hi = Math.imul(ah7, bh0); + lo = (lo + Math.imul(al6, bl1)) | 0; + mid = (mid + Math.imul(al6, bh1)) | 0; + mid = (mid + Math.imul(ah6, bl1)) | 0; + hi = (hi + Math.imul(ah6, bh1)) | 0; + lo = (lo + Math.imul(al5, bl2)) | 0; + mid = (mid + Math.imul(al5, bh2)) | 0; + mid = (mid + Math.imul(ah5, bl2)) | 0; + hi = (hi + Math.imul(ah5, bh2)) | 0; + lo = (lo + Math.imul(al4, bl3)) | 0; + mid = (mid + Math.imul(al4, bh3)) | 0; + mid = (mid + Math.imul(ah4, bl3)) | 0; + hi = (hi + Math.imul(ah4, bh3)) | 0; + lo = (lo + Math.imul(al3, bl4)) | 0; + mid = (mid + Math.imul(al3, bh4)) | 0; + mid = (mid + Math.imul(ah3, bl4)) | 0; + hi = (hi + Math.imul(ah3, bh4)) | 0; + lo = (lo + Math.imul(al2, bl5)) | 0; + mid = (mid + Math.imul(al2, bh5)) | 0; + mid = (mid + Math.imul(ah2, bl5)) | 0; + hi = (hi + Math.imul(ah2, bh5)) | 0; + lo = (lo + Math.imul(al1, bl6)) | 0; + mid = (mid + Math.imul(al1, bh6)) | 0; + mid = (mid + Math.imul(ah1, bl6)) | 0; + hi = (hi + Math.imul(ah1, bh6)) | 0; + lo = (lo + Math.imul(al0, bl7)) | 0; + mid = (mid + Math.imul(al0, bh7)) | 0; + mid = (mid + Math.imul(ah0, bl7)) | 0; + hi = (hi + Math.imul(ah0, bh7)) | 0; + var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; + w7 &= 0x3ffffff; + /* k = 8 */ + lo = Math.imul(al8, bl0); + mid = Math.imul(al8, bh0); + mid = (mid + Math.imul(ah8, bl0)) | 0; + hi = Math.imul(ah8, bh0); + lo = (lo + Math.imul(al7, bl1)) | 0; + mid = (mid + Math.imul(al7, bh1)) | 0; + mid = (mid + Math.imul(ah7, bl1)) | 0; + hi = (hi + Math.imul(ah7, bh1)) | 0; + lo = (lo + Math.imul(al6, bl2)) | 0; + mid = (mid + Math.imul(al6, bh2)) | 0; + mid = (mid + Math.imul(ah6, bl2)) | 0; + hi = (hi + Math.imul(ah6, bh2)) | 0; + lo = (lo + Math.imul(al5, bl3)) | 0; + mid = (mid + Math.imul(al5, bh3)) | 0; + mid = (mid + Math.imul(ah5, bl3)) | 0; + hi = (hi + Math.imul(ah5, bh3)) | 0; + lo = (lo + Math.imul(al4, bl4)) | 0; + mid = (mid + Math.imul(al4, bh4)) | 0; + mid = (mid + Math.imul(ah4, bl4)) | 0; + hi = (hi + Math.imul(ah4, bh4)) | 0; + lo = (lo + Math.imul(al3, bl5)) | 0; + mid = (mid + Math.imul(al3, bh5)) | 0; + mid = (mid + Math.imul(ah3, bl5)) | 0; + hi = (hi + Math.imul(ah3, bh5)) | 0; + lo = (lo + Math.imul(al2, bl6)) | 0; + mid = (mid + Math.imul(al2, bh6)) | 0; + mid = (mid + Math.imul(ah2, bl6)) | 0; + hi = (hi + Math.imul(ah2, bh6)) | 0; + lo = (lo + Math.imul(al1, bl7)) | 0; + mid = (mid + Math.imul(al1, bh7)) | 0; + mid = (mid + Math.imul(ah1, bl7)) | 0; + hi = (hi + Math.imul(ah1, bh7)) | 0; + lo = (lo + Math.imul(al0, bl8)) | 0; + mid = (mid + Math.imul(al0, bh8)) | 0; + mid = (mid + Math.imul(ah0, bl8)) | 0; + hi = (hi + Math.imul(ah0, bh8)) | 0; + var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; + w8 &= 0x3ffffff; + /* k = 9 */ + lo = Math.imul(al9, bl0); + mid = Math.imul(al9, bh0); + mid = (mid + Math.imul(ah9, bl0)) | 0; + hi = Math.imul(ah9, bh0); + lo = (lo + Math.imul(al8, bl1)) | 0; + mid = (mid + Math.imul(al8, bh1)) | 0; + mid = (mid + Math.imul(ah8, bl1)) | 0; + hi = (hi + Math.imul(ah8, bh1)) | 0; + lo = (lo + Math.imul(al7, bl2)) | 0; + mid = (mid + Math.imul(al7, bh2)) | 0; + mid = (mid + Math.imul(ah7, bl2)) | 0; + hi = (hi + Math.imul(ah7, bh2)) | 0; + lo = (lo + Math.imul(al6, bl3)) | 0; + mid = (mid + Math.imul(al6, bh3)) | 0; + mid = (mid + Math.imul(ah6, bl3)) | 0; + hi = (hi + Math.imul(ah6, bh3)) | 0; + lo = (lo + Math.imul(al5, bl4)) | 0; + mid = (mid + Math.imul(al5, bh4)) | 0; + mid = (mid + Math.imul(ah5, bl4)) | 0; + hi = (hi + Math.imul(ah5, bh4)) | 0; + lo = (lo + Math.imul(al4, bl5)) | 0; + mid = (mid + Math.imul(al4, bh5)) | 0; + mid = (mid + Math.imul(ah4, bl5)) | 0; + hi = (hi + Math.imul(ah4, bh5)) | 0; + lo = (lo + Math.imul(al3, bl6)) | 0; + mid = (mid + Math.imul(al3, bh6)) | 0; + mid = (mid + Math.imul(ah3, bl6)) | 0; + hi = (hi + Math.imul(ah3, bh6)) | 0; + lo = (lo + Math.imul(al2, bl7)) | 0; + mid = (mid + Math.imul(al2, bh7)) | 0; + mid = (mid + Math.imul(ah2, bl7)) | 0; + hi = (hi + Math.imul(ah2, bh7)) | 0; + lo = (lo + Math.imul(al1, bl8)) | 0; + mid = (mid + Math.imul(al1, bh8)) | 0; + mid = (mid + Math.imul(ah1, bl8)) | 0; + hi = (hi + Math.imul(ah1, bh8)) | 0; + lo = (lo + Math.imul(al0, bl9)) | 0; + mid = (mid + Math.imul(al0, bh9)) | 0; + mid = (mid + Math.imul(ah0, bl9)) | 0; + hi = (hi + Math.imul(ah0, bh9)) | 0; + var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; + w9 &= 0x3ffffff; + /* k = 10 */ + lo = Math.imul(al9, bl1); + mid = Math.imul(al9, bh1); + mid = (mid + Math.imul(ah9, bl1)) | 0; + hi = Math.imul(ah9, bh1); + lo = (lo + Math.imul(al8, bl2)) | 0; + mid = (mid + Math.imul(al8, bh2)) | 0; + mid = (mid + Math.imul(ah8, bl2)) | 0; + hi = (hi + Math.imul(ah8, bh2)) | 0; + lo = (lo + Math.imul(al7, bl3)) | 0; + mid = (mid + Math.imul(al7, bh3)) | 0; + mid = (mid + Math.imul(ah7, bl3)) | 0; + hi = (hi + Math.imul(ah7, bh3)) | 0; + lo = (lo + Math.imul(al6, bl4)) | 0; + mid = (mid + Math.imul(al6, bh4)) | 0; + mid = (mid + Math.imul(ah6, bl4)) | 0; + hi = (hi + Math.imul(ah6, bh4)) | 0; + lo = (lo + Math.imul(al5, bl5)) | 0; + mid = (mid + Math.imul(al5, bh5)) | 0; + mid = (mid + Math.imul(ah5, bl5)) | 0; + hi = (hi + Math.imul(ah5, bh5)) | 0; + lo = (lo + Math.imul(al4, bl6)) | 0; + mid = (mid + Math.imul(al4, bh6)) | 0; + mid = (mid + Math.imul(ah4, bl6)) | 0; + hi = (hi + Math.imul(ah4, bh6)) | 0; + lo = (lo + Math.imul(al3, bl7)) | 0; + mid = (mid + Math.imul(al3, bh7)) | 0; + mid = (mid + Math.imul(ah3, bl7)) | 0; + hi = (hi + Math.imul(ah3, bh7)) | 0; + lo = (lo + Math.imul(al2, bl8)) | 0; + mid = (mid + Math.imul(al2, bh8)) | 0; + mid = (mid + Math.imul(ah2, bl8)) | 0; + hi = (hi + Math.imul(ah2, bh8)) | 0; + lo = (lo + Math.imul(al1, bl9)) | 0; + mid = (mid + Math.imul(al1, bh9)) | 0; + mid = (mid + Math.imul(ah1, bl9)) | 0; + hi = (hi + Math.imul(ah1, bh9)) | 0; + var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; + w10 &= 0x3ffffff; + /* k = 11 */ + lo = Math.imul(al9, bl2); + mid = Math.imul(al9, bh2); + mid = (mid + Math.imul(ah9, bl2)) | 0; + hi = Math.imul(ah9, bh2); + lo = (lo + Math.imul(al8, bl3)) | 0; + mid = (mid + Math.imul(al8, bh3)) | 0; + mid = (mid + Math.imul(ah8, bl3)) | 0; + hi = (hi + Math.imul(ah8, bh3)) | 0; + lo = (lo + Math.imul(al7, bl4)) | 0; + mid = (mid + Math.imul(al7, bh4)) | 0; + mid = (mid + Math.imul(ah7, bl4)) | 0; + hi = (hi + Math.imul(ah7, bh4)) | 0; + lo = (lo + Math.imul(al6, bl5)) | 0; + mid = (mid + Math.imul(al6, bh5)) | 0; + mid = (mid + Math.imul(ah6, bl5)) | 0; + hi = (hi + Math.imul(ah6, bh5)) | 0; + lo = (lo + Math.imul(al5, bl6)) | 0; + mid = (mid + Math.imul(al5, bh6)) | 0; + mid = (mid + Math.imul(ah5, bl6)) | 0; + hi = (hi + Math.imul(ah5, bh6)) | 0; + lo = (lo + Math.imul(al4, bl7)) | 0; + mid = (mid + Math.imul(al4, bh7)) | 0; + mid = (mid + Math.imul(ah4, bl7)) | 0; + hi = (hi + Math.imul(ah4, bh7)) | 0; + lo = (lo + Math.imul(al3, bl8)) | 0; + mid = (mid + Math.imul(al3, bh8)) | 0; + mid = (mid + Math.imul(ah3, bl8)) | 0; + hi = (hi + Math.imul(ah3, bh8)) | 0; + lo = (lo + Math.imul(al2, bl9)) | 0; + mid = (mid + Math.imul(al2, bh9)) | 0; + mid = (mid + Math.imul(ah2, bl9)) | 0; + hi = (hi + Math.imul(ah2, bh9)) | 0; + var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; + w11 &= 0x3ffffff; + /* k = 12 */ + lo = Math.imul(al9, bl3); + mid = Math.imul(al9, bh3); + mid = (mid + Math.imul(ah9, bl3)) | 0; + hi = Math.imul(ah9, bh3); + lo = (lo + Math.imul(al8, bl4)) | 0; + mid = (mid + Math.imul(al8, bh4)) | 0; + mid = (mid + Math.imul(ah8, bl4)) | 0; + hi = (hi + Math.imul(ah8, bh4)) | 0; + lo = (lo + Math.imul(al7, bl5)) | 0; + mid = (mid + Math.imul(al7, bh5)) | 0; + mid = (mid + Math.imul(ah7, bl5)) | 0; + hi = (hi + Math.imul(ah7, bh5)) | 0; + lo = (lo + Math.imul(al6, bl6)) | 0; + mid = (mid + Math.imul(al6, bh6)) | 0; + mid = (mid + Math.imul(ah6, bl6)) | 0; + hi = (hi + Math.imul(ah6, bh6)) | 0; + lo = (lo + Math.imul(al5, bl7)) | 0; + mid = (mid + Math.imul(al5, bh7)) | 0; + mid = (mid + Math.imul(ah5, bl7)) | 0; + hi = (hi + Math.imul(ah5, bh7)) | 0; + lo = (lo + Math.imul(al4, bl8)) | 0; + mid = (mid + Math.imul(al4, bh8)) | 0; + mid = (mid + Math.imul(ah4, bl8)) | 0; + hi = (hi + Math.imul(ah4, bh8)) | 0; + lo = (lo + Math.imul(al3, bl9)) | 0; + mid = (mid + Math.imul(al3, bh9)) | 0; + mid = (mid + Math.imul(ah3, bl9)) | 0; + hi = (hi + Math.imul(ah3, bh9)) | 0; + var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; + w12 &= 0x3ffffff; + /* k = 13 */ + lo = Math.imul(al9, bl4); + mid = Math.imul(al9, bh4); + mid = (mid + Math.imul(ah9, bl4)) | 0; + hi = Math.imul(ah9, bh4); + lo = (lo + Math.imul(al8, bl5)) | 0; + mid = (mid + Math.imul(al8, bh5)) | 0; + mid = (mid + Math.imul(ah8, bl5)) | 0; + hi = (hi + Math.imul(ah8, bh5)) | 0; + lo = (lo + Math.imul(al7, bl6)) | 0; + mid = (mid + Math.imul(al7, bh6)) | 0; + mid = (mid + Math.imul(ah7, bl6)) | 0; + hi = (hi + Math.imul(ah7, bh6)) | 0; + lo = (lo + Math.imul(al6, bl7)) | 0; + mid = (mid + Math.imul(al6, bh7)) | 0; + mid = (mid + Math.imul(ah6, bl7)) | 0; + hi = (hi + Math.imul(ah6, bh7)) | 0; + lo = (lo + Math.imul(al5, bl8)) | 0; + mid = (mid + Math.imul(al5, bh8)) | 0; + mid = (mid + Math.imul(ah5, bl8)) | 0; + hi = (hi + Math.imul(ah5, bh8)) | 0; + lo = (lo + Math.imul(al4, bl9)) | 0; + mid = (mid + Math.imul(al4, bh9)) | 0; + mid = (mid + Math.imul(ah4, bl9)) | 0; + hi = (hi + Math.imul(ah4, bh9)) | 0; + var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; + w13 &= 0x3ffffff; + /* k = 14 */ + lo = Math.imul(al9, bl5); + mid = Math.imul(al9, bh5); + mid = (mid + Math.imul(ah9, bl5)) | 0; + hi = Math.imul(ah9, bh5); + lo = (lo + Math.imul(al8, bl6)) | 0; + mid = (mid + Math.imul(al8, bh6)) | 0; + mid = (mid + Math.imul(ah8, bl6)) | 0; + hi = (hi + Math.imul(ah8, bh6)) | 0; + lo = (lo + Math.imul(al7, bl7)) | 0; + mid = (mid + Math.imul(al7, bh7)) | 0; + mid = (mid + Math.imul(ah7, bl7)) | 0; + hi = (hi + Math.imul(ah7, bh7)) | 0; + lo = (lo + Math.imul(al6, bl8)) | 0; + mid = (mid + Math.imul(al6, bh8)) | 0; + mid = (mid + Math.imul(ah6, bl8)) | 0; + hi = (hi + Math.imul(ah6, bh8)) | 0; + lo = (lo + Math.imul(al5, bl9)) | 0; + mid = (mid + Math.imul(al5, bh9)) | 0; + mid = (mid + Math.imul(ah5, bl9)) | 0; + hi = (hi + Math.imul(ah5, bh9)) | 0; + var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; + w14 &= 0x3ffffff; + /* k = 15 */ + lo = Math.imul(al9, bl6); + mid = Math.imul(al9, bh6); + mid = (mid + Math.imul(ah9, bl6)) | 0; + hi = Math.imul(ah9, bh6); + lo = (lo + Math.imul(al8, bl7)) | 0; + mid = (mid + Math.imul(al8, bh7)) | 0; + mid = (mid + Math.imul(ah8, bl7)) | 0; + hi = (hi + Math.imul(ah8, bh7)) | 0; + lo = (lo + Math.imul(al7, bl8)) | 0; + mid = (mid + Math.imul(al7, bh8)) | 0; + mid = (mid + Math.imul(ah7, bl8)) | 0; + hi = (hi + Math.imul(ah7, bh8)) | 0; + lo = (lo + Math.imul(al6, bl9)) | 0; + mid = (mid + Math.imul(al6, bh9)) | 0; + mid = (mid + Math.imul(ah6, bl9)) | 0; + hi = (hi + Math.imul(ah6, bh9)) | 0; + var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; + w15 &= 0x3ffffff; + /* k = 16 */ + lo = Math.imul(al9, bl7); + mid = Math.imul(al9, bh7); + mid = (mid + Math.imul(ah9, bl7)) | 0; + hi = Math.imul(ah9, bh7); + lo = (lo + Math.imul(al8, bl8)) | 0; + mid = (mid + Math.imul(al8, bh8)) | 0; + mid = (mid + Math.imul(ah8, bl8)) | 0; + hi = (hi + Math.imul(ah8, bh8)) | 0; + lo = (lo + Math.imul(al7, bl9)) | 0; + mid = (mid + Math.imul(al7, bh9)) | 0; + mid = (mid + Math.imul(ah7, bl9)) | 0; + hi = (hi + Math.imul(ah7, bh9)) | 0; + var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; + w16 &= 0x3ffffff; + /* k = 17 */ + lo = Math.imul(al9, bl8); + mid = Math.imul(al9, bh8); + mid = (mid + Math.imul(ah9, bl8)) | 0; + hi = Math.imul(ah9, bh8); + lo = (lo + Math.imul(al8, bl9)) | 0; + mid = (mid + Math.imul(al8, bh9)) | 0; + mid = (mid + Math.imul(ah8, bl9)) | 0; + hi = (hi + Math.imul(ah8, bh9)) | 0; + var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; + w17 &= 0x3ffffff; + /* k = 18 */ + lo = Math.imul(al9, bl9); + mid = Math.imul(al9, bh9); + mid = (mid + Math.imul(ah9, bl9)) | 0; + hi = Math.imul(ah9, bh9); + var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; + c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; + w18 &= 0x3ffffff; + o[0] = w0; + o[1] = w1; + o[2] = w2; + o[3] = w3; + o[4] = w4; + o[5] = w5; + o[6] = w6; + o[7] = w7; + o[8] = w8; + o[9] = w9; + o[10] = w10; + o[11] = w11; + o[12] = w12; + o[13] = w13; + o[14] = w14; + o[15] = w15; + o[16] = w16; + o[17] = w17; + o[18] = w18; + if (c !== 0) { + o[19] = c; + out.length++; + } + return out; + }; + + // Polyfill comb + if (!Math.imul) { + comb10MulTo = smallMulTo; + } + + function bigMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + out.length = self.length + num.length; + + var carry = 0; + var hncarry = 0; + for (var k = 0; k < out.length - 1; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = hncarry; + hncarry = 0; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = k - j; + var a = self.words[i] | 0; + var b = num.words[j] | 0; + var r = a * b; + + var lo = r & 0x3ffffff; + ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; + lo = (lo + rword) | 0; + rword = lo & 0x3ffffff; + ncarry = (ncarry + (lo >>> 26)) | 0; + + hncarry += ncarry >>> 26; + ncarry &= 0x3ffffff; + } + out.words[k] = rword; + carry = ncarry; + ncarry = hncarry; + } + if (carry !== 0) { + out.words[k] = carry; + } else { + out.length--; + } + + return out.strip(); + } + + function jumboMulTo (self, num, out) { + var fftm = new FFTM(); + return fftm.mulp(self, num, out); + } + + BN.prototype.mulTo = function mulTo (num, out) { + var res; + var len = this.length + num.length; + if (this.length === 10 && num.length === 10) { + res = comb10MulTo(this, num, out); + } else if (len < 63) { + res = smallMulTo(this, num, out); + } else if (len < 1024) { + res = bigMulTo(this, num, out); + } else { + res = jumboMulTo(this, num, out); + } + + return res; + }; + + // Cooley-Tukey algorithm for FFT + // slightly revisited to rely on looping instead of recursion + + function FFTM (x, y) { + this.x = x; + this.y = y; + } + + FFTM.prototype.makeRBT = function makeRBT (N) { + var t = new Array(N); + var l = BN.prototype._countBits(N) - 1; + for (var i = 0; i < N; i++) { + t[i] = this.revBin(i, l, N); + } + + return t; + }; + + // Returns binary-reversed representation of `x` + FFTM.prototype.revBin = function revBin (x, l, N) { + if (x === 0 || x === N - 1) return x; + + var rb = 0; + for (var i = 0; i < l; i++) { + rb |= (x & 1) << (l - i - 1); + x >>= 1; + } + + return rb; + }; + + // Performs "tweedling" phase, therefore 'emulating' + // behaviour of the recursive algorithm + FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { + for (var i = 0; i < N; i++) { + rtws[i] = rws[rbt[i]]; + itws[i] = iws[rbt[i]]; + } + }; + + FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { + this.permute(rbt, rws, iws, rtws, itws, N); + + for (var s = 1; s < N; s <<= 1) { + var l = s << 1; + + var rtwdf = Math.cos(2 * Math.PI / l); + var itwdf = Math.sin(2 * Math.PI / l); + + for (var p = 0; p < N; p += l) { + var rtwdf_ = rtwdf; + var itwdf_ = itwdf; + + for (var j = 0; j < s; j++) { + var re = rtws[p + j]; + var ie = itws[p + j]; + + var ro = rtws[p + j + s]; + var io = itws[p + j + s]; + + var rx = rtwdf_ * ro - itwdf_ * io; + + io = rtwdf_ * io + itwdf_ * ro; + ro = rx; + + rtws[p + j] = re + ro; + itws[p + j] = ie + io; + + rtws[p + j + s] = re - ro; + itws[p + j + s] = ie - io; + + /* jshint maxdepth : false */ + if (j !== l) { + rx = rtwdf * rtwdf_ - itwdf * itwdf_; + + itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; + rtwdf_ = rx; + } + } + } + } + }; + + FFTM.prototype.guessLen13b = function guessLen13b (n, m) { + var N = Math.max(m, n) | 1; + var odd = N & 1; + var i = 0; + for (N = N / 2 | 0; N; N = N >>> 1) { + i++; + } + + return 1 << i + 1 + odd; + }; + + FFTM.prototype.conjugate = function conjugate (rws, iws, N) { + if (N <= 1) return; + + for (var i = 0; i < N / 2; i++) { + var t = rws[i]; + + rws[i] = rws[N - i - 1]; + rws[N - i - 1] = t; + + t = iws[i]; + + iws[i] = -iws[N - i - 1]; + iws[N - i - 1] = -t; + } + }; + + FFTM.prototype.normalize13b = function normalize13b (ws, N) { + var carry = 0; + for (var i = 0; i < N / 2; i++) { + var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + + Math.round(ws[2 * i] / N) + + carry; + + ws[i] = w & 0x3ffffff; + + if (w < 0x4000000) { + carry = 0; + } else { + carry = w / 0x4000000 | 0; + } + } + + return ws; + }; + + FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { + var carry = 0; + for (var i = 0; i < len; i++) { + carry = carry + (ws[i] | 0); + + rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; + rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; + } + + // Pad with zeroes + for (i = 2 * len; i < N; ++i) { + rws[i] = 0; + } + + assert(carry === 0); + assert((carry & ~0x1fff) === 0); + }; + + FFTM.prototype.stub = function stub (N) { + var ph = new Array(N); + for (var i = 0; i < N; i++) { + ph[i] = 0; + } + + return ph; + }; + + FFTM.prototype.mulp = function mulp (x, y, out) { + var N = 2 * this.guessLen13b(x.length, y.length); + + var rbt = this.makeRBT(N); + + var _ = this.stub(N); + + var rws = new Array(N); + var rwst = new Array(N); + var iwst = new Array(N); + + var nrws = new Array(N); + var nrwst = new Array(N); + var niwst = new Array(N); + + var rmws = out.words; + rmws.length = N; + + this.convert13b(x.words, x.length, rws, N); + this.convert13b(y.words, y.length, nrws, N); + + this.transform(rws, _, rwst, iwst, N, rbt); + this.transform(nrws, _, nrwst, niwst, N, rbt); + + for (var i = 0; i < N; i++) { + var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; + iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; + rwst[i] = rx; + } + + this.conjugate(rwst, iwst, N); + this.transform(rwst, iwst, rmws, _, N, rbt); + this.conjugate(rmws, _, N); + this.normalize13b(rmws, N); + + out.negative = x.negative ^ y.negative; + out.length = x.length + y.length; + return out.strip(); + }; + + // Multiply `this` by `num` + BN.prototype.mul = function mul (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return this.mulTo(num, out); + }; + + // Multiply employing FFT + BN.prototype.mulf = function mulf (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return jumboMulTo(this, num, out); + }; + + // In-place Multiplication + BN.prototype.imul = function imul (num) { + return this.clone().mulTo(num, this); + }; + + BN.prototype.imuln = function imuln (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + + // Carry + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = (this.words[i] | 0) * num; + var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); + carry >>= 26; + carry += (w / 0x4000000) | 0; + // NOTE: lo is 27bit maximum + carry += lo >>> 26; + this.words[i] = lo & 0x3ffffff; + } + + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + + return this; + }; + + BN.prototype.muln = function muln (num) { + return this.clone().imuln(num); + }; + + // `this` * `this` + BN.prototype.sqr = function sqr () { + return this.mul(this); + }; + + // `this` * `this` in-place + BN.prototype.isqr = function isqr () { + return this.imul(this.clone()); + }; + + // Math.pow(`this`, `num`) + BN.prototype.pow = function pow (num) { + var w = toBitArray(num); + if (w.length === 0) return new BN(1); + + // Skip leading zeroes + var res = this; + for (var i = 0; i < w.length; i++, res = res.sqr()) { + if (w[i] !== 0) break; + } + + if (++i < w.length) { + for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { + if (w[i] === 0) continue; + + res = res.mul(q); + } + } + + return res; + }; + + // Shift-left in-place + BN.prototype.iushln = function iushln (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); + var i; + + if (r !== 0) { + var carry = 0; + + for (i = 0; i < this.length; i++) { + var newCarry = this.words[i] & carryMask; + var c = ((this.words[i] | 0) - newCarry) << r; + this.words[i] = c | carry; + carry = newCarry >>> (26 - r); + } + + if (carry) { + this.words[i] = carry; + this.length++; + } + } + + if (s !== 0) { + for (i = this.length - 1; i >= 0; i--) { + this.words[i + s] = this.words[i]; + } + + for (i = 0; i < s; i++) { + this.words[i] = 0; + } + + this.length += s; + } + + return this.strip(); + }; + + BN.prototype.ishln = function ishln (bits) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushln(bits); + }; + + // Shift-right in-place + // NOTE: `hint` is a lowest bit before trailing zeroes + // NOTE: if `extended` is present - it will be filled with destroyed bits + BN.prototype.iushrn = function iushrn (bits, hint, extended) { + assert(typeof bits === 'number' && bits >= 0); + var h; + if (hint) { + h = (hint - (hint % 26)) / 26; + } else { + h = 0; + } + + var r = bits % 26; + var s = Math.min((bits - r) / 26, this.length); + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + var maskedWords = extended; + + h -= s; + h = Math.max(0, h); + + // Extended mode, copy masked part + if (maskedWords) { + for (var i = 0; i < s; i++) { + maskedWords.words[i] = this.words[i]; + } + maskedWords.length = s; + } + + if (s === 0) { + // No-op, we should not move anything at all + } else if (this.length > s) { + this.length -= s; + for (i = 0; i < this.length; i++) { + this.words[i] = this.words[i + s]; + } + } else { + this.words[0] = 0; + this.length = 1; + } + + var carry = 0; + for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { + var word = this.words[i] | 0; + this.words[i] = (carry << (26 - r)) | (word >>> r); + carry = word & mask; + } + + // Push carried bits as a mask + if (maskedWords && carry !== 0) { + maskedWords.words[maskedWords.length++] = carry; + } + + if (this.length === 0) { + this.words[0] = 0; + this.length = 1; + } + + return this.strip(); + }; + + BN.prototype.ishrn = function ishrn (bits, hint, extended) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushrn(bits, hint, extended); + }; + + // Shift-left + BN.prototype.shln = function shln (bits) { + return this.clone().ishln(bits); + }; + + BN.prototype.ushln = function ushln (bits) { + return this.clone().iushln(bits); + }; + + // Shift-right + BN.prototype.shrn = function shrn (bits) { + return this.clone().ishrn(bits); + }; + + BN.prototype.ushrn = function ushrn (bits) { + return this.clone().iushrn(bits); + }; + + // Test if n bit is set + BN.prototype.testn = function testn (bit) { + assert(typeof bit === 'number' && bit >= 0); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) return false; + + // Check bit and return + var w = this.words[s]; + + return !!(w & q); + }; + + // Return only lowers bits of number (in-place) + BN.prototype.imaskn = function imaskn (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + + assert(this.negative === 0, 'imaskn works only with positive numbers'); + + if (this.length <= s) { + return this; + } + + if (r !== 0) { + s++; + } + this.length = Math.min(s, this.length); + + if (r !== 0) { + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + this.words[this.length - 1] &= mask; + } + + return this.strip(); + }; + + // Return only lowers bits of number + BN.prototype.maskn = function maskn (bits) { + return this.clone().imaskn(bits); + }; + + // Add plain number `num` to `this` + BN.prototype.iaddn = function iaddn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.isubn(-num); + + // Possible sign change + if (this.negative !== 0) { + if (this.length === 1 && (this.words[0] | 0) < num) { + this.words[0] = num - (this.words[0] | 0); + this.negative = 0; + return this; + } + + this.negative = 0; + this.isubn(num); + this.negative = 1; + return this; + } + + // Add without checks + return this._iaddn(num); + }; + + BN.prototype._iaddn = function _iaddn (num) { + this.words[0] += num; + + // Carry + for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { + this.words[i] -= 0x4000000; + if (i === this.length - 1) { + this.words[i + 1] = 1; + } else { + this.words[i + 1]++; + } + } + this.length = Math.max(this.length, i + 1); + + return this; + }; + + // Subtract plain number `num` from `this` + BN.prototype.isubn = function isubn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.iaddn(-num); + + if (this.negative !== 0) { + this.negative = 0; + this.iaddn(num); + this.negative = 1; + return this; + } + + this.words[0] -= num; + + if (this.length === 1 && this.words[0] < 0) { + this.words[0] = -this.words[0]; + this.negative = 1; + } else { + // Carry + for (var i = 0; i < this.length && this.words[i] < 0; i++) { + this.words[i] += 0x4000000; + this.words[i + 1] -= 1; + } + } + + return this.strip(); + }; + + BN.prototype.addn = function addn (num) { + return this.clone().iaddn(num); + }; + + BN.prototype.subn = function subn (num) { + return this.clone().isubn(num); + }; + + BN.prototype.iabs = function iabs () { + this.negative = 0; + + return this; + }; + + BN.prototype.abs = function abs () { + return this.clone().iabs(); + }; + + BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { + var len = num.length + shift; + var i; + + this._expand(len); + + var w; + var carry = 0; + for (i = 0; i < num.length; i++) { + w = (this.words[i + shift] | 0) + carry; + var right = (num.words[i] | 0) * mul; + w -= right & 0x3ffffff; + carry = (w >> 26) - ((right / 0x4000000) | 0); + this.words[i + shift] = w & 0x3ffffff; + } + for (; i < this.length - shift; i++) { + w = (this.words[i + shift] | 0) + carry; + carry = w >> 26; + this.words[i + shift] = w & 0x3ffffff; + } + + if (carry === 0) return this.strip(); + + // Subtraction overflow + assert(carry === -1); + carry = 0; + for (i = 0; i < this.length; i++) { + w = -(this.words[i] | 0) + carry; + carry = w >> 26; + this.words[i] = w & 0x3ffffff; + } + this.negative = 1; + + return this.strip(); + }; + + BN.prototype._wordDiv = function _wordDiv (num, mode) { + var shift = this.length - num.length; + + var a = this.clone(); + var b = num; + + // Normalize + var bhi = b.words[b.length - 1] | 0; + var bhiBits = this._countBits(bhi); + shift = 26 - bhiBits; + if (shift !== 0) { + b = b.ushln(shift); + a.iushln(shift); + bhi = b.words[b.length - 1] | 0; + } + + // Initialize quotient + var m = a.length - b.length; + var q; + + if (mode !== 'mod') { + q = new BN(null); + q.length = m + 1; + q.words = new Array(q.length); + for (var i = 0; i < q.length; i++) { + q.words[i] = 0; + } + } + + var diff = a.clone()._ishlnsubmul(b, 1, m); + if (diff.negative === 0) { + a = diff; + if (q) { + q.words[m] = 1; + } + } + + for (var j = m - 1; j >= 0; j--) { + var qj = (a.words[b.length + j] | 0) * 0x4000000 + + (a.words[b.length + j - 1] | 0); + + // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max + // (0x7ffffff) + qj = Math.min((qj / bhi) | 0, 0x3ffffff); + + a._ishlnsubmul(b, qj, j); + while (a.negative !== 0) { + qj--; + a.negative = 0; + a._ishlnsubmul(b, 1, j); + if (!a.isZero()) { + a.negative ^= 1; + } + } + if (q) { + q.words[j] = qj; + } + } + if (q) { + q.strip(); + } + a.strip(); + + // Denormalize + if (mode !== 'div' && shift !== 0) { + a.iushrn(shift); + } + + return { + div: q || null, + mod: a + }; + }; + + // NOTE: 1) `mode` can be set to `mod` to request mod only, + // to `div` to request div only, or be absent to + // request both div & mod + // 2) `positive` is true if unsigned mod is requested + BN.prototype.divmod = function divmod (num, mode, positive) { + assert(!num.isZero()); + + if (this.isZero()) { + return { + div: new BN(0), + mod: new BN(0) + }; + } + + var div, mod, res; + if (this.negative !== 0 && num.negative === 0) { + res = this.neg().divmod(num, mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.iadd(num); + } + } + + return { + div: div, + mod: mod + }; + } + + if (this.negative === 0 && num.negative !== 0) { + res = this.divmod(num.neg(), mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + return { + div: div, + mod: res.mod + }; + } + + if ((this.negative & num.negative) !== 0) { + res = this.neg().divmod(num.neg(), mode); + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.isub(num); + } + } + + return { + div: res.div, + mod: mod + }; + } + + // Both numbers are positive at this point + + // Strip both numbers to approximate shift value + if (num.length > this.length || this.cmp(num) < 0) { + return { + div: new BN(0), + mod: this + }; + } + + // Very short reduction + if (num.length === 1) { + if (mode === 'div') { + return { + div: this.divn(num.words[0]), + mod: null + }; + } + + if (mode === 'mod') { + return { + div: null, + mod: new BN(this.modn(num.words[0])) + }; + } + + return { + div: this.divn(num.words[0]), + mod: new BN(this.modn(num.words[0])) + }; + } + + return this._wordDiv(num, mode); + }; + + // Find `this` / `num` + BN.prototype.div = function div (num) { + return this.divmod(num, 'div', false).div; + }; + + // Find `this` % `num` + BN.prototype.mod = function mod (num) { + return this.divmod(num, 'mod', false).mod; + }; + + BN.prototype.umod = function umod (num) { + return this.divmod(num, 'mod', true).mod; + }; + + // Find Round(`this` / `num`) + BN.prototype.divRound = function divRound (num) { + var dm = this.divmod(num); + + // Fast case - exact division + if (dm.mod.isZero()) return dm.div; + + var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; + + var half = num.ushrn(1); + var r2 = num.andln(1); + var cmp = mod.cmp(half); + + // Round down + if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; + + // Round up + return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); + }; + + BN.prototype.modn = function modn (num) { + assert(num <= 0x3ffffff); + var p = (1 << 26) % num; + + var acc = 0; + for (var i = this.length - 1; i >= 0; i--) { + acc = (p * acc + (this.words[i] | 0)) % num; + } + + return acc; + }; + + // In-place division by number + BN.prototype.idivn = function idivn (num) { + assert(num <= 0x3ffffff); + + var carry = 0; + for (var i = this.length - 1; i >= 0; i--) { + var w = (this.words[i] | 0) + carry * 0x4000000; + this.words[i] = (w / num) | 0; + carry = w % num; + } + + return this.strip(); + }; + + BN.prototype.divn = function divn (num) { + return this.clone().idivn(num); + }; + + BN.prototype.egcd = function egcd (p) { + assert(p.negative === 0); + assert(!p.isZero()); + + var x = this; + var y = p.clone(); + + if (x.negative !== 0) { + x = x.umod(p); + } else { + x = x.clone(); + } + + // A * x + B * y = x + var A = new BN(1); + var B = new BN(0); + + // C * x + D * y = y + var C = new BN(0); + var D = new BN(1); + + var g = 0; + + while (x.isEven() && y.isEven()) { + x.iushrn(1); + y.iushrn(1); + ++g; + } + + var yp = y.clone(); + var xp = x.clone(); + + while (!x.isZero()) { + for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + x.iushrn(i); + while (i-- > 0) { + if (A.isOdd() || B.isOdd()) { + A.iadd(yp); + B.isub(xp); + } + + A.iushrn(1); + B.iushrn(1); + } + } + + for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + y.iushrn(j); + while (j-- > 0) { + if (C.isOdd() || D.isOdd()) { + C.iadd(yp); + D.isub(xp); + } + + C.iushrn(1); + D.iushrn(1); + } + } + + if (x.cmp(y) >= 0) { + x.isub(y); + A.isub(C); + B.isub(D); + } else { + y.isub(x); + C.isub(A); + D.isub(B); + } + } + + return { + a: C, + b: D, + gcd: y.iushln(g) + }; + }; + + // This is reduced incarnation of the binary EEA + // above, designated to invert members of the + // _prime_ fields F(p) at a maximal speed + BN.prototype._invmp = function _invmp (p) { + assert(p.negative === 0); + assert(!p.isZero()); + + var a = this; + var b = p.clone(); + + if (a.negative !== 0) { + a = a.umod(p); + } else { + a = a.clone(); + } + + var x1 = new BN(1); + var x2 = new BN(0); + + var delta = b.clone(); + + while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { + for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + a.iushrn(i); + while (i-- > 0) { + if (x1.isOdd()) { + x1.iadd(delta); + } + + x1.iushrn(1); + } + } + + for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + b.iushrn(j); + while (j-- > 0) { + if (x2.isOdd()) { + x2.iadd(delta); + } + + x2.iushrn(1); + } + } + + if (a.cmp(b) >= 0) { + a.isub(b); + x1.isub(x2); + } else { + b.isub(a); + x2.isub(x1); + } + } + + var res; + if (a.cmpn(1) === 0) { + res = x1; + } else { + res = x2; + } + + if (res.cmpn(0) < 0) { + res.iadd(p); + } + + return res; + }; + + BN.prototype.gcd = function gcd (num) { + if (this.isZero()) return num.abs(); + if (num.isZero()) return this.abs(); + + var a = this.clone(); + var b = num.clone(); + a.negative = 0; + b.negative = 0; + + // Remove common factor of two + for (var shift = 0; a.isEven() && b.isEven(); shift++) { + a.iushrn(1); + b.iushrn(1); + } + + do { + while (a.isEven()) { + a.iushrn(1); + } + while (b.isEven()) { + b.iushrn(1); + } + + var r = a.cmp(b); + if (r < 0) { + // Swap `a` and `b` to make `a` always bigger than `b` + var t = a; + a = b; + b = t; + } else if (r === 0 || b.cmpn(1) === 0) { + break; + } + + a.isub(b); + } while (true); + + return b.iushln(shift); + }; + + // Invert number in the field F(num) + BN.prototype.invm = function invm (num) { + return this.egcd(num).a.umod(num); + }; + + BN.prototype.isEven = function isEven () { + return (this.words[0] & 1) === 0; + }; + + BN.prototype.isOdd = function isOdd () { + return (this.words[0] & 1) === 1; + }; + + // And first word and num + BN.prototype.andln = function andln (num) { + return this.words[0] & num; + }; + + // Increment at the bit position in-line + BN.prototype.bincn = function bincn (bit) { + assert(typeof bit === 'number'); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + + // Fast case: bit is much higher than all existing words + if (this.length <= s) { + this._expand(s + 1); + this.words[s] |= q; + return this; + } + + // Add bit and propagate, if needed + var carry = q; + for (var i = s; carry !== 0 && i < this.length; i++) { + var w = this.words[i] | 0; + w += carry; + carry = w >>> 26; + w &= 0x3ffffff; + this.words[i] = w; + } + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + return this; + }; + + BN.prototype.isZero = function isZero () { + return this.length === 1 && this.words[0] === 0; + }; + + BN.prototype.cmpn = function cmpn (num) { + var negative = num < 0; + + if (this.negative !== 0 && !negative) return -1; + if (this.negative === 0 && negative) return 1; + + this.strip(); + + var res; + if (this.length > 1) { + res = 1; + } else { + if (negative) { + num = -num; + } + + assert(num <= 0x3ffffff, 'Number is too big'); + + var w = this.words[0] | 0; + res = w === num ? 0 : w < num ? -1 : 1; + } + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Compare two numbers and return: + // 1 - if `this` > `num` + // 0 - if `this` == `num` + // -1 - if `this` < `num` + BN.prototype.cmp = function cmp (num) { + if (this.negative !== 0 && num.negative === 0) return -1; + if (this.negative === 0 && num.negative !== 0) return 1; + + var res = this.ucmp(num); + if (this.negative !== 0) return -res | 0; + return res; + }; + + // Unsigned comparison + BN.prototype.ucmp = function ucmp (num) { + // At this point both numbers have the same sign + if (this.length > num.length) return 1; + if (this.length < num.length) return -1; + + var res = 0; + for (var i = this.length - 1; i >= 0; i--) { + var a = this.words[i] | 0; + var b = num.words[i] | 0; + + if (a === b) continue; + if (a < b) { + res = -1; + } else if (a > b) { + res = 1; + } + break; + } + return res; + }; + + BN.prototype.gtn = function gtn (num) { + return this.cmpn(num) === 1; + }; + + BN.prototype.gt = function gt (num) { + return this.cmp(num) === 1; + }; + + BN.prototype.gten = function gten (num) { + return this.cmpn(num) >= 0; + }; + + BN.prototype.gte = function gte (num) { + return this.cmp(num) >= 0; + }; + + BN.prototype.ltn = function ltn (num) { + return this.cmpn(num) === -1; + }; + + BN.prototype.lt = function lt (num) { + return this.cmp(num) === -1; + }; + + BN.prototype.lten = function lten (num) { + return this.cmpn(num) <= 0; + }; + + BN.prototype.lte = function lte (num) { + return this.cmp(num) <= 0; + }; + + BN.prototype.eqn = function eqn (num) { + return this.cmpn(num) === 0; + }; + + BN.prototype.eq = function eq (num) { + return this.cmp(num) === 0; + }; + + // + // A reduce context, could be using montgomery or something better, depending + // on the `m` itself. + // + BN.red = function red (num) { + return new Red(num); + }; + + BN.prototype.toRed = function toRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + assert(this.negative === 0, 'red works only with positives'); + return ctx.convertTo(this)._forceRed(ctx); + }; + + BN.prototype.fromRed = function fromRed () { + assert(this.red, 'fromRed works only with numbers in reduction context'); + return this.red.convertFrom(this); + }; + + BN.prototype._forceRed = function _forceRed (ctx) { + this.red = ctx; + return this; + }; + + BN.prototype.forceRed = function forceRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + return this._forceRed(ctx); + }; + + BN.prototype.redAdd = function redAdd (num) { + assert(this.red, 'redAdd works only with red numbers'); + return this.red.add(this, num); + }; + + BN.prototype.redIAdd = function redIAdd (num) { + assert(this.red, 'redIAdd works only with red numbers'); + return this.red.iadd(this, num); + }; + + BN.prototype.redSub = function redSub (num) { + assert(this.red, 'redSub works only with red numbers'); + return this.red.sub(this, num); + }; + + BN.prototype.redISub = function redISub (num) { + assert(this.red, 'redISub works only with red numbers'); + return this.red.isub(this, num); + }; + + BN.prototype.redShl = function redShl (num) { + assert(this.red, 'redShl works only with red numbers'); + return this.red.shl(this, num); + }; + + BN.prototype.redMul = function redMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.mul(this, num); + }; + + BN.prototype.redIMul = function redIMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.imul(this, num); + }; + + BN.prototype.redSqr = function redSqr () { + assert(this.red, 'redSqr works only with red numbers'); + this.red._verify1(this); + return this.red.sqr(this); + }; + + BN.prototype.redISqr = function redISqr () { + assert(this.red, 'redISqr works only with red numbers'); + this.red._verify1(this); + return this.red.isqr(this); + }; + + // Square root over p + BN.prototype.redSqrt = function redSqrt () { + assert(this.red, 'redSqrt works only with red numbers'); + this.red._verify1(this); + return this.red.sqrt(this); + }; + + BN.prototype.redInvm = function redInvm () { + assert(this.red, 'redInvm works only with red numbers'); + this.red._verify1(this); + return this.red.invm(this); + }; + + // Return negative clone of `this` % `red modulo` + BN.prototype.redNeg = function redNeg () { + assert(this.red, 'redNeg works only with red numbers'); + this.red._verify1(this); + return this.red.neg(this); + }; + + BN.prototype.redPow = function redPow (num) { + assert(this.red && !num.red, 'redPow(normalNum)'); + this.red._verify1(this); + return this.red.pow(this, num); + }; + + // Prime numbers with efficient reduction + var primes = { + k256: null, + p224: null, + p192: null, + p25519: null + }; + + // Pseudo-Mersenne prime + function MPrime (name, p) { + // P = 2 ^ N - K + this.name = name; + this.p = new BN(p, 16); + this.n = this.p.bitLength(); + this.k = new BN(1).iushln(this.n).isub(this.p); + + this.tmp = this._tmp(); + } + + MPrime.prototype._tmp = function _tmp () { + var tmp = new BN(null); + tmp.words = new Array(Math.ceil(this.n / 13)); + return tmp; + }; + + MPrime.prototype.ireduce = function ireduce (num) { + // Assumes that `num` is less than `P^2` + // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) + var r = num; + var rlen; + + do { + this.split(r, this.tmp); + r = this.imulK(r); + r = r.iadd(this.tmp); + rlen = r.bitLength(); + } while (rlen > this.n); + + var cmp = rlen < this.n ? -1 : r.ucmp(this.p); + if (cmp === 0) { + r.words[0] = 0; + r.length = 1; + } else if (cmp > 0) { + r.isub(this.p); + } else { + r.strip(); + } + + return r; + }; + + MPrime.prototype.split = function split (input, out) { + input.iushrn(this.n, 0, out); + }; + + MPrime.prototype.imulK = function imulK (num) { + return num.imul(this.k); + }; + + function K256 () { + MPrime.call( + this, + 'k256', + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); + } + inherits(K256, MPrime); + + K256.prototype.split = function split (input, output) { + // 256 = 9 * 26 + 22 + var mask = 0x3fffff; + + var outLen = Math.min(input.length, 9); + for (var i = 0; i < outLen; i++) { + output.words[i] = input.words[i]; + } + output.length = outLen; + + if (input.length <= 9) { + input.words[0] = 0; + input.length = 1; + return; + } + + // Shift by 9 limbs + var prev = input.words[9]; + output.words[output.length++] = prev & mask; + + for (i = 10; i < input.length; i++) { + var next = input.words[i] | 0; + input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); + prev = next; + } + prev >>>= 22; + input.words[i - 10] = prev; + if (prev === 0 && input.length > 10) { + input.length -= 10; + } else { + input.length -= 9; + } + }; + + K256.prototype.imulK = function imulK (num) { + // K = 0x1000003d1 = [ 0x40, 0x3d1 ] + num.words[num.length] = 0; + num.words[num.length + 1] = 0; + num.length += 2; + + // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 + var lo = 0; + for (var i = 0; i < num.length; i++) { + var w = num.words[i] | 0; + lo += w * 0x3d1; + num.words[i] = lo & 0x3ffffff; + lo = w * 0x40 + ((lo / 0x4000000) | 0); + } + + // Fast length reduction + if (num.words[num.length - 1] === 0) { + num.length--; + if (num.words[num.length - 1] === 0) { + num.length--; + } + } + return num; + }; + + function P224 () { + MPrime.call( + this, + 'p224', + 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); + } + inherits(P224, MPrime); + + function P192 () { + MPrime.call( + this, + 'p192', + 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); + } + inherits(P192, MPrime); + + function P25519 () { + // 2 ^ 255 - 19 + MPrime.call( + this, + '25519', + '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); + } + inherits(P25519, MPrime); + + P25519.prototype.imulK = function imulK (num) { + // K = 0x13 + var carry = 0; + for (var i = 0; i < num.length; i++) { + var hi = (num.words[i] | 0) * 0x13 + carry; + var lo = hi & 0x3ffffff; + hi >>>= 26; + + num.words[i] = lo; + carry = hi; + } + if (carry !== 0) { + num.words[num.length++] = carry; + } + return num; + }; + + // Exported mostly for testing purposes, use plain name instead + BN._prime = function prime (name) { + // Cached version of prime + if (primes[name]) return primes[name]; + + var prime; + if (name === 'k256') { + prime = new K256(); + } else if (name === 'p224') { + prime = new P224(); + } else if (name === 'p192') { + prime = new P192(); + } else if (name === 'p25519') { + prime = new P25519(); + } else { + throw new Error('Unknown prime ' + name); + } + primes[name] = prime; + + return prime; + }; + + // + // Base reduction engine + // + function Red (m) { + if (typeof m === 'string') { + var prime = BN._prime(m); + this.m = prime.p; + this.prime = prime; + } else { + assert(m.gtn(1), 'modulus must be greater than 1'); + this.m = m; + this.prime = null; + } + } + + Red.prototype._verify1 = function _verify1 (a) { + assert(a.negative === 0, 'red works only with positives'); + assert(a.red, 'red works only with red numbers'); + }; + + Red.prototype._verify2 = function _verify2 (a, b) { + assert((a.negative | b.negative) === 0, 'red works only with positives'); + assert(a.red && a.red === b.red, + 'red works only with red numbers'); + }; + + Red.prototype.imod = function imod (a) { + if (this.prime) return this.prime.ireduce(a)._forceRed(this); + return a.umod(this.m)._forceRed(this); + }; + + Red.prototype.neg = function neg (a) { + if (a.isZero()) { + return a.clone(); + } + + return this.m.sub(a)._forceRed(this); + }; + + Red.prototype.add = function add (a, b) { + this._verify2(a, b); + + var res = a.add(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res._forceRed(this); + }; + + Red.prototype.iadd = function iadd (a, b) { + this._verify2(a, b); + + var res = a.iadd(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res; + }; + + Red.prototype.sub = function sub (a, b) { + this._verify2(a, b); + + var res = a.sub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res._forceRed(this); + }; + + Red.prototype.isub = function isub (a, b) { + this._verify2(a, b); + + var res = a.isub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res; + }; + + Red.prototype.shl = function shl (a, num) { + this._verify1(a); + return this.imod(a.ushln(num)); + }; + + Red.prototype.imul = function imul (a, b) { + this._verify2(a, b); + return this.imod(a.imul(b)); + }; + + Red.prototype.mul = function mul (a, b) { + this._verify2(a, b); + return this.imod(a.mul(b)); + }; + + Red.prototype.isqr = function isqr (a) { + return this.imul(a, a.clone()); + }; + + Red.prototype.sqr = function sqr (a) { + return this.mul(a, a); + }; + + Red.prototype.sqrt = function sqrt (a) { + if (a.isZero()) return a.clone(); + + var mod3 = this.m.andln(3); + assert(mod3 % 2 === 1); + + // Fast case + if (mod3 === 3) { + var pow = this.m.add(new BN(1)).iushrn(2); + return this.pow(a, pow); + } + + // Tonelli-Shanks algorithm (Totally unoptimized and slow) + // + // Find Q and S, that Q * 2 ^ S = (P - 1) + var q = this.m.subn(1); + var s = 0; + while (!q.isZero() && q.andln(1) === 0) { + s++; + q.iushrn(1); + } + assert(!q.isZero()); + + var one = new BN(1).toRed(this); + var nOne = one.redNeg(); + + // Find quadratic non-residue + // NOTE: Max is such because of generalized Riemann hypothesis. + var lpow = this.m.subn(1).iushrn(1); + var z = this.m.bitLength(); + z = new BN(2 * z * z).toRed(this); + + while (this.pow(z, lpow).cmp(nOne) !== 0) { + z.redIAdd(nOne); + } + + var c = this.pow(z, q); + var r = this.pow(a, q.addn(1).iushrn(1)); + var t = this.pow(a, q); + var m = s; + while (t.cmp(one) !== 0) { + var tmp = t; + for (var i = 0; tmp.cmp(one) !== 0; i++) { + tmp = tmp.redSqr(); + } + assert(i < m); + var b = this.pow(c, new BN(1).iushln(m - i - 1)); + + r = r.redMul(b); + c = b.redSqr(); + t = t.redMul(c); + m = i; + } + + return r; + }; + + Red.prototype.invm = function invm (a) { + var inv = a._invmp(this.m); + if (inv.negative !== 0) { + inv.negative = 0; + return this.imod(inv).redNeg(); + } else { + return this.imod(inv); + } + }; + + Red.prototype.pow = function pow (a, num) { + if (num.isZero()) return new BN(1).toRed(this); + if (num.cmpn(1) === 0) return a.clone(); + + var windowSize = 4; + var wnd = new Array(1 << windowSize); + wnd[0] = new BN(1).toRed(this); + wnd[1] = a; + for (var i = 2; i < wnd.length; i++) { + wnd[i] = this.mul(wnd[i - 1], a); + } + + var res = wnd[0]; + var current = 0; + var currentLen = 0; + var start = num.bitLength() % 26; + if (start === 0) { + start = 26; + } + + for (i = num.length - 1; i >= 0; i--) { + var word = num.words[i]; + for (var j = start - 1; j >= 0; j--) { + var bit = (word >> j) & 1; + if (res !== wnd[0]) { + res = this.sqr(res); + } + + if (bit === 0 && current === 0) { + currentLen = 0; + continue; + } + + current <<= 1; + current |= bit; + currentLen++; + if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; + + res = this.mul(res, wnd[current]); + currentLen = 0; + current = 0; + } + start = 26; + } + + return res; + }; + + Red.prototype.convertTo = function convertTo (num) { + var r = num.umod(this.m); + + return r === num ? r.clone() : r; + }; + + Red.prototype.convertFrom = function convertFrom (num) { + var res = num.clone(); + res.red = null; + return res; + }; + + // + // Montgomery method engine + // + + BN.mont = function mont (num) { + return new Mont(num); + }; + + function Mont (m) { + Red.call(this, m); + + this.shift = this.m.bitLength(); + if (this.shift % 26 !== 0) { + this.shift += 26 - (this.shift % 26); + } + + this.r = new BN(1).iushln(this.shift); + this.r2 = this.imod(this.r.sqr()); + this.rinv = this.r._invmp(this.m); + + this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); + this.minv = this.minv.umod(this.r); + this.minv = this.r.sub(this.minv); + } + inherits(Mont, Red); + + Mont.prototype.convertTo = function convertTo (num) { + return this.imod(num.ushln(this.shift)); + }; + + Mont.prototype.convertFrom = function convertFrom (num) { + var r = this.imod(num.mul(this.rinv)); + r.red = null; + return r; + }; + + Mont.prototype.imul = function imul (a, b) { + if (a.isZero() || b.isZero()) { + a.words[0] = 0; + a.length = 1; + return a; + } + + var t = a.imul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.mul = function mul (a, b) { + if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); + + var t = a.mul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } + + return res._forceRed(this); + }; + + Mont.prototype.invm = function invm (a) { + // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R + var res = this.imod(a._invmp(this.m).mul(this.r2)); + return res._forceRed(this); + }; +})(typeof module === 'undefined' || module, this); + +},{"buffer":77}],67:[function(require,module,exports){ +ace.define("ace/snippets",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/anchor","ace/keyboard/hash_handler","ace/tokenizer","ace/lib/dom","ace/editor"], function(acequire, exports, module) { +"use strict"; +var oop = acequire("./lib/oop"); +var EventEmitter = acequire("./lib/event_emitter").EventEmitter; +var lang = acequire("./lib/lang"); +var Range = acequire("./range").Range; +var Anchor = acequire("./anchor").Anchor; +var HashHandler = acequire("./keyboard/hash_handler").HashHandler; +var Tokenizer = acequire("./tokenizer").Tokenizer; +var comparePoints = Range.comparePoints; + +var SnippetManager = function() { + this.snippetMap = {}; + this.snippetNameMap = {}; +}; + +(function() { + oop.implement(this, EventEmitter); + + this.getTokenizer = function() { + function TabstopToken(str, _, stack) { + str = str.substr(1); + if (/^\d+$/.test(str) && !stack.inFormatString) + return [{tabstopId: parseInt(str, 10)}]; + return [{text: str}]; + } + function escape(ch) { + return "(?:[^\\\\" + ch + "]|\\\\.)"; + } + SnippetManager.$tokenizer = new Tokenizer({ + start: [ + {regex: /:/, onMatch: function(val, state, stack) { + if (stack.length && stack[0].expectIf) { + stack[0].expectIf = false; + stack[0].elseBranch = stack[0]; + return [stack[0]]; + } + return ":"; + }}, + {regex: /\\./, onMatch: function(val, state, stack) { + var ch = val[1]; + if (ch == "}" && stack.length) { + val = ch; + }else if ("`$\\".indexOf(ch) != -1) { + val = ch; + } else if (stack.inFormatString) { + if (ch == "n") + val = "\n"; + else if (ch == "t") + val = "\n"; + else if ("ulULE".indexOf(ch) != -1) { + val = {changeCase: ch, local: ch > "a"}; + } + } + + return [val]; + }}, + {regex: /}/, onMatch: function(val, state, stack) { + return [stack.length ? stack.shift() : val]; + }}, + {regex: /\$(?:\d+|\w+)/, onMatch: TabstopToken}, + {regex: /\$\{[\dA-Z_a-z]+/, onMatch: function(str, state, stack) { + var t = TabstopToken(str.substr(1), state, stack); + stack.unshift(t[0]); + return t; + }, next: "snippetVar"}, + {regex: /\n/, token: "newline", merge: false} + ], + snippetVar: [ + {regex: "\\|" + escape("\\|") + "*\\|", onMatch: function(val, state, stack) { + stack[0].choices = val.slice(1, -1).split(","); + }, next: "start"}, + {regex: "/(" + escape("/") + "+)/(?:(" + escape("/") + "*)/)(\\w*):?", + onMatch: function(val, state, stack) { + var ts = stack[0]; + ts.fmtString = val; + + val = this.splitRegex.exec(val); + ts.guard = val[1]; + ts.fmt = val[2]; + ts.flag = val[3]; + return ""; + }, next: "start"}, + {regex: "`" + escape("`") + "*`", onMatch: function(val, state, stack) { + stack[0].code = val.splice(1, -1); + return ""; + }, next: "start"}, + {regex: "\\?", onMatch: function(val, state, stack) { + if (stack[0]) + stack[0].expectIf = true; + }, next: "start"}, + {regex: "([^:}\\\\]|\\\\.)*:?", token: "", next: "start"} + ], + formatString: [ + {regex: "/(" + escape("/") + "+)/", token: "regex"}, + {regex: "", onMatch: function(val, state, stack) { + stack.inFormatString = true; + }, next: "start"} + ] + }); + SnippetManager.prototype.getTokenizer = function() { + return SnippetManager.$tokenizer; + }; + return SnippetManager.$tokenizer; + }; + + this.tokenizeTmSnippet = function(str, startState) { + return this.getTokenizer().getLineTokens(str, startState).tokens.map(function(x) { + return x.value || x; + }); + }; + + this.$getDefaultValue = function(editor, name) { + if (/^[A-Z]\d+$/.test(name)) { + var i = name.substr(1); + return (this.variables[name[0] + "__"] || {})[i]; + } + if (/^\d+$/.test(name)) { + return (this.variables.__ || {})[name]; + } + name = name.replace(/^TM_/, ""); + + if (!editor) + return; + var s = editor.session; + switch(name) { + case "CURRENT_WORD": + var r = s.getWordRange(); + case "SELECTION": + case "SELECTED_TEXT": + return s.getTextRange(r); + case "CURRENT_LINE": + return s.getLine(editor.getCursorPosition().row); + case "PREV_LINE": // not possible in textmate + return s.getLine(editor.getCursorPosition().row - 1); + case "LINE_INDEX": + return editor.getCursorPosition().column; + case "LINE_NUMBER": + return editor.getCursorPosition().row + 1; + case "SOFT_TABS": + return s.getUseSoftTabs() ? "YES" : "NO"; + case "TAB_SIZE": + return s.getTabSize(); + case "FILENAME": + case "FILEPATH": + return ""; + case "FULLNAME": + return "Ace"; + } + }; + this.variables = {}; + this.getVariableValue = function(editor, varName) { + if (this.variables.hasOwnProperty(varName)) + return this.variables[varName](editor, varName) || ""; + return this.$getDefaultValue(editor, varName) || ""; + }; + this.tmStrFormat = function(str, ch, editor) { + var flag = ch.flag || ""; + var re = ch.guard; + re = new RegExp(re, flag.replace(/[^gi]/, "")); + var fmtTokens = this.tokenizeTmSnippet(ch.fmt, "formatString"); + var _self = this; + var formatted = str.replace(re, function() { + _self.variables.__ = arguments; + var fmtParts = _self.resolveVariables(fmtTokens, editor); + var gChangeCase = "E"; + for (var i = 0; i < fmtParts.length; i++) { + var ch = fmtParts[i]; + if (typeof ch == "object") { + fmtParts[i] = ""; + if (ch.changeCase && ch.local) { + var next = fmtParts[i + 1]; + if (next && typeof next == "string") { + if (ch.changeCase == "u") + fmtParts[i] = next[0].toUpperCase(); + else + fmtParts[i] = next[0].toLowerCase(); + fmtParts[i + 1] = next.substr(1); + } + } else if (ch.changeCase) { + gChangeCase = ch.changeCase; + } + } else if (gChangeCase == "U") { + fmtParts[i] = ch.toUpperCase(); + } else if (gChangeCase == "L") { + fmtParts[i] = ch.toLowerCase(); + } + } + return fmtParts.join(""); + }); + this.variables.__ = null; + return formatted; + }; + + this.resolveVariables = function(snippet, editor) { + var result = []; + for (var i = 0; i < snippet.length; i++) { + var ch = snippet[i]; + if (typeof ch == "string") { + result.push(ch); + } else if (typeof ch != "object") { + continue; + } else if (ch.skip) { + gotoNext(ch); + } else if (ch.processed < i) { + continue; + } else if (ch.text) { + var value = this.getVariableValue(editor, ch.text); + if (value && ch.fmtString) + value = this.tmStrFormat(value, ch); + ch.processed = i; + if (ch.expectIf == null) { + if (value) { + result.push(value); + gotoNext(ch); + } + } else { + if (value) { + ch.skip = ch.elseBranch; + } else + gotoNext(ch); + } + } else if (ch.tabstopId != null) { + result.push(ch); + } else if (ch.changeCase != null) { + result.push(ch); + } + } + function gotoNext(ch) { + var i1 = snippet.indexOf(ch, i + 1); + if (i1 != -1) + i = i1; + } + return result; + }; + + this.insertSnippetForSelection = function(editor, snippetText) { + var cursor = editor.getCursorPosition(); + var line = editor.session.getLine(cursor.row); + var tabString = editor.session.getTabString(); + var indentString = line.match(/^\s*/)[0]; + + if (cursor.column < indentString.length) + indentString = indentString.slice(0, cursor.column); + + var tokens = this.tokenizeTmSnippet(snippetText); + tokens = this.resolveVariables(tokens, editor); + tokens = tokens.map(function(x) { + if (x == "\n") + return x + indentString; + if (typeof x == "string") + return x.replace(/\t/g, tabString); + return x; + }); + var tabstops = []; + tokens.forEach(function(p, i) { + if (typeof p != "object") + return; + var id = p.tabstopId; + var ts = tabstops[id]; + if (!ts) { + ts = tabstops[id] = []; + ts.index = id; + ts.value = ""; + } + if (ts.indexOf(p) !== -1) + return; + ts.push(p); + var i1 = tokens.indexOf(p, i + 1); + if (i1 === -1) + return; + + var value = tokens.slice(i + 1, i1); + var isNested = value.some(function(t) {return typeof t === "object"}); + if (isNested && !ts.value) { + ts.value = value; + } else if (value.length && (!ts.value || typeof ts.value !== "string")) { + ts.value = value.join(""); + } + }); + tabstops.forEach(function(ts) {ts.length = 0}); + var expanding = {}; + function copyValue(val) { + var copy = []; + for (var i = 0; i < val.length; i++) { + var p = val[i]; + if (typeof p == "object") { + if (expanding[p.tabstopId]) + continue; + var j = val.lastIndexOf(p, i - 1); + p = copy[j] || {tabstopId: p.tabstopId}; + } + copy[i] = p; + } + return copy; + } + for (var i = 0; i < tokens.length; i++) { + var p = tokens[i]; + if (typeof p != "object") + continue; + var id = p.tabstopId; + var i1 = tokens.indexOf(p, i + 1); + if (expanding[id]) { + if (expanding[id] === p) + expanding[id] = null; + continue; + } + + var ts = tabstops[id]; + var arg = typeof ts.value == "string" ? [ts.value] : copyValue(ts.value); + arg.unshift(i + 1, Math.max(0, i1 - i)); + arg.push(p); + expanding[id] = p; + tokens.splice.apply(tokens, arg); + + if (ts.indexOf(p) === -1) + ts.push(p); + } + var row = 0, column = 0; + var text = ""; + tokens.forEach(function(t) { + if (typeof t === "string") { + if (t[0] === "\n"){ + column = t.length - 1; + row ++; + } else + column += t.length; + text += t; + } else { + if (!t.start) + t.start = {row: row, column: column}; + else + t.end = {row: row, column: column}; + } + }); + var range = editor.getSelectionRange(); + var end = editor.session.replace(range, text); + + var tabstopManager = new TabstopManager(editor); + var selectionId = editor.inVirtualSelectionMode && editor.selection.index; + tabstopManager.addTabstops(tabstops, range.start, end, selectionId); + }; + + this.insertSnippet = function(editor, snippetText) { + var self = this; + if (editor.inVirtualSelectionMode) + return self.insertSnippetForSelection(editor, snippetText); + + editor.forEachSelection(function() { + self.insertSnippetForSelection(editor, snippetText); + }, null, {keepOrder: true}); + + if (editor.tabstopManager) + editor.tabstopManager.tabNext(); + }; + + this.$getScope = function(editor) { + var scope = editor.session.$mode.$id || ""; + scope = scope.split("/").pop(); + if (scope === "html" || scope === "php") { + if (scope === "php" && !editor.session.$mode.inlinePhp) + scope = "html"; + var c = editor.getCursorPosition(); + var state = editor.session.getState(c.row); + if (typeof state === "object") { + state = state[0]; + } + if (state.substring) { + if (state.substring(0, 3) == "js-") + scope = "javascript"; + else if (state.substring(0, 4) == "css-") + scope = "css"; + else if (state.substring(0, 4) == "php-") + scope = "php"; + } + } + + return scope; + }; + + this.getActiveScopes = function(editor) { + var scope = this.$getScope(editor); + var scopes = [scope]; + var snippetMap = this.snippetMap; + if (snippetMap[scope] && snippetMap[scope].includeScopes) { + scopes.push.apply(scopes, snippetMap[scope].includeScopes); + } + scopes.push("_"); + return scopes; + }; + + this.expandWithTab = function(editor, options) { + var self = this; + var result = editor.forEachSelection(function() { + return self.expandSnippetForSelection(editor, options); + }, null, {keepOrder: true}); + if (result && editor.tabstopManager) + editor.tabstopManager.tabNext(); + return result; + }; + + this.expandSnippetForSelection = function(editor, options) { + var cursor = editor.getCursorPosition(); + var line = editor.session.getLine(cursor.row); + var before = line.substring(0, cursor.column); + var after = line.substr(cursor.column); + + var snippetMap = this.snippetMap; + var snippet; + this.getActiveScopes(editor).some(function(scope) { + var snippets = snippetMap[scope]; + if (snippets) + snippet = this.findMatchingSnippet(snippets, before, after); + return !!snippet; + }, this); + if (!snippet) + return false; + if (options && options.dryRun) + return true; + editor.session.doc.removeInLine(cursor.row, + cursor.column - snippet.replaceBefore.length, + cursor.column + snippet.replaceAfter.length + ); + + this.variables.M__ = snippet.matchBefore; + this.variables.T__ = snippet.matchAfter; + this.insertSnippetForSelection(editor, snippet.content); + + this.variables.M__ = this.variables.T__ = null; + return true; + }; + + this.findMatchingSnippet = function(snippetList, before, after) { + for (var i = snippetList.length; i--;) { + var s = snippetList[i]; + if (s.startRe && !s.startRe.test(before)) + continue; + if (s.endRe && !s.endRe.test(after)) + continue; + if (!s.startRe && !s.endRe) + continue; + + s.matchBefore = s.startRe ? s.startRe.exec(before) : [""]; + s.matchAfter = s.endRe ? s.endRe.exec(after) : [""]; + s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : ""; + s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : ""; + return s; + } + }; + + this.snippetMap = {}; + this.snippetNameMap = {}; + this.register = function(snippets, scope) { + var snippetMap = this.snippetMap; + var snippetNameMap = this.snippetNameMap; + var self = this; + + if (!snippets) + snippets = []; + + function wrapRegexp(src) { + if (src && !/^\^?\(.*\)\$?$|^\\b$/.test(src)) + src = "(?:" + src + ")"; + + return src || ""; + } + function guardedRegexp(re, guard, opening) { + re = wrapRegexp(re); + guard = wrapRegexp(guard); + if (opening) { + re = guard + re; + if (re && re[re.length - 1] != "$") + re = re + "$"; + } else { + re = re + guard; + if (re && re[0] != "^") + re = "^" + re; + } + return new RegExp(re); + } + + function addSnippet(s) { + if (!s.scope) + s.scope = scope || "_"; + scope = s.scope; + if (!snippetMap[scope]) { + snippetMap[scope] = []; + snippetNameMap[scope] = {}; + } + + var map = snippetNameMap[scope]; + if (s.name) { + var old = map[s.name]; + if (old) + self.unregister(old); + map[s.name] = s; + } + snippetMap[scope].push(s); + + if (s.tabTrigger && !s.trigger) { + if (!s.guard && /^\w/.test(s.tabTrigger)) + s.guard = "\\b"; + s.trigger = lang.escapeRegExp(s.tabTrigger); + } + + if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard) + return; + + s.startRe = guardedRegexp(s.trigger, s.guard, true); + s.triggerRe = new RegExp(s.trigger, "", true); + + s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true); + s.endTriggerRe = new RegExp(s.endTrigger, "", true); + } + + if (snippets && snippets.content) + addSnippet(snippets); + else if (Array.isArray(snippets)) + snippets.forEach(addSnippet); + + this._signal("registerSnippets", {scope: scope}); + }; + this.unregister = function(snippets, scope) { + var snippetMap = this.snippetMap; + var snippetNameMap = this.snippetNameMap; + + function removeSnippet(s) { + var nameMap = snippetNameMap[s.scope||scope]; + if (nameMap && nameMap[s.name]) { + delete nameMap[s.name]; + var map = snippetMap[s.scope||scope]; + var i = map && map.indexOf(s); + if (i >= 0) + map.splice(i, 1); + } + } + if (snippets.content) + removeSnippet(snippets); + else if (Array.isArray(snippets)) + snippets.forEach(removeSnippet); + }; + this.parseSnippetFile = function(str) { + str = str.replace(/\r/g, ""); + var list = [], snippet = {}; + var re = /^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm; + var m; + while (m = re.exec(str)) { + if (m[1]) { + try { + snippet = JSON.parse(m[1]); + list.push(snippet); + } catch (e) {} + } if (m[4]) { + snippet.content = m[4].replace(/^\t/gm, ""); + list.push(snippet); + snippet = {}; + } else { + var key = m[2], val = m[3]; + if (key == "regex") { + var guardRe = /\/((?:[^\/\\]|\\.)*)|$/g; + snippet.guard = guardRe.exec(val)[1]; + snippet.trigger = guardRe.exec(val)[1]; + snippet.endTrigger = guardRe.exec(val)[1]; + snippet.endGuard = guardRe.exec(val)[1]; + } else if (key == "snippet") { + snippet.tabTrigger = val.match(/^\S*/)[0]; + if (!snippet.name) + snippet.name = val; + } else { + snippet[key] = val; + } + } + } + return list; + }; + this.getSnippetByName = function(name, editor) { + var snippetMap = this.snippetNameMap; + var snippet; + this.getActiveScopes(editor).some(function(scope) { + var snippets = snippetMap[scope]; + if (snippets) + snippet = snippets[name]; + return !!snippet; + }, this); + return snippet; + }; + +}).call(SnippetManager.prototype); + + +var TabstopManager = function(editor) { + if (editor.tabstopManager) + return editor.tabstopManager; + editor.tabstopManager = this; + this.$onChange = this.onChange.bind(this); + this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule; + this.$onChangeSession = this.onChangeSession.bind(this); + this.$onAfterExec = this.onAfterExec.bind(this); + this.attach(editor); +}; +(function() { + this.attach = function(editor) { + this.index = 0; + this.ranges = []; + this.tabstops = []; + this.$openTabstops = null; + this.selectedTabstop = null; + + this.editor = editor; + this.editor.on("change", this.$onChange); + this.editor.on("changeSelection", this.$onChangeSelection); + this.editor.on("changeSession", this.$onChangeSession); + this.editor.commands.on("afterExec", this.$onAfterExec); + this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler); + }; + this.detach = function() { + this.tabstops.forEach(this.removeTabstopMarkers, this); + this.ranges = null; + this.tabstops = null; + this.selectedTabstop = null; + this.editor.removeListener("change", this.$onChange); + this.editor.removeListener("changeSelection", this.$onChangeSelection); + this.editor.removeListener("changeSession", this.$onChangeSession); + this.editor.commands.removeListener("afterExec", this.$onAfterExec); + this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler); + this.editor.tabstopManager = null; + this.editor = null; + }; + + this.onChange = function(delta) { + var changeRange = delta; + var isRemove = delta.action[0] == "r"; + var start = delta.start; + var end = delta.end; + var startRow = start.row; + var endRow = end.row; + var lineDif = endRow - startRow; + var colDiff = end.column - start.column; + + if (isRemove) { + lineDif = -lineDif; + colDiff = -colDiff; + } + if (!this.$inChange && isRemove) { + var ts = this.selectedTabstop; + var changedOutside = ts && !ts.some(function(r) { + return comparePoints(r.start, start) <= 0 && comparePoints(r.end, end) >= 0; + }); + if (changedOutside) + return this.detach(); + } + var ranges = this.ranges; + for (var i = 0; i < ranges.length; i++) { + var r = ranges[i]; + if (r.end.row < start.row) + continue; + + if (isRemove && comparePoints(start, r.start) < 0 && comparePoints(end, r.end) > 0) { + this.removeRange(r); + i--; + continue; + } + + if (r.start.row == startRow && r.start.column > start.column) + r.start.column += colDiff; + if (r.end.row == startRow && r.end.column >= start.column) + r.end.column += colDiff; + if (r.start.row >= startRow) + r.start.row += lineDif; + if (r.end.row >= startRow) + r.end.row += lineDif; + + if (comparePoints(r.start, r.end) > 0) + this.removeRange(r); + } + if (!ranges.length) + this.detach(); + }; + this.updateLinkedFields = function() { + var ts = this.selectedTabstop; + if (!ts || !ts.hasLinkedRanges) + return; + this.$inChange = true; + var session = this.editor.session; + var text = session.getTextRange(ts.firstNonLinked); + for (var i = ts.length; i--;) { + var range = ts[i]; + if (!range.linked) + continue; + var fmt = exports.snippetManager.tmStrFormat(text, range.original); + session.replace(range, fmt); + } + this.$inChange = false; + }; + this.onAfterExec = function(e) { + if (e.command && !e.command.readOnly) + this.updateLinkedFields(); + }; + this.onChangeSelection = function() { + if (!this.editor) + return; + var lead = this.editor.selection.lead; + var anchor = this.editor.selection.anchor; + var isEmpty = this.editor.selection.isEmpty(); + for (var i = this.ranges.length; i--;) { + if (this.ranges[i].linked) + continue; + var containsLead = this.ranges[i].contains(lead.row, lead.column); + var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column); + if (containsLead && containsAnchor) + return; + } + this.detach(); + }; + this.onChangeSession = function() { + this.detach(); + }; + this.tabNext = function(dir) { + var max = this.tabstops.length; + var index = this.index + (dir || 1); + index = Math.min(Math.max(index, 1), max); + if (index == max) + index = 0; + this.selectTabstop(index); + if (index === 0) + this.detach(); + }; + this.selectTabstop = function(index) { + this.$openTabstops = null; + var ts = this.tabstops[this.index]; + if (ts) + this.addTabstopMarkers(ts); + this.index = index; + ts = this.tabstops[this.index]; + if (!ts || !ts.length) + return; + + this.selectedTabstop = ts; + if (!this.editor.inVirtualSelectionMode) { + var sel = this.editor.multiSelect; + sel.toSingleRange(ts.firstNonLinked.clone()); + for (var i = ts.length; i--;) { + if (ts.hasLinkedRanges && ts[i].linked) + continue; + sel.addRange(ts[i].clone(), true); + } + if (sel.ranges[0]) + sel.addRange(sel.ranges[0].clone()); + } else { + this.editor.selection.setRange(ts.firstNonLinked); + } + + this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler); + }; + this.addTabstops = function(tabstops, start, end) { + if (!this.$openTabstops) + this.$openTabstops = []; + if (!tabstops[0]) { + var p = Range.fromPoints(end, end); + moveRelative(p.start, start); + moveRelative(p.end, start); + tabstops[0] = [p]; + tabstops[0].index = 0; + } + + var i = this.index; + var arg = [i + 1, 0]; + var ranges = this.ranges; + tabstops.forEach(function(ts, index) { + var dest = this.$openTabstops[index] || ts; + + for (var i = ts.length; i--;) { + var p = ts[i]; + var range = Range.fromPoints(p.start, p.end || p.start); + movePoint(range.start, start); + movePoint(range.end, start); + range.original = p; + range.tabstop = dest; + ranges.push(range); + if (dest != ts) + dest.unshift(range); + else + dest[i] = range; + if (p.fmtString) { + range.linked = true; + dest.hasLinkedRanges = true; + } else if (!dest.firstNonLinked) + dest.firstNonLinked = range; + } + if (!dest.firstNonLinked) + dest.hasLinkedRanges = false; + if (dest === ts) { + arg.push(dest); + this.$openTabstops[index] = dest; + } + this.addTabstopMarkers(dest); + }, this); + + if (arg.length > 2) { + if (this.tabstops.length) + arg.push(arg.splice(2, 1)[0]); + this.tabstops.splice.apply(this.tabstops, arg); + } + }; + + this.addTabstopMarkers = function(ts) { + var session = this.editor.session; + ts.forEach(function(range) { + if (!range.markerId) + range.markerId = session.addMarker(range, "ace_snippet-marker", "text"); + }); + }; + this.removeTabstopMarkers = function(ts) { + var session = this.editor.session; + ts.forEach(function(range) { + session.removeMarker(range.markerId); + range.markerId = null; + }); + }; + this.removeRange = function(range) { + var i = range.tabstop.indexOf(range); + range.tabstop.splice(i, 1); + i = this.ranges.indexOf(range); + this.ranges.splice(i, 1); + this.editor.session.removeMarker(range.markerId); + if (!range.tabstop.length) { + i = this.tabstops.indexOf(range.tabstop); + if (i != -1) + this.tabstops.splice(i, 1); + if (!this.tabstops.length) + this.detach(); + } + }; + + this.keyboardHandler = new HashHandler(); + this.keyboardHandler.bindKeys({ + "Tab": function(ed) { + if (exports.snippetManager && exports.snippetManager.expandWithTab(ed)) { + return; + } + + ed.tabstopManager.tabNext(1); + }, + "Shift-Tab": function(ed) { + ed.tabstopManager.tabNext(-1); + }, + "Esc": function(ed) { + ed.tabstopManager.detach(); + }, + "Return": function(ed) { + return false; + } + }); +}).call(TabstopManager.prototype); + + + +var changeTracker = {}; +changeTracker.onChange = Anchor.prototype.onChange; +changeTracker.setPosition = function(row, column) { + this.pos.row = row; + this.pos.column = column; +}; +changeTracker.update = function(pos, delta, $insertRight) { + this.$insertRight = $insertRight; + this.pos = pos; + this.onChange(delta); +}; + +var movePoint = function(point, diff) { + if (point.row == 0) + point.column += diff.column; + point.row += diff.row; +}; + +var moveRelative = function(point, start) { + if (point.row == start.row) + point.column -= start.column; + point.row -= start.row; +}; + + +acequire("./lib/dom").importCssString("\ +.ace_snippet-marker {\ + -moz-box-sizing: border-box;\ + box-sizing: border-box;\ + background: rgba(194, 193, 208, 0.09);\ + border: 1px dotted rgba(211, 208, 235, 0.62);\ + position: absolute;\ +}"); + +exports.snippetManager = new SnippetManager(); + + +var Editor = acequire("./editor").Editor; +(function() { + this.insertSnippet = function(content, options) { + return exports.snippetManager.insertSnippet(this, content, options); + }; + this.expandSnippet = function(options) { + return exports.snippetManager.expandWithTab(this, options); + }; +}).call(Editor.prototype); + +}); + +ace.define("ace/autocomplete/popup",["require","exports","module","ace/virtual_renderer","ace/editor","ace/range","ace/lib/event","ace/lib/lang","ace/lib/dom"], function(acequire, exports, module) { +"use strict"; + +var Renderer = acequire("../virtual_renderer").VirtualRenderer; +var Editor = acequire("../editor").Editor; +var Range = acequire("../range").Range; +var event = acequire("../lib/event"); +var lang = acequire("../lib/lang"); +var dom = acequire("../lib/dom"); + +var $singleLineEditor = function(el) { + var renderer = new Renderer(el); + + renderer.$maxLines = 4; + + var editor = new Editor(renderer); + + editor.setHighlightActiveLine(false); + editor.setShowPrintMargin(false); + editor.renderer.setShowGutter(false); + editor.renderer.setHighlightGutterLine(false); + + editor.$mouseHandler.$focusWaitTimout = 0; + editor.$highlightTagPending = true; + + return editor; +}; + +var AcePopup = function(parentNode) { + var el = dom.createElement("div"); + var popup = new $singleLineEditor(el); + + if (parentNode) + parentNode.appendChild(el); + el.style.display = "none"; + popup.renderer.content.style.cursor = "default"; + popup.renderer.setStyle("ace_autocomplete"); + + popup.setOption("displayIndentGuides", false); + popup.setOption("dragDelay", 150); + + var noop = function(){}; + + popup.focus = noop; + popup.$isFocused = true; + + popup.renderer.$cursorLayer.restartTimer = noop; + popup.renderer.$cursorLayer.element.style.opacity = 0; + + popup.renderer.$maxLines = 8; + popup.renderer.$keepTextAreaAtCursor = false; + + popup.setHighlightActiveLine(false); + popup.session.highlight(""); + popup.session.$searchHighlight.clazz = "ace_highlight-marker"; + + popup.on("mousedown", function(e) { + var pos = e.getDocumentPosition(); + popup.selection.moveToPosition(pos); + selectionMarker.start.row = selectionMarker.end.row = pos.row; + e.stop(); + }); + + var lastMouseEvent; + var hoverMarker = new Range(-1,0,-1,Infinity); + var selectionMarker = new Range(-1,0,-1,Infinity); + selectionMarker.id = popup.session.addMarker(selectionMarker, "ace_active-line", "fullLine"); + popup.setSelectOnHover = function(val) { + if (!val) { + hoverMarker.id = popup.session.addMarker(hoverMarker, "ace_line-hover", "fullLine"); + } else if (hoverMarker.id) { + popup.session.removeMarker(hoverMarker.id); + hoverMarker.id = null; + } + }; + popup.setSelectOnHover(false); + popup.on("mousemove", function(e) { + if (!lastMouseEvent) { + lastMouseEvent = e; + return; + } + if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) { + return; + } + lastMouseEvent = e; + lastMouseEvent.scrollTop = popup.renderer.scrollTop; + var row = lastMouseEvent.getDocumentPosition().row; + if (hoverMarker.start.row != row) { + if (!hoverMarker.id) + popup.setRow(row); + setHoverMarker(row); + } + }); + popup.renderer.on("beforeRender", function() { + if (lastMouseEvent && hoverMarker.start.row != -1) { + lastMouseEvent.$pos = null; + var row = lastMouseEvent.getDocumentPosition().row; + if (!hoverMarker.id) + popup.setRow(row); + setHoverMarker(row, true); + } + }); + popup.renderer.on("afterRender", function() { + var row = popup.getRow(); + var t = popup.renderer.$textLayer; + var selected = t.element.childNodes[row - t.config.firstRow]; + if (selected == t.selectedNode) + return; + if (t.selectedNode) + dom.removeCssClass(t.selectedNode, "ace_selected"); + t.selectedNode = selected; + if (selected) + dom.addCssClass(selected, "ace_selected"); + }); + var hideHoverMarker = function() { setHoverMarker(-1) }; + var setHoverMarker = function(row, suppressRedraw) { + if (row !== hoverMarker.start.row) { + hoverMarker.start.row = hoverMarker.end.row = row; + if (!suppressRedraw) + popup.session._emit("changeBackMarker"); + popup._emit("changeHoverMarker"); + } + }; + popup.getHoveredRow = function() { + return hoverMarker.start.row; + }; + + event.addListener(popup.container, "mouseout", hideHoverMarker); + popup.on("hide", hideHoverMarker); + popup.on("changeSelection", hideHoverMarker); + + popup.session.doc.getLength = function() { + return popup.data.length; + }; + popup.session.doc.getLine = function(i) { + var data = popup.data[i]; + if (typeof data == "string") + return data; + return (data && data.value) || ""; + }; + + var bgTokenizer = popup.session.bgTokenizer; + bgTokenizer.$tokenizeRow = function(row) { + var data = popup.data[row]; + var tokens = []; + if (!data) + return tokens; + if (typeof data == "string") + data = {value: data}; + if (!data.caption) + data.caption = data.value || data.name; + + var last = -1; + var flag, c; + for (var i = 0; i < data.caption.length; i++) { + c = data.caption[i]; + flag = data.matchMask & (1 << i) ? 1 : 0; + if (last !== flag) { + tokens.push({type: data.className || "" + ( flag ? "completion-highlight" : ""), value: c}); + last = flag; + } else { + tokens[tokens.length - 1].value += c; + } + } + + if (data.meta) { + var maxW = popup.renderer.$size.scrollerWidth / popup.renderer.layerConfig.characterWidth; + var metaData = data.meta; + if (metaData.length + data.caption.length > maxW - 2) { + metaData = metaData.substr(0, maxW - data.caption.length - 3) + "\u2026" + } + tokens.push({type: "rightAlignedText", value: metaData}); + } + return tokens; + }; + bgTokenizer.$updateOnChange = noop; + bgTokenizer.start = noop; + + popup.session.$computeWidth = function() { + return this.screenWidth = 0; + }; + + popup.$blockScrolling = Infinity; + popup.isOpen = false; + popup.isTopdown = false; + + popup.data = []; + popup.setData = function(list) { + popup.setValue(lang.stringRepeat("\n", list.length), -1); + popup.data = list || []; + popup.setRow(0); + }; + popup.getData = function(row) { + return popup.data[row]; + }; + + popup.getRow = function() { + return selectionMarker.start.row; + }; + popup.setRow = function(line) { + line = Math.max(0, Math.min(this.data.length, line)); + if (selectionMarker.start.row != line) { + popup.selection.clearSelection(); + selectionMarker.start.row = selectionMarker.end.row = line || 0; + popup.session._emit("changeBackMarker"); + popup.moveCursorTo(line || 0, 0); + if (popup.isOpen) + popup._signal("select"); + } + }; + + popup.on("changeSelection", function() { + if (popup.isOpen) + popup.setRow(popup.selection.lead.row); + popup.renderer.scrollCursorIntoView(); + }); + + popup.hide = function() { + this.container.style.display = "none"; + this._signal("hide"); + popup.isOpen = false; + }; + popup.show = function(pos, lineHeight, topdownOnly) { + var el = this.container; + var screenHeight = window.innerHeight; + var screenWidth = window.innerWidth; + var renderer = this.renderer; + var maxH = renderer.$maxLines * lineHeight * 1.4; + var top = pos.top + this.$borderSize; + if (top + maxH > screenHeight - lineHeight && !topdownOnly) { + el.style.top = ""; + el.style.bottom = screenHeight - top + "px"; + popup.isTopdown = false; + } else { + top += lineHeight; + el.style.top = top + "px"; + el.style.bottom = ""; + popup.isTopdown = true; + } + + el.style.display = ""; + this.renderer.$textLayer.checkForSizeChanges(); + + var left = pos.left; + if (left + el.offsetWidth > screenWidth) + left = screenWidth - el.offsetWidth; + + el.style.left = left + "px"; + + this._signal("show"); + lastMouseEvent = null; + popup.isOpen = true; + }; + + popup.getTextLeftOffset = function() { + return this.$borderSize + this.renderer.$padding + this.$imageSize; + }; + + popup.$imageSize = 0; + popup.$borderSize = 1; + + return popup; +}; + +dom.importCssString("\ +.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\ + background-color: #CAD6FA;\ + z-index: 1;\ +}\ +.ace_editor.ace_autocomplete .ace_line-hover {\ + border: 1px solid #abbffe;\ + margin-top: -1px;\ + background: rgba(233,233,253,0.4);\ +}\ +.ace_editor.ace_autocomplete .ace_line-hover {\ + position: absolute;\ + z-index: 2;\ +}\ +.ace_editor.ace_autocomplete .ace_scroller {\ + background: none;\ + border: none;\ + box-shadow: none;\ +}\ +.ace_rightAlignedText {\ + color: gray;\ + display: inline-block;\ + position: absolute;\ + right: 4px;\ + text-align: right;\ + z-index: -1;\ +}\ +.ace_editor.ace_autocomplete .ace_completion-highlight{\ + color: #000;\ + text-shadow: 0 0 0.01em;\ +}\ +.ace_editor.ace_autocomplete {\ + width: 280px;\ + z-index: 200000;\ + background: #fbfbfb;\ + color: #444;\ + border: 1px lightgray solid;\ + position: fixed;\ + box-shadow: 2px 3px 5px rgba(0,0,0,.2);\ + line-height: 1.4;\ +}"); + +exports.AcePopup = AcePopup; + +}); + +ace.define("ace/autocomplete/util",["require","exports","module"], function(acequire, exports, module) { +"use strict"; + +exports.parForEach = function(array, fn, callback) { + var completed = 0; + var arLength = array.length; + if (arLength === 0) + callback(); + for (var i = 0; i < arLength; i++) { + fn(array[i], function(result, err) { + completed++; + if (completed === arLength) + callback(result, err); + }); + } +}; + +var ID_REGEX = /[a-zA-Z_0-9\$\-\u00A2-\uFFFF]/; + +exports.retrievePrecedingIdentifier = function(text, pos, regex) { + regex = regex || ID_REGEX; + var buf = []; + for (var i = pos-1; i >= 0; i--) { + if (regex.test(text[i])) + buf.push(text[i]); + else + break; + } + return buf.reverse().join(""); +}; + +exports.retrieveFollowingIdentifier = function(text, pos, regex) { + regex = regex || ID_REGEX; + var buf = []; + for (var i = pos; i < text.length; i++) { + if (regex.test(text[i])) + buf.push(text[i]); + else + break; + } + return buf; +}; + +exports.getCompletionPrefix = function (editor) { + var pos = editor.getCursorPosition(); + var line = editor.session.getLine(pos.row); + var prefix; + editor.completers.forEach(function(completer) { + if (completer.identifierRegexps) { + completer.identifierRegexps.forEach(function(identifierRegex) { + if (!prefix && identifierRegex) + prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex); + }.bind(this)); + } + }.bind(this)); + return prefix || this.retrievePrecedingIdentifier(line, pos.column); +}; + +}); + +ace.define("ace/autocomplete",["require","exports","module","ace/keyboard/hash_handler","ace/autocomplete/popup","ace/autocomplete/util","ace/lib/event","ace/lib/lang","ace/lib/dom","ace/snippets"], function(acequire, exports, module) { +"use strict"; + +var HashHandler = acequire("./keyboard/hash_handler").HashHandler; +var AcePopup = acequire("./autocomplete/popup").AcePopup; +var util = acequire("./autocomplete/util"); +var event = acequire("./lib/event"); +var lang = acequire("./lib/lang"); +var dom = acequire("./lib/dom"); +var snippetManager = acequire("./snippets").snippetManager; + +var Autocomplete = function() { + this.autoInsert = false; + this.autoSelect = true; + this.exactMatch = false; + this.gatherCompletionsId = 0; + this.keyboardHandler = new HashHandler(); + this.keyboardHandler.bindKeys(this.commands); + + this.blurListener = this.blurListener.bind(this); + this.changeListener = this.changeListener.bind(this); + this.mousedownListener = this.mousedownListener.bind(this); + this.mousewheelListener = this.mousewheelListener.bind(this); + + this.changeTimer = lang.delayedCall(function() { + this.updateCompletions(true); + }.bind(this)); + + this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50); +}; + +(function() { + + this.$init = function() { + this.popup = new AcePopup(document.body || document.documentElement); + this.popup.on("click", function(e) { + this.insertMatch(); + e.stop(); + }.bind(this)); + this.popup.focus = this.editor.focus.bind(this.editor); + this.popup.on("show", this.tooltipTimer.bind(null, null)); + this.popup.on("select", this.tooltipTimer.bind(null, null)); + this.popup.on("changeHoverMarker", this.tooltipTimer.bind(null, null)); + return this.popup; + }; + + this.getPopup = function() { + return this.popup || this.$init(); + }; + + this.openPopup = function(editor, prefix, keepPopupPosition) { + if (!this.popup) + this.$init(); + + this.popup.setData(this.completions.filtered); + + editor.keyBinding.addKeyboardHandler(this.keyboardHandler); + + var renderer = editor.renderer; + this.popup.setRow(this.autoSelect ? 0 : -1); + if (!keepPopupPosition) { + this.popup.setTheme(editor.getTheme()); + this.popup.setFontSize(editor.getFontSize()); + + var lineHeight = renderer.layerConfig.lineHeight; + + var pos = renderer.$cursorLayer.getPixelPosition(this.base, true); + pos.left -= this.popup.getTextLeftOffset(); + + var rect = editor.container.getBoundingClientRect(); + pos.top += rect.top - renderer.layerConfig.offset; + pos.left += rect.left - editor.renderer.scrollLeft; + pos.left += renderer.gutterWidth; + + this.popup.show(pos, lineHeight); + } else if (keepPopupPosition && !prefix) { + this.detach(); + } + }; + + this.detach = function() { + this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler); + this.editor.off("changeSelection", this.changeListener); + this.editor.off("blur", this.blurListener); + this.editor.off("mousedown", this.mousedownListener); + this.editor.off("mousewheel", this.mousewheelListener); + this.changeTimer.cancel(); + this.hideDocTooltip(); + + this.gatherCompletionsId += 1; + if (this.popup && this.popup.isOpen) + this.popup.hide(); + + if (this.base) + this.base.detach(); + this.activated = false; + this.completions = this.base = null; + }; + + this.changeListener = function(e) { + var cursor = this.editor.selection.lead; + if (cursor.row != this.base.row || cursor.column < this.base.column) { + this.detach(); + } + if (this.activated) + this.changeTimer.schedule(); + else + this.detach(); + }; + + this.blurListener = function(e) { + var el = document.activeElement; + var text = this.editor.textInput.getElement(); + var fromTooltip = e.relatedTarget && e.relatedTarget == this.tooltipNode; + var container = this.popup && this.popup.container; + if (el != text && el.parentNode != container && !fromTooltip + && el != this.tooltipNode && e.relatedTarget != text + ) { + this.detach(); + } + }; + + this.mousedownListener = function(e) { + this.detach(); + }; + + this.mousewheelListener = function(e) { + this.detach(); + }; + + this.goTo = function(where) { + var row = this.popup.getRow(); + var max = this.popup.session.getLength() - 1; + + switch(where) { + case "up": row = row <= 0 ? max : row - 1; break; + case "down": row = row >= max ? -1 : row + 1; break; + case "start": row = 0; break; + case "end": row = max; break; + } + + this.popup.setRow(row); + }; + + this.insertMatch = function(data, options) { + if (!data) + data = this.popup.getData(this.popup.getRow()); + if (!data) + return false; + + if (data.completer && data.completer.insertMatch) { + data.completer.insertMatch(this.editor, data); + } else { + if (this.completions.filterText) { + var ranges = this.editor.selection.getAllRanges(); + for (var i = 0, range; range = ranges[i]; i++) { + range.start.column -= this.completions.filterText.length; + this.editor.session.remove(range); + } + } + if (data.snippet) + snippetManager.insertSnippet(this.editor, data.snippet); + else + this.editor.execCommand("insertstring", data.value || data); + } + this.detach(); + }; + + + this.commands = { + "Up": function(editor) { editor.completer.goTo("up"); }, + "Down": function(editor) { editor.completer.goTo("down"); }, + "Ctrl-Up|Ctrl-Home": function(editor) { editor.completer.goTo("start"); }, + "Ctrl-Down|Ctrl-End": function(editor) { editor.completer.goTo("end"); }, + + "Esc": function(editor) { editor.completer.detach(); }, + "Return": function(editor) { return editor.completer.insertMatch(); }, + "Shift-Return": function(editor) { editor.completer.insertMatch(null, {deleteSuffix: true}); }, + "Tab": function(editor) { + var result = editor.completer.insertMatch(); + if (!result && !editor.tabstopManager) + editor.completer.goTo("down"); + else + return result; + }, + + "PageUp": function(editor) { editor.completer.popup.gotoPageUp(); }, + "PageDown": function(editor) { editor.completer.popup.gotoPageDown(); } + }; + + this.gatherCompletions = function(editor, callback) { + var session = editor.getSession(); + var pos = editor.getCursorPosition(); + + var line = session.getLine(pos.row); + var prefix = util.getCompletionPrefix(editor); + + this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length); + this.base.$insertRight = true; + + var matches = []; + var total = editor.completers.length; + editor.completers.forEach(function(completer, i) { + completer.getCompletions(editor, session, pos, prefix, function(err, results) { + if (!err && results) + matches = matches.concat(results); + var pos = editor.getCursorPosition(); + var line = session.getLine(pos.row); + callback(null, { + prefix: prefix, + matches: matches, + finished: (--total === 0) + }); + }); + }); + return true; + }; + + this.showPopup = function(editor) { + if (this.editor) + this.detach(); + + this.activated = true; + + this.editor = editor; + if (editor.completer != this) { + if (editor.completer) + editor.completer.detach(); + editor.completer = this; + } + + editor.on("changeSelection", this.changeListener); + editor.on("blur", this.blurListener); + editor.on("mousedown", this.mousedownListener); + editor.on("mousewheel", this.mousewheelListener); + + this.updateCompletions(); + }; + + this.updateCompletions = function(keepPopupPosition) { + if (keepPopupPosition && this.base && this.completions) { + var pos = this.editor.getCursorPosition(); + var prefix = this.editor.session.getTextRange({start: this.base, end: pos}); + if (prefix == this.completions.filterText) + return; + this.completions.setFilter(prefix); + if (!this.completions.filtered.length) + return this.detach(); + if (this.completions.filtered.length == 1 + && this.completions.filtered[0].value == prefix + && !this.completions.filtered[0].snippet) + return this.detach(); + this.openPopup(this.editor, prefix, keepPopupPosition); + return; + } + var _id = this.gatherCompletionsId; + this.gatherCompletions(this.editor, function(err, results) { + var detachIfFinished = function() { + if (!results.finished) return; + return this.detach(); + }.bind(this); + + var prefix = results.prefix; + var matches = results && results.matches; + + if (!matches || !matches.length) + return detachIfFinished(); + if (prefix.indexOf(results.prefix) !== 0 || _id != this.gatherCompletionsId) + return; + + this.completions = new FilteredList(matches); + + if (this.exactMatch) + this.completions.exactMatch = true; + + this.completions.setFilter(prefix); + var filtered = this.completions.filtered; + if (!filtered.length) + return detachIfFinished(); + if (filtered.length == 1 && filtered[0].value == prefix && !filtered[0].snippet) + return detachIfFinished(); + if (this.autoInsert && filtered.length == 1 && results.finished) + return this.insertMatch(filtered[0]); + + this.openPopup(this.editor, prefix, keepPopupPosition); + }.bind(this)); + }; + + this.cancelContextMenu = function() { + this.editor.$mouseHandler.cancelContextMenu(); + }; + + this.updateDocTooltip = function() { + var popup = this.popup; + var all = popup.data; + var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]); + var doc = null; + if (!selected || !this.editor || !this.popup.isOpen) + return this.hideDocTooltip(); + this.editor.completers.some(function(completer) { + if (completer.getDocTooltip) + doc = completer.getDocTooltip(selected); + return doc; + }); + if (!doc) + doc = selected; + + if (typeof doc == "string") + doc = {docText: doc}; + if (!doc || !(doc.docHTML || doc.docText)) + return this.hideDocTooltip(); + this.showDocTooltip(doc); + }; + + this.showDocTooltip = function(item) { + if (!this.tooltipNode) { + this.tooltipNode = dom.createElement("div"); + this.tooltipNode.className = "ace_tooltip ace_doc-tooltip"; + this.tooltipNode.style.margin = 0; + this.tooltipNode.style.pointerEvents = "auto"; + this.tooltipNode.tabIndex = -1; + this.tooltipNode.onblur = this.blurListener.bind(this); + } + + var tooltipNode = this.tooltipNode; + if (item.docHTML) { + tooltipNode.innerHTML = item.docHTML; + } else if (item.docText) { + tooltipNode.textContent = item.docText; + } + + if (!tooltipNode.parentNode) + document.body.appendChild(tooltipNode); + var popup = this.popup; + var rect = popup.container.getBoundingClientRect(); + tooltipNode.style.top = popup.container.style.top; + tooltipNode.style.bottom = popup.container.style.bottom; + + if (window.innerWidth - rect.right < 320) { + tooltipNode.style.right = window.innerWidth - rect.left + "px"; + tooltipNode.style.left = ""; + } else { + tooltipNode.style.left = (rect.right + 1) + "px"; + tooltipNode.style.right = ""; + } + tooltipNode.style.display = "block"; + }; + + this.hideDocTooltip = function() { + this.tooltipTimer.cancel(); + if (!this.tooltipNode) return; + var el = this.tooltipNode; + if (!this.editor.isFocused() && document.activeElement == el) + this.editor.focus(); + this.tooltipNode = null; + if (el.parentNode) + el.parentNode.removeChild(el); + }; + +}).call(Autocomplete.prototype); + +Autocomplete.startCommand = { + name: "startAutocomplete", + exec: function(editor) { + if (!editor.completer) + editor.completer = new Autocomplete(); + editor.completer.autoInsert = false; + editor.completer.autoSelect = true; + editor.completer.showPopup(editor); + editor.completer.cancelContextMenu(); + }, + bindKey: "Ctrl-Space|Ctrl-Shift-Space|Alt-Space" +}; + +var FilteredList = function(array, filterText) { + this.all = array; + this.filtered = array; + this.filterText = filterText || ""; + this.exactMatch = false; +}; +(function(){ + this.setFilter = function(str) { + if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0) + var matches = this.filtered; + else + var matches = this.all; + + this.filterText = str; + matches = this.filterCompletions(matches, this.filterText); + matches = matches.sort(function(a, b) { + return b.exactMatch - a.exactMatch || b.score - a.score; + }); + var prev = null; + matches = matches.filter(function(item){ + var caption = item.snippet || item.caption || item.value; + if (caption === prev) return false; + prev = caption; + return true; + }); + + this.filtered = matches; + }; + this.filterCompletions = function(items, needle) { + var results = []; + var upper = needle.toUpperCase(); + var lower = needle.toLowerCase(); + loop: for (var i = 0, item; item = items[i]; i++) { + var caption = item.value || item.caption || item.snippet; + if (!caption) continue; + var lastIndex = -1; + var matchMask = 0; + var penalty = 0; + var index, distance; + + if (this.exactMatch) { + if (needle !== caption.substr(0, needle.length)) + continue loop; + }else{ + for (var j = 0; j < needle.length; j++) { + var i1 = caption.indexOf(lower[j], lastIndex + 1); + var i2 = caption.indexOf(upper[j], lastIndex + 1); + index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2; + if (index < 0) + continue loop; + distance = index - lastIndex - 1; + if (distance > 0) { + if (lastIndex === -1) + penalty += 10; + penalty += distance; + } + matchMask = matchMask | (1 << index); + lastIndex = index; + } + } + item.matchMask = matchMask; + item.exactMatch = penalty ? 0 : 1; + item.score = (item.score || 0) - penalty; + results.push(item); + } + return results; + }; +}).call(FilteredList.prototype); + +exports.Autocomplete = Autocomplete; +exports.FilteredList = FilteredList; + +}); + +ace.define("ace/autocomplete/text_completer",["require","exports","module","ace/range"], function(acequire, exports, module) { + var Range = acequire("../range").Range; + + var splitRegex = /[^a-zA-Z_0-9\$\-\u00C0-\u1FFF\u2C00-\uD7FF\w]+/; + + function getWordIndex(doc, pos) { + var textBefore = doc.getTextRange(Range.fromPoints({row: 0, column:0}, pos)); + return textBefore.split(splitRegex).length - 1; + } + function wordDistance(doc, pos) { + var prefixPos = getWordIndex(doc, pos); + var words = doc.getValue().split(splitRegex); + var wordScores = Object.create(null); + + var currentWord = words[prefixPos]; + + words.forEach(function(word, idx) { + if (!word || word === currentWord) return; + + var distance = Math.abs(prefixPos - idx); + var score = words.length - distance; + if (wordScores[word]) { + wordScores[word] = Math.max(score, wordScores[word]); + } else { + wordScores[word] = score; + } + }); + return wordScores; + } + + exports.getCompletions = function(editor, session, pos, prefix, callback) { + var wordScore = wordDistance(session, pos, prefix); + var wordList = Object.keys(wordScore); + callback(null, wordList.map(function(word) { + return { + caption: word, + value: word, + score: wordScore[word], + meta: "local" + }; + })); + }; +}); + +ace.define("ace/ext/language_tools",["require","exports","module","ace/snippets","ace/autocomplete","ace/config","ace/lib/lang","ace/autocomplete/util","ace/autocomplete/text_completer","ace/editor","ace/config"], function(acequire, exports, module) { +"use strict"; + +var snippetManager = acequire("../snippets").snippetManager; +var Autocomplete = acequire("../autocomplete").Autocomplete; +var config = acequire("../config"); +var lang = acequire("../lib/lang"); +var util = acequire("../autocomplete/util"); + +var textCompleter = acequire("../autocomplete/text_completer"); +var keyWordCompleter = { + getCompletions: function(editor, session, pos, prefix, callback) { + if (session.$mode.completer) { + return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback); + } + var state = editor.session.getState(pos.row); + var completions = session.$mode.getCompletions(state, session, pos, prefix); + callback(null, completions); + } +}; + +var snippetCompleter = { + getCompletions: function(editor, session, pos, prefix, callback) { + var snippetMap = snippetManager.snippetMap; + var completions = []; + snippetManager.getActiveScopes(editor).forEach(function(scope) { + var snippets = snippetMap[scope] || []; + for (var i = snippets.length; i--;) { + var s = snippets[i]; + var caption = s.name || s.tabTrigger; + if (!caption) + continue; + completions.push({ + caption: caption, + snippet: s.content, + meta: s.tabTrigger && !s.name ? s.tabTrigger + "\u21E5 " : "snippet", + type: "snippet" + }); + } + }, this); + callback(null, completions); + }, + getDocTooltip: function(item) { + if (item.type == "snippet" && !item.docHTML) { + item.docHTML = [ + "", lang.escapeHTML(item.caption), "", "


", + lang.escapeHTML(item.snippet) + ].join(""); + } + } +}; + +var completers = [snippetCompleter, textCompleter, keyWordCompleter]; +exports.setCompleters = function(val) { + completers.length = 0; + if (val) completers.push.apply(completers, val); +}; +exports.addCompleter = function(completer) { + completers.push(completer); +}; +exports.textCompleter = textCompleter; +exports.keyWordCompleter = keyWordCompleter; +exports.snippetCompleter = snippetCompleter; + +var expandSnippet = { + name: "expandSnippet", + exec: function(editor) { + return snippetManager.expandWithTab(editor); + }, + bindKey: "Tab" +}; + +var onChangeMode = function(e, editor) { + loadSnippetsForMode(editor.session.$mode); +}; + +var loadSnippetsForMode = function(mode) { + var id = mode.$id; + if (!snippetManager.files) + snippetManager.files = {}; + loadSnippetFile(id); + if (mode.modes) + mode.modes.forEach(loadSnippetsForMode); +}; + +var loadSnippetFile = function(id) { + if (!id || snippetManager.files[id]) + return; + var snippetFilePath = id.replace("mode", "snippets"); + snippetManager.files[id] = {}; + config.loadModule(snippetFilePath, function(m) { + if (m) { + snippetManager.files[id] = m; + if (!m.snippets && m.snippetText) + m.snippets = snippetManager.parseSnippetFile(m.snippetText); + snippetManager.register(m.snippets || [], m.scope); + if (m.includeScopes) { + snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes; + m.includeScopes.forEach(function(x) { + loadSnippetFile("ace/mode/" + x); + }); + } + } + }); +}; + +var doLiveAutocomplete = function(e) { + var editor = e.editor; + var hasCompleter = editor.completer && editor.completer.activated; + if (e.command.name === "backspace") { + if (hasCompleter && !util.getCompletionPrefix(editor)) + editor.completer.detach(); + } + else if (e.command.name === "insertstring") { + var prefix = util.getCompletionPrefix(editor); + if (prefix && !hasCompleter) { + if (!editor.completer) { + editor.completer = new Autocomplete(); + } + editor.completer.autoInsert = false; + editor.completer.showPopup(editor); + } + } +}; + +var Editor = acequire("../editor").Editor; +acequire("../config").defineOptions(Editor.prototype, "editor", { + enableBasicAutocompletion: { + set: function(val) { + if (val) { + if (!this.completers) + this.completers = Array.isArray(val)? val: completers; + this.commands.addCommand(Autocomplete.startCommand); + } else { + this.commands.removeCommand(Autocomplete.startCommand); + } + }, + value: false + }, + enableLiveAutocompletion: { + set: function(val) { + if (val) { + if (!this.completers) + this.completers = Array.isArray(val)? val: completers; + this.commands.on('afterExec', doLiveAutocomplete); + } else { + this.commands.removeListener('afterExec', doLiveAutocomplete); + } + }, + value: false + }, + enableSnippets: { + set: function(val) { + if (val) { + this.commands.addCommand(expandSnippet); + this.on("changeMode", onChangeMode); + onChangeMode(null, this); + } else { + this.commands.removeCommand(expandSnippet); + this.off("changeMode", onChangeMode); + } + }, + value: false + } +}); +}); + (function() { + ace.acequire(["ace/ext/language_tools"], function() {}); + })(); + +},{}],68:[function(require,module,exports){ +ace.define("ace/ext/searchbox",["require","exports","module","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/keyboard/hash_handler","ace/lib/keys"], function(acequire, exports, module) { +"use strict"; + +var dom = acequire("../lib/dom"); +var lang = acequire("../lib/lang"); +var event = acequire("../lib/event"); +var searchboxCss = "\ +.ace_search {\ +background-color: #ddd;\ +border: 1px solid #cbcbcb;\ +border-top: 0 none;\ +max-width: 325px;\ +overflow: hidden;\ +margin: 0;\ +padding: 4px;\ +padding-right: 6px;\ +padding-bottom: 0;\ +position: absolute;\ +top: 0px;\ +z-index: 99;\ +white-space: normal;\ +}\ +.ace_search.left {\ +border-left: 0 none;\ +border-radius: 0px 0px 5px 0px;\ +left: 0;\ +}\ +.ace_search.right {\ +border-radius: 0px 0px 0px 5px;\ +border-right: 0 none;\ +right: 0;\ +}\ +.ace_search_form, .ace_replace_form {\ +border-radius: 3px;\ +border: 1px solid #cbcbcb;\ +float: left;\ +margin-bottom: 4px;\ +overflow: hidden;\ +}\ +.ace_search_form.ace_nomatch {\ +outline: 1px solid red;\ +}\ +.ace_search_field {\ +background-color: white;\ +border-right: 1px solid #cbcbcb;\ +border: 0 none;\ +-webkit-box-sizing: border-box;\ +-moz-box-sizing: border-box;\ +box-sizing: border-box;\ +float: left;\ +height: 22px;\ +outline: 0;\ +padding: 0 7px;\ +width: 214px;\ +margin: 0;\ +}\ +.ace_searchbtn,\ +.ace_replacebtn {\ +background: #fff;\ +border: 0 none;\ +border-left: 1px solid #dcdcdc;\ +cursor: pointer;\ +float: left;\ +height: 22px;\ +margin: 0;\ +position: relative;\ +}\ +.ace_searchbtn:last-child,\ +.ace_replacebtn:last-child {\ +border-top-right-radius: 3px;\ +border-bottom-right-radius: 3px;\ +}\ +.ace_searchbtn:disabled {\ +background: none;\ +cursor: default;\ +}\ +.ace_searchbtn {\ +background-position: 50% 50%;\ +background-repeat: no-repeat;\ +width: 27px;\ +}\ +.ace_searchbtn.prev {\ +background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiSU1NZUAC/6E0I0yACYskCpsJiySKIiY0SUZk40FyTEgCjGgKwTRAgAEAQJUIPCE+qfkAAAAASUVORK5CYII=); \ +}\ +.ace_searchbtn.next {\ +background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiTE1NZQCC/0DMyIAKwGJMUAYDEo3M/s+EpvM/mkKwCQxYjIeLMaELoLMBAgwAU7UJObTKsvAAAAAASUVORK5CYII=); \ +}\ +.ace_searchbtn_close {\ +background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\ +border-radius: 50%;\ +border: 0 none;\ +color: #656565;\ +cursor: pointer;\ +float: right;\ +font: 16px/16px Arial;\ +height: 14px;\ +margin: 5px 1px 9px 5px;\ +padding: 0;\ +text-align: center;\ +width: 14px;\ +}\ +.ace_searchbtn_close:hover {\ +background-color: #656565;\ +background-position: 50% 100%;\ +color: white;\ +}\ +.ace_replacebtn.prev {\ +width: 54px\ +}\ +.ace_replacebtn.next {\ +width: 27px\ +}\ +.ace_button {\ +margin-left: 2px;\ +cursor: pointer;\ +-webkit-user-select: none;\ +-moz-user-select: none;\ +-o-user-select: none;\ +-ms-user-select: none;\ +user-select: none;\ +overflow: hidden;\ +opacity: 0.7;\ +border: 1px solid rgba(100,100,100,0.23);\ +padding: 1px;\ +-moz-box-sizing: border-box;\ +box-sizing: border-box;\ +color: black;\ +}\ +.ace_button:hover {\ +background-color: #eee;\ +opacity:1;\ +}\ +.ace_button:active {\ +background-color: #ddd;\ +}\ +.ace_button.checked {\ +border-color: #3399ff;\ +opacity:1;\ +}\ +.ace_search_options{\ +margin-bottom: 3px;\ +text-align: right;\ +-webkit-user-select: none;\ +-moz-user-select: none;\ +-o-user-select: none;\ +-ms-user-select: none;\ +user-select: none;\ +}"; +var HashHandler = acequire("../keyboard/hash_handler").HashHandler; +var keyUtil = acequire("../lib/keys"); + +dom.importCssString(searchboxCss, "ace_searchbox"); + +var html = ''.replace(/>\s+/g, ">"); + +var SearchBox = function(editor, range, showReplaceForm) { + var div = dom.createElement("div"); + div.innerHTML = html; + this.element = div.firstChild; + + this.$init(); + this.setEditor(editor); +}; + +(function() { + this.setEditor = function(editor) { + editor.searchBox = this; + editor.container.appendChild(this.element); + this.editor = editor; + }; + + this.$initElements = function(sb) { + this.searchBox = sb.querySelector(".ace_search_form"); + this.replaceBox = sb.querySelector(".ace_replace_form"); + this.searchOptions = sb.querySelector(".ace_search_options"); + this.regExpOption = sb.querySelector("[action=toggleRegexpMode]"); + this.caseSensitiveOption = sb.querySelector("[action=toggleCaseSensitive]"); + this.wholeWordOption = sb.querySelector("[action=toggleWholeWords]"); + this.searchInput = this.searchBox.querySelector(".ace_search_field"); + this.replaceInput = this.replaceBox.querySelector(".ace_search_field"); + }; + + this.$init = function() { + var sb = this.element; + + this.$initElements(sb); + + var _this = this; + event.addListener(sb, "mousedown", function(e) { + setTimeout(function(){ + _this.activeInput.focus(); + }, 0); + event.stopPropagation(e); + }); + event.addListener(sb, "click", function(e) { + var t = e.target || e.srcElement; + var action = t.getAttribute("action"); + if (action && _this[action]) + _this[action](); + else if (_this.$searchBarKb.commands[action]) + _this.$searchBarKb.commands[action].exec(_this); + event.stopPropagation(e); + }); + + event.addCommandKeyListener(sb, function(e, hashId, keyCode) { + var keyString = keyUtil.keyCodeToString(keyCode); + var command = _this.$searchBarKb.findKeyCommand(hashId, keyString); + if (command && command.exec) { + command.exec(_this); + event.stopEvent(e); + } + }); + + this.$onChange = lang.delayedCall(function() { + _this.find(false, false); + }); + + event.addListener(this.searchInput, "input", function() { + _this.$onChange.schedule(20); + }); + event.addListener(this.searchInput, "focus", function() { + _this.activeInput = _this.searchInput; + _this.searchInput.value && _this.highlight(); + }); + event.addListener(this.replaceInput, "focus", function() { + _this.activeInput = _this.replaceInput; + _this.searchInput.value && _this.highlight(); + }); + }; + this.$closeSearchBarKb = new HashHandler([{ + bindKey: "Esc", + name: "closeSearchBar", + exec: function(editor) { + editor.searchBox.hide(); + } + }]); + this.$searchBarKb = new HashHandler(); + this.$searchBarKb.bindKeys({ + "Ctrl-f|Command-f": function(sb) { + var isReplace = sb.isReplace = !sb.isReplace; + sb.replaceBox.style.display = isReplace ? "" : "none"; + sb.searchInput.focus(); + }, + "Ctrl-H|Command-Option-F": function(sb) { + sb.replaceBox.style.display = ""; + sb.replaceInput.focus(); + }, + "Ctrl-G|Command-G": function(sb) { + sb.findNext(); + }, + "Ctrl-Shift-G|Command-Shift-G": function(sb) { + sb.findPrev(); + }, + "esc": function(sb) { + setTimeout(function() { sb.hide();}); + }, + "Return": function(sb) { + if (sb.activeInput == sb.replaceInput) + sb.replace(); + sb.findNext(); + }, + "Shift-Return": function(sb) { + if (sb.activeInput == sb.replaceInput) + sb.replace(); + sb.findPrev(); + }, + "Alt-Return": function(sb) { + if (sb.activeInput == sb.replaceInput) + sb.replaceAll(); + sb.findAll(); + }, + "Tab": function(sb) { + (sb.activeInput == sb.replaceInput ? sb.searchInput : sb.replaceInput).focus(); + } + }); + + this.$searchBarKb.addCommands([{ + name: "toggleRegexpMode", + bindKey: {win: "Alt-R|Alt-/", mac: "Ctrl-Alt-R|Ctrl-Alt-/"}, + exec: function(sb) { + sb.regExpOption.checked = !sb.regExpOption.checked; + sb.$syncOptions(); + } + }, { + name: "toggleCaseSensitive", + bindKey: {win: "Alt-C|Alt-I", mac: "Ctrl-Alt-R|Ctrl-Alt-I"}, + exec: function(sb) { + sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked; + sb.$syncOptions(); + } + }, { + name: "toggleWholeWords", + bindKey: {win: "Alt-B|Alt-W", mac: "Ctrl-Alt-B|Ctrl-Alt-W"}, + exec: function(sb) { + sb.wholeWordOption.checked = !sb.wholeWordOption.checked; + sb.$syncOptions(); + } + }]); + + this.$syncOptions = function() { + dom.setCssClass(this.regExpOption, "checked", this.regExpOption.checked); + dom.setCssClass(this.wholeWordOption, "checked", this.wholeWordOption.checked); + dom.setCssClass(this.caseSensitiveOption, "checked", this.caseSensitiveOption.checked); + this.find(false, false); + }; + + this.highlight = function(re) { + this.editor.session.highlight(re || this.editor.$search.$options.re); + this.editor.renderer.updateBackMarkers() + }; + this.find = function(skipCurrent, backwards, preventScroll) { + var range = this.editor.find(this.searchInput.value, { + skipCurrent: skipCurrent, + backwards: backwards, + wrap: true, + regExp: this.regExpOption.checked, + caseSensitive: this.caseSensitiveOption.checked, + wholeWord: this.wholeWordOption.checked, + preventScroll: preventScroll + }); + var noMatch = !range && this.searchInput.value; + dom.setCssClass(this.searchBox, "ace_nomatch", noMatch); + this.editor._emit("findSearchBox", { match: !noMatch }); + this.highlight(); + }; + this.findNext = function() { + this.find(true, false); + }; + this.findPrev = function() { + this.find(true, true); + }; + this.findAll = function(){ + var range = this.editor.findAll(this.searchInput.value, { + regExp: this.regExpOption.checked, + caseSensitive: this.caseSensitiveOption.checked, + wholeWord: this.wholeWordOption.checked + }); + var noMatch = !range && this.searchInput.value; + dom.setCssClass(this.searchBox, "ace_nomatch", noMatch); + this.editor._emit("findSearchBox", { match: !noMatch }); + this.highlight(); + this.hide(); + }; + this.replace = function() { + if (!this.editor.getReadOnly()) + this.editor.replace(this.replaceInput.value); + }; + this.replaceAndFindNext = function() { + if (!this.editor.getReadOnly()) { + this.editor.replace(this.replaceInput.value); + this.findNext() + } + }; + this.replaceAll = function() { + if (!this.editor.getReadOnly()) + this.editor.replaceAll(this.replaceInput.value); + }; + + this.hide = function() { + this.element.style.display = "none"; + this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb); + this.editor.focus(); + }; + this.show = function(value, isReplace) { + this.element.style.display = ""; + this.replaceBox.style.display = isReplace ? "" : "none"; + + this.isReplace = isReplace; + + if (value) + this.searchInput.value = value; + + this.find(false, false, true); + + this.searchInput.focus(); + this.searchInput.select(); + + this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb); + }; + + this.isFocused = function() { + var el = document.activeElement; + return el == this.searchInput || el == this.replaceInput; + } +}).call(SearchBox.prototype); + +exports.SearchBox = SearchBox; + +exports.Search = function(editor, isReplace) { + var sb = editor.searchBox || new SearchBox(editor); + sb.show(editor.session.getTextRange(), isReplace); +}; + +}); + (function() { + ace.acequire(["ace/ext/searchbox"], function() {}); + })(); + +},{}],69:[function(require,module,exports){ +/* ***** BEGIN LICENSE BLOCK ***** + * Distributed under the BSD license: + * + * Copyright (c) 2010, Ajax.org B.V. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Ajax.org B.V. nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ***** END LICENSE BLOCK ***** */ + +/** + * Define a module along with a payload + * @param module a name for the payload + * @param payload a function to call with (acequire, exports, module) params + */ + +(function() { + +var ACE_NAMESPACE = "ace"; + +var global = (function() { return this; })(); +if (!global && typeof window != "undefined") global = window; // strict mode + + +if (!ACE_NAMESPACE && typeof acequirejs !== "undefined") + return; + + +var define = function(module, deps, payload) { + if (typeof module !== "string") { + if (define.original) + define.original.apply(this, arguments); + else { + console.error("dropping module because define wasn\'t a string."); + console.trace(); + } + return; + } + if (arguments.length == 2) + payload = deps; + if (!define.modules[module]) { + define.payloads[module] = payload; + define.modules[module] = null; + } +}; + +define.modules = {}; +define.payloads = {}; + +/** + * Get at functionality define()ed using the function above + */ +var _acequire = function(parentId, module, callback) { + if (typeof module === "string") { + var payload = lookup(parentId, module); + if (payload != undefined) { + callback && callback(); + return payload; + } + } else if (Object.prototype.toString.call(module) === "[object Array]") { + var params = []; + for (var i = 0, l = module.length; i < l; ++i) { + var dep = lookup(parentId, module[i]); + if (dep == undefined && acequire.original) + return; + params.push(dep); + } + return callback && callback.apply(null, params) || true; + } +}; + +var acequire = function(module, callback) { + var packagedModule = _acequire("", module, callback); + if (packagedModule == undefined && acequire.original) + return acequire.original.apply(this, arguments); + return packagedModule; +}; + +var normalizeModule = function(parentId, moduleName) { + // normalize plugin acequires + if (moduleName.indexOf("!") !== -1) { + var chunks = moduleName.split("!"); + return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]); + } + // normalize relative acequires + if (moduleName.charAt(0) == ".") { + var base = parentId.split("/").slice(0, -1).join("/"); + moduleName = base + "/" + moduleName; + + while(moduleName.indexOf(".") !== -1 && previous != moduleName) { + var previous = moduleName; + moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, ""); + } + } + return moduleName; +}; + +/** + * Internal function to lookup moduleNames and resolve them by calling the + * definition function if needed. + */ +var lookup = function(parentId, moduleName) { + moduleName = normalizeModule(parentId, moduleName); + + var module = define.modules[moduleName]; + if (!module) { + module = define.payloads[moduleName]; + if (typeof module === 'function') { + var exports = {}; + var mod = { + id: moduleName, + uri: '', + exports: exports, + packaged: true + }; + + var req = function(module, callback) { + return _acequire(moduleName, module, callback); + }; + + var returnValue = module(req, exports, mod); + exports = returnValue || mod.exports; + define.modules[moduleName] = exports; + delete define.payloads[moduleName]; + } + module = define.modules[moduleName] = exports || module; + } + return module; +}; + +function exportAce(ns) { + var root = global; + if (ns) { + if (!global[ns]) + global[ns] = {}; + root = global[ns]; + } + + if (!root.define || !root.define.packaged) { + define.original = root.define; + root.define = define; + root.define.packaged = true; + } + + if (!root.acequire || !root.acequire.packaged) { + acequire.original = root.acequire; + root.acequire = acequire; + root.acequire.packaged = true; + } +} + +exportAce(ACE_NAMESPACE); + +})(); + +ace.define("ace/lib/regexp",["require","exports","module"], function(acequire, exports, module) { +"use strict"; + + var real = { + exec: RegExp.prototype.exec, + test: RegExp.prototype.test, + match: String.prototype.match, + replace: String.prototype.replace, + split: String.prototype.split + }, + compliantExecNpcg = real.exec.call(/()??/, "")[1] === undefined, // check `exec` handling of nonparticipating capturing groups + compliantLastIndexIncrement = function () { + var x = /^/g; + real.test.call(x, ""); + return !x.lastIndex; + }(); + + if (compliantLastIndexIncrement && compliantExecNpcg) + return; + RegExp.prototype.exec = function (str) { + var match = real.exec.apply(this, arguments), + name, r2; + if ( typeof(str) == 'string' && match) { + if (!compliantExecNpcg && match.length > 1 && indexOf(match, "") > -1) { + r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), "g", "")); + real.replace.call(str.slice(match.index), r2, function () { + for (var i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === undefined) + match[i] = undefined; + } + }); + } + if (this._xregexp && this._xregexp.captureNames) { + for (var i = 1; i < match.length; i++) { + name = this._xregexp.captureNames[i - 1]; + if (name) + match[name] = match[i]; + } + } + if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index)) + this.lastIndex--; + } + return match; + }; + if (!compliantLastIndexIncrement) { + RegExp.prototype.test = function (str) { + var match = real.exec.call(this, str); + if (match && this.global && !match[0].length && (this.lastIndex > match.index)) + this.lastIndex--; + return !!match; + }; + } + + function getNativeFlags (regex) { + return (regex.global ? "g" : "") + + (regex.ignoreCase ? "i" : "") + + (regex.multiline ? "m" : "") + + (regex.extended ? "x" : "") + // Proposed for ES4; included in AS3 + (regex.sticky ? "y" : ""); + } + + function indexOf (array, item, from) { + if (Array.prototype.indexOf) // Use the native array method if available + return array.indexOf(item, from); + for (var i = from || 0; i < array.length; i++) { + if (array[i] === item) + return i; + } + return -1; + } + +}); + +ace.define("ace/lib/es5-shim",["require","exports","module"], function(acequire, exports, module) { + +function Empty() {} + +if (!Function.prototype.bind) { + Function.prototype.bind = function bind(that) { // .length is 1 + var target = this; + if (typeof target != "function") { + throw new TypeError("Function.prototype.bind called on incompatible " + target); + } + var args = slice.call(arguments, 1); // for normal call + var bound = function () { + + if (this instanceof bound) { + + var result = target.apply( + this, + args.concat(slice.call(arguments)) + ); + if (Object(result) === result) { + return result; + } + return this; + + } else { + return target.apply( + that, + args.concat(slice.call(arguments)) + ); + + } + + }; + if(target.prototype) { + Empty.prototype = target.prototype; + bound.prototype = new Empty(); + Empty.prototype = null; + } + return bound; + }; +} +var call = Function.prototype.call; +var prototypeOfArray = Array.prototype; +var prototypeOfObject = Object.prototype; +var slice = prototypeOfArray.slice; +var _toString = call.bind(prototypeOfObject.toString); +var owns = call.bind(prototypeOfObject.hasOwnProperty); +var defineGetter; +var defineSetter; +var lookupGetter; +var lookupSetter; +var supportsAccessors; +if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) { + defineGetter = call.bind(prototypeOfObject.__defineGetter__); + defineSetter = call.bind(prototypeOfObject.__defineSetter__); + lookupGetter = call.bind(prototypeOfObject.__lookupGetter__); + lookupSetter = call.bind(prototypeOfObject.__lookupSetter__); +} +if ([1,2].splice(0).length != 2) { + if(function() { // test IE < 9 to splice bug - see issue #138 + function makeArray(l) { + var a = new Array(l+2); + a[0] = a[1] = 0; + return a; + } + var array = [], lengthBefore; + + array.splice.apply(array, makeArray(20)); + array.splice.apply(array, makeArray(26)); + + lengthBefore = array.length; //46 + array.splice(5, 0, "XXX"); // add one element + + lengthBefore + 1 == array.length + + if (lengthBefore + 1 == array.length) { + return true;// has right splice implementation without bugs + } + }()) {//IE 6/7 + var array_splice = Array.prototype.splice; + Array.prototype.splice = function(start, deleteCount) { + if (!arguments.length) { + return []; + } else { + return array_splice.apply(this, [ + start === void 0 ? 0 : start, + deleteCount === void 0 ? (this.length - start) : deleteCount + ].concat(slice.call(arguments, 2))) + } + }; + } else {//IE8 + Array.prototype.splice = function(pos, removeCount){ + var length = this.length; + if (pos > 0) { + if (pos > length) + pos = length; + } else if (pos == void 0) { + pos = 0; + } else if (pos < 0) { + pos = Math.max(length + pos, 0); + } + + if (!(pos+removeCount < length)) + removeCount = length - pos; + + var removed = this.slice(pos, pos+removeCount); + var insert = slice.call(arguments, 2); + var add = insert.length; + if (pos === length) { + if (add) { + this.push.apply(this, insert); + } + } else { + var remove = Math.min(removeCount, length - pos); + var tailOldPos = pos + remove; + var tailNewPos = tailOldPos + add - remove; + var tailCount = length - tailOldPos; + var lengthAfterRemove = length - remove; + + if (tailNewPos < tailOldPos) { // case A + for (var i = 0; i < tailCount; ++i) { + this[tailNewPos+i] = this[tailOldPos+i]; + } + } else if (tailNewPos > tailOldPos) { // case B + for (i = tailCount; i--; ) { + this[tailNewPos+i] = this[tailOldPos+i]; + } + } // else, add == remove (nothing to do) + + if (add && pos === lengthAfterRemove) { + this.length = lengthAfterRemove; // truncate array + this.push.apply(this, insert); + } else { + this.length = lengthAfterRemove + add; // reserves space + for (i = 0; i < add; ++i) { + this[pos+i] = insert[i]; + } + } + } + return removed; + }; + } +} +if (!Array.isArray) { + Array.isArray = function isArray(obj) { + return _toString(obj) == "[object Array]"; + }; +} +var boxedString = Object("a"), + splitString = boxedString[0] != "a" || !(0 in boxedString); + +if (!Array.prototype.forEach) { + Array.prototype.forEach = function forEach(fun /*, thisp*/) { + var object = toObject(this), + self = splitString && _toString(this) == "[object String]" ? + this.split("") : + object, + thisp = arguments[1], + i = -1, + length = self.length >>> 0; + if (_toString(fun) != "[object Function]") { + throw new TypeError(); // TODO message + } + + while (++i < length) { + if (i in self) { + fun.call(thisp, self[i], i, object); + } + } + }; +} +if (!Array.prototype.map) { + Array.prototype.map = function map(fun /*, thisp*/) { + var object = toObject(this), + self = splitString && _toString(this) == "[object String]" ? + this.split("") : + object, + length = self.length >>> 0, + result = Array(length), + thisp = arguments[1]; + if (_toString(fun) != "[object Function]") { + throw new TypeError(fun + " is not a function"); + } + + for (var i = 0; i < length; i++) { + if (i in self) + result[i] = fun.call(thisp, self[i], i, object); + } + return result; + }; +} +if (!Array.prototype.filter) { + Array.prototype.filter = function filter(fun /*, thisp */) { + var object = toObject(this), + self = splitString && _toString(this) == "[object String]" ? + this.split("") : + object, + length = self.length >>> 0, + result = [], + value, + thisp = arguments[1]; + if (_toString(fun) != "[object Function]") { + throw new TypeError(fun + " is not a function"); + } + + for (var i = 0; i < length; i++) { + if (i in self) { + value = self[i]; + if (fun.call(thisp, value, i, object)) { + result.push(value); + } + } + } + return result; + }; +} +if (!Array.prototype.every) { + Array.prototype.every = function every(fun /*, thisp */) { + var object = toObject(this), + self = splitString && _toString(this) == "[object String]" ? + this.split("") : + object, + length = self.length >>> 0, + thisp = arguments[1]; + if (_toString(fun) != "[object Function]") { + throw new TypeError(fun + " is not a function"); + } + + for (var i = 0; i < length; i++) { + if (i in self && !fun.call(thisp, self[i], i, object)) { + return false; + } + } + return true; + }; +} +if (!Array.prototype.some) { + Array.prototype.some = function some(fun /*, thisp */) { + var object = toObject(this), + self = splitString && _toString(this) == "[object String]" ? + this.split("") : + object, + length = self.length >>> 0, + thisp = arguments[1]; + if (_toString(fun) != "[object Function]") { + throw new TypeError(fun + " is not a function"); + } + + for (var i = 0; i < length; i++) { + if (i in self && fun.call(thisp, self[i], i, object)) { + return true; + } + } + return false; + }; +} +if (!Array.prototype.reduce) { + Array.prototype.reduce = function reduce(fun /*, initial*/) { + var object = toObject(this), + self = splitString && _toString(this) == "[object String]" ? + this.split("") : + object, + length = self.length >>> 0; + if (_toString(fun) != "[object Function]") { + throw new TypeError(fun + " is not a function"); + } + if (!length && arguments.length == 1) { + throw new TypeError("reduce of empty array with no initial value"); + } + + var i = 0; + var result; + if (arguments.length >= 2) { + result = arguments[1]; + } else { + do { + if (i in self) { + result = self[i++]; + break; + } + if (++i >= length) { + throw new TypeError("reduce of empty array with no initial value"); + } + } while (true); + } + + for (; i < length; i++) { + if (i in self) { + result = fun.call(void 0, result, self[i], i, object); + } + } + + return result; + }; +} +if (!Array.prototype.reduceRight) { + Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) { + var object = toObject(this), + self = splitString && _toString(this) == "[object String]" ? + this.split("") : + object, + length = self.length >>> 0; + if (_toString(fun) != "[object Function]") { + throw new TypeError(fun + " is not a function"); + } + if (!length && arguments.length == 1) { + throw new TypeError("reduceRight of empty array with no initial value"); + } + + var result, i = length - 1; + if (arguments.length >= 2) { + result = arguments[1]; + } else { + do { + if (i in self) { + result = self[i--]; + break; + } + if (--i < 0) { + throw new TypeError("reduceRight of empty array with no initial value"); + } + } while (true); + } + + do { + if (i in this) { + result = fun.call(void 0, result, self[i], i, object); + } + } while (i--); + + return result; + }; +} +if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) { + Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) { + var self = splitString && _toString(this) == "[object String]" ? + this.split("") : + toObject(this), + length = self.length >>> 0; + + if (!length) { + return -1; + } + + var i = 0; + if (arguments.length > 1) { + i = toInteger(arguments[1]); + } + i = i >= 0 ? i : Math.max(0, length + i); + for (; i < length; i++) { + if (i in self && self[i] === sought) { + return i; + } + } + return -1; + }; +} +if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) { + Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) { + var self = splitString && _toString(this) == "[object String]" ? + this.split("") : + toObject(this), + length = self.length >>> 0; + + if (!length) { + return -1; + } + var i = length - 1; + if (arguments.length > 1) { + i = Math.min(i, toInteger(arguments[1])); + } + i = i >= 0 ? i : length - Math.abs(i); + for (; i >= 0; i--) { + if (i in self && sought === self[i]) { + return i; + } + } + return -1; + }; +} +if (!Object.getPrototypeOf) { + Object.getPrototypeOf = function getPrototypeOf(object) { + return object.__proto__ || ( + object.constructor ? + object.constructor.prototype : + prototypeOfObject + ); + }; +} +if (!Object.getOwnPropertyDescriptor) { + var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " + + "non-object: "; + Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) { + if ((typeof object != "object" && typeof object != "function") || object === null) + throw new TypeError(ERR_NON_OBJECT + object); + if (!owns(object, property)) + return; + + var descriptor, getter, setter; + descriptor = { enumerable: true, configurable: true }; + if (supportsAccessors) { + var prototype = object.__proto__; + object.__proto__ = prototypeOfObject; + + var getter = lookupGetter(object, property); + var setter = lookupSetter(object, property); + object.__proto__ = prototype; + + if (getter || setter) { + if (getter) descriptor.get = getter; + if (setter) descriptor.set = setter; + return descriptor; + } + } + descriptor.value = object[property]; + return descriptor; + }; +} +if (!Object.getOwnPropertyNames) { + Object.getOwnPropertyNames = function getOwnPropertyNames(object) { + return Object.keys(object); + }; +} +if (!Object.create) { + var createEmpty; + if (Object.prototype.__proto__ === null) { + createEmpty = function () { + return { "__proto__": null }; + }; + } else { + createEmpty = function () { + var empty = {}; + for (var i in empty) + empty[i] = null; + empty.constructor = + empty.hasOwnProperty = + empty.propertyIsEnumerable = + empty.isPrototypeOf = + empty.toLocaleString = + empty.toString = + empty.valueOf = + empty.__proto__ = null; + return empty; + } + } + + Object.create = function create(prototype, properties) { + var object; + if (prototype === null) { + object = createEmpty(); + } else { + if (typeof prototype != "object") + throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'"); + var Type = function () {}; + Type.prototype = prototype; + object = new Type(); + object.__proto__ = prototype; + } + if (properties !== void 0) + Object.defineProperties(object, properties); + return object; + }; +} + +function doesDefinePropertyWork(object) { + try { + Object.defineProperty(object, "sentinel", {}); + return "sentinel" in object; + } catch (exception) { + } +} +if (Object.defineProperty) { + var definePropertyWorksOnObject = doesDefinePropertyWork({}); + var definePropertyWorksOnDom = typeof document == "undefined" || + doesDefinePropertyWork(document.createElement("div")); + if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) { + var definePropertyFallback = Object.defineProperty; + } +} + +if (!Object.defineProperty || definePropertyFallback) { + var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: "; + var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: " + var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " + + "on this javascript engine"; + + Object.defineProperty = function defineProperty(object, property, descriptor) { + if ((typeof object != "object" && typeof object != "function") || object === null) + throw new TypeError(ERR_NON_OBJECT_TARGET + object); + if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null) + throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor); + if (definePropertyFallback) { + try { + return definePropertyFallback.call(Object, object, property, descriptor); + } catch (exception) { + } + } + if (owns(descriptor, "value")) { + + if (supportsAccessors && (lookupGetter(object, property) || + lookupSetter(object, property))) + { + var prototype = object.__proto__; + object.__proto__ = prototypeOfObject; + delete object[property]; + object[property] = descriptor.value; + object.__proto__ = prototype; + } else { + object[property] = descriptor.value; + } + } else { + if (!supportsAccessors) + throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED); + if (owns(descriptor, "get")) + defineGetter(object, property, descriptor.get); + if (owns(descriptor, "set")) + defineSetter(object, property, descriptor.set); + } + + return object; + }; +} +if (!Object.defineProperties) { + Object.defineProperties = function defineProperties(object, properties) { + for (var property in properties) { + if (owns(properties, property)) + Object.defineProperty(object, property, properties[property]); + } + return object; + }; +} +if (!Object.seal) { + Object.seal = function seal(object) { + return object; + }; +} +if (!Object.freeze) { + Object.freeze = function freeze(object) { + return object; + }; +} +try { + Object.freeze(function () {}); +} catch (exception) { + Object.freeze = (function freeze(freezeObject) { + return function freeze(object) { + if (typeof object == "function") { + return object; + } else { + return freezeObject(object); + } + }; + })(Object.freeze); +} +if (!Object.preventExtensions) { + Object.preventExtensions = function preventExtensions(object) { + return object; + }; +} +if (!Object.isSealed) { + Object.isSealed = function isSealed(object) { + return false; + }; +} +if (!Object.isFrozen) { + Object.isFrozen = function isFrozen(object) { + return false; + }; +} +if (!Object.isExtensible) { + Object.isExtensible = function isExtensible(object) { + if (Object(object) === object) { + throw new TypeError(); // TODO message + } + var name = ''; + while (owns(object, name)) { + name += '?'; + } + object[name] = true; + var returnValue = owns(object, name); + delete object[name]; + return returnValue; + }; +} +if (!Object.keys) { + var hasDontEnumBug = true, + dontEnums = [ + "toString", + "toLocaleString", + "valueOf", + "hasOwnProperty", + "isPrototypeOf", + "propertyIsEnumerable", + "constructor" + ], + dontEnumsLength = dontEnums.length; + + for (var key in {"toString": null}) { + hasDontEnumBug = false; + } + + Object.keys = function keys(object) { + + if ( + (typeof object != "object" && typeof object != "function") || + object === null + ) { + throw new TypeError("Object.keys called on a non-object"); + } + + var keys = []; + for (var name in object) { + if (owns(object, name)) { + keys.push(name); + } + } + + if (hasDontEnumBug) { + for (var i = 0, ii = dontEnumsLength; i < ii; i++) { + var dontEnum = dontEnums[i]; + if (owns(object, dontEnum)) { + keys.push(dontEnum); + } + } + } + return keys; + }; + +} +if (!Date.now) { + Date.now = function now() { + return new Date().getTime(); + }; +} +var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" + + "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" + + "\u2029\uFEFF"; +if (!String.prototype.trim || ws.trim()) { + ws = "[" + ws + "]"; + var trimBeginRegexp = new RegExp("^" + ws + ws + "*"), + trimEndRegexp = new RegExp(ws + ws + "*$"); + String.prototype.trim = function trim() { + return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, ""); + }; +} + +function toInteger(n) { + n = +n; + if (n !== n) { // isNaN + n = 0; + } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) { + n = (n > 0 || -1) * Math.floor(Math.abs(n)); + } + return n; +} + +function isPrimitive(input) { + var type = typeof input; + return ( + input === null || + type === "undefined" || + type === "boolean" || + type === "number" || + type === "string" + ); +} + +function toPrimitive(input) { + var val, valueOf, toString; + if (isPrimitive(input)) { + return input; + } + valueOf = input.valueOf; + if (typeof valueOf === "function") { + val = valueOf.call(input); + if (isPrimitive(val)) { + return val; + } + } + toString = input.toString; + if (typeof toString === "function") { + val = toString.call(input); + if (isPrimitive(val)) { + return val; + } + } + throw new TypeError(); +} +var toObject = function (o) { + if (o == null) { // this matches both null and undefined + throw new TypeError("can't convert "+o+" to object"); + } + return Object(o); +}; + +}); + +ace.define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"], function(acequire, exports, module) { +"use strict"; + +acequire("./regexp"); +acequire("./es5-shim"); + +}); + +ace.define("ace/lib/dom",["require","exports","module"], function(acequire, exports, module) { +"use strict"; + +var XHTML_NS = "http://www.w3.org/1999/xhtml"; + +exports.getDocumentHead = function(doc) { + if (!doc) + doc = document; + return doc.head || doc.getElementsByTagName("head")[0] || doc.documentElement; +}; + +exports.createElement = function(tag, ns) { + return document.createElementNS ? + document.createElementNS(ns || XHTML_NS, tag) : + document.createElement(tag); +}; + +exports.hasCssClass = function(el, name) { + var classes = (el.className || "").split(/\s+/g); + return classes.indexOf(name) !== -1; +}; +exports.addCssClass = function(el, name) { + if (!exports.hasCssClass(el, name)) { + el.className += " " + name; + } +}; +exports.removeCssClass = function(el, name) { + var classes = el.className.split(/\s+/g); + while (true) { + var index = classes.indexOf(name); + if (index == -1) { + break; + } + classes.splice(index, 1); + } + el.className = classes.join(" "); +}; + +exports.toggleCssClass = function(el, name) { + var classes = el.className.split(/\s+/g), add = true; + while (true) { + var index = classes.indexOf(name); + if (index == -1) { + break; + } + add = false; + classes.splice(index, 1); + } + if (add) + classes.push(name); + + el.className = classes.join(" "); + return add; +}; +exports.setCssClass = function(node, className, include) { + if (include) { + exports.addCssClass(node, className); + } else { + exports.removeCssClass(node, className); + } +}; + +exports.hasCssString = function(id, doc) { + var index = 0, sheets; + doc = doc || document; + + if (doc.createStyleSheet && (sheets = doc.styleSheets)) { + while (index < sheets.length) + if (sheets[index++].owningElement.id === id) return true; + } else if ((sheets = doc.getElementsByTagName("style"))) { + while (index < sheets.length) + if (sheets[index++].id === id) return true; + } + + return false; +}; + +exports.importCssString = function importCssString(cssText, id, doc) { + doc = doc || document; + if (id && exports.hasCssString(id, doc)) + return null; + + var style; + + if (id) + cssText += "\n/*# sourceURL=ace/css/" + id + " */"; + + if (doc.createStyleSheet) { + style = doc.createStyleSheet(); + style.cssText = cssText; + if (id) + style.owningElement.id = id; + } else { + style = exports.createElement("style"); + style.appendChild(doc.createTextNode(cssText)); + if (id) + style.id = id; + + exports.getDocumentHead(doc).appendChild(style); + } +}; + +exports.importCssStylsheet = function(uri, doc) { + if (doc.createStyleSheet) { + doc.createStyleSheet(uri); + } else { + var link = exports.createElement('link'); + link.rel = 'stylesheet'; + link.href = uri; + + exports.getDocumentHead(doc).appendChild(link); + } +}; + +exports.getInnerWidth = function(element) { + return ( + parseInt(exports.computedStyle(element, "paddingLeft"), 10) + + parseInt(exports.computedStyle(element, "paddingRight"), 10) + + element.clientWidth + ); +}; + +exports.getInnerHeight = function(element) { + return ( + parseInt(exports.computedStyle(element, "paddingTop"), 10) + + parseInt(exports.computedStyle(element, "paddingBottom"), 10) + + element.clientHeight + ); +}; + +exports.scrollbarWidth = function(document) { + var inner = exports.createElement("ace_inner"); + inner.style.width = "100%"; + inner.style.minWidth = "0px"; + inner.style.height = "200px"; + inner.style.display = "block"; + + var outer = exports.createElement("ace_outer"); + var style = outer.style; + + style.position = "absolute"; + style.left = "-10000px"; + style.overflow = "hidden"; + style.width = "200px"; + style.minWidth = "0px"; + style.height = "150px"; + style.display = "block"; + + outer.appendChild(inner); + + var body = document.documentElement; + body.appendChild(outer); + + var noScrollbar = inner.offsetWidth; + + style.overflow = "scroll"; + var withScrollbar = inner.offsetWidth; + + if (noScrollbar == withScrollbar) { + withScrollbar = outer.clientWidth; + } + + body.removeChild(outer); + + return noScrollbar-withScrollbar; +}; + +if (typeof document == "undefined") { + exports.importCssString = function() {}; + return; +} + +if (window.pageYOffset !== undefined) { + exports.getPageScrollTop = function() { + return window.pageYOffset; + }; + + exports.getPageScrollLeft = function() { + return window.pageXOffset; + }; +} +else { + exports.getPageScrollTop = function() { + return document.body.scrollTop; + }; + + exports.getPageScrollLeft = function() { + return document.body.scrollLeft; + }; +} + +if (window.getComputedStyle) + exports.computedStyle = function(element, style) { + if (style) + return (window.getComputedStyle(element, "") || {})[style] || ""; + return window.getComputedStyle(element, "") || {}; + }; +else + exports.computedStyle = function(element, style) { + if (style) + return element.currentStyle[style]; + return element.currentStyle; + }; +exports.setInnerHtml = function(el, innerHtml) { + var element = el.cloneNode(false);//document.createElement("div"); + element.innerHTML = innerHtml; + el.parentNode.replaceChild(element, el); + return element; +}; + +if ("textContent" in document.documentElement) { + exports.setInnerText = function(el, innerText) { + el.textContent = innerText; + }; + + exports.getInnerText = function(el) { + return el.textContent; + }; +} +else { + exports.setInnerText = function(el, innerText) { + el.innerText = innerText; + }; + + exports.getInnerText = function(el) { + return el.innerText; + }; +} + +exports.getParentWindow = function(document) { + return document.defaultView || document.parentWindow; +}; + +}); + +ace.define("ace/lib/oop",["require","exports","module"], function(acequire, exports, module) { +"use strict"; + +exports.inherits = function(ctor, superCtor) { + ctor.super_ = superCtor; + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); +}; + +exports.mixin = function(obj, mixin) { + for (var key in mixin) { + obj[key] = mixin[key]; + } + return obj; +}; + +exports.implement = function(proto, mixin) { + exports.mixin(proto, mixin); +}; + +}); + +ace.define("ace/lib/keys",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/oop"], function(acequire, exports, module) { +"use strict"; + +acequire("./fixoldbrowsers"); + +var oop = acequire("./oop"); +var Keys = (function() { + var ret = { + MODIFIER_KEYS: { + 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta' + }, + + KEY_MODS: { + "ctrl": 1, "alt": 2, "option" : 2, "shift": 4, + "super": 8, "meta": 8, "command": 8, "cmd": 8 + }, + + FUNCTION_KEYS : { + 8 : "Backspace", + 9 : "Tab", + 13 : "Return", + 19 : "Pause", + 27 : "Esc", + 32 : "Space", + 33 : "PageUp", + 34 : "PageDown", + 35 : "End", + 36 : "Home", + 37 : "Left", + 38 : "Up", + 39 : "Right", + 40 : "Down", + 44 : "Print", + 45 : "Insert", + 46 : "Delete", + 96 : "Numpad0", + 97 : "Numpad1", + 98 : "Numpad2", + 99 : "Numpad3", + 100: "Numpad4", + 101: "Numpad5", + 102: "Numpad6", + 103: "Numpad7", + 104: "Numpad8", + 105: "Numpad9", + '-13': "NumpadEnter", + 112: "F1", + 113: "F2", + 114: "F3", + 115: "F4", + 116: "F5", + 117: "F6", + 118: "F7", + 119: "F8", + 120: "F9", + 121: "F10", + 122: "F11", + 123: "F12", + 144: "Numlock", + 145: "Scrolllock" + }, + + PRINTABLE_KEYS: { + 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5', + 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a', + 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h', + 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o', + 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v', + 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.', + 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`', + 219: '[', 220: '\\',221: ']', 222: "'", 111: '/', 106: '*' + } + }; + var name, i; + for (i in ret.FUNCTION_KEYS) { + name = ret.FUNCTION_KEYS[i].toLowerCase(); + ret[name] = parseInt(i, 10); + } + for (i in ret.PRINTABLE_KEYS) { + name = ret.PRINTABLE_KEYS[i].toLowerCase(); + ret[name] = parseInt(i, 10); + } + oop.mixin(ret, ret.MODIFIER_KEYS); + oop.mixin(ret, ret.PRINTABLE_KEYS); + oop.mixin(ret, ret.FUNCTION_KEYS); + ret.enter = ret["return"]; + ret.escape = ret.esc; + ret.del = ret["delete"]; + ret[173] = '-'; + + (function() { + var mods = ["cmd", "ctrl", "alt", "shift"]; + for (var i = Math.pow(2, mods.length); i--;) { + ret.KEY_MODS[i] = mods.filter(function(x) { + return i & ret.KEY_MODS[x]; + }).join("-") + "-"; + } + })(); + + ret.KEY_MODS[0] = ""; + ret.KEY_MODS[-1] = "input-"; + + return ret; +})(); +oop.mixin(exports, Keys); + +exports.keyCodeToString = function(keyCode) { + var keyString = Keys[keyCode]; + if (typeof keyString != "string") + keyString = String.fromCharCode(keyCode); + return keyString.toLowerCase(); +}; + +}); + +ace.define("ace/lib/useragent",["require","exports","module"], function(acequire, exports, module) { +"use strict"; +exports.OS = { + LINUX: "LINUX", + MAC: "MAC", + WINDOWS: "WINDOWS" +}; +exports.getOS = function() { + if (exports.isMac) { + return exports.OS.MAC; + } else if (exports.isLinux) { + return exports.OS.LINUX; + } else { + return exports.OS.WINDOWS; + } +}; +if (typeof navigator != "object") + return; + +var os = (navigator.platform.match(/mac|win|linux/i) || ["other"])[0].toLowerCase(); +var ua = navigator.userAgent; +exports.isWin = (os == "win"); +exports.isMac = (os == "mac"); +exports.isLinux = (os == "linux"); +exports.isIE = + (navigator.appName == "Microsoft Internet Explorer" || navigator.appName.indexOf("MSAppHost") >= 0) + ? parseFloat((ua.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]) + : parseFloat((ua.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]); // for ie + +exports.isOldIE = exports.isIE && exports.isIE < 9; +exports.isGecko = exports.isMozilla = (window.Controllers || window.controllers) && window.navigator.product === "Gecko"; +exports.isOldGecko = exports.isGecko && parseInt((ua.match(/rv\:(\d+)/)||[])[1], 10) < 4; +exports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == "[object Opera]"; +exports.isWebKit = parseFloat(ua.split("WebKit/")[1]) || undefined; + +exports.isChrome = parseFloat(ua.split(" Chrome/")[1]) || undefined; + +exports.isAIR = ua.indexOf("AdobeAIR") >= 0; + +exports.isIPad = ua.indexOf("iPad") >= 0; + +exports.isTouchPad = ua.indexOf("TouchPad") >= 0; + +exports.isChromeOS = ua.indexOf(" CrOS ") >= 0; + +}); + +ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"], function(acequire, exports, module) { +"use strict"; + +var keys = acequire("./keys"); +var useragent = acequire("./useragent"); + +var pressedKeys = null; +var ts = 0; + +exports.addListener = function(elem, type, callback) { + if (elem.addEventListener) { + return elem.addEventListener(type, callback, false); + } + if (elem.attachEvent) { + var wrapper = function() { + callback.call(elem, window.event); + }; + callback._wrapper = wrapper; + elem.attachEvent("on" + type, wrapper); + } +}; + +exports.removeListener = function(elem, type, callback) { + if (elem.removeEventListener) { + return elem.removeEventListener(type, callback, false); + } + if (elem.detachEvent) { + elem.detachEvent("on" + type, callback._wrapper || callback); + } +}; +exports.stopEvent = function(e) { + exports.stopPropagation(e); + exports.preventDefault(e); + return false; +}; + +exports.stopPropagation = function(e) { + if (e.stopPropagation) + e.stopPropagation(); + else + e.cancelBubble = true; +}; + +exports.preventDefault = function(e) { + if (e.preventDefault) + e.preventDefault(); + else + e.returnValue = false; +}; +exports.getButton = function(e) { + if (e.type == "dblclick") + return 0; + if (e.type == "contextmenu" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey))) + return 2; + if (e.preventDefault) { + return e.button; + } + else { + return {1:0, 2:2, 4:1}[e.button]; + } +}; + +exports.capture = function(el, eventHandler, releaseCaptureHandler) { + function onMouseUp(e) { + eventHandler && eventHandler(e); + releaseCaptureHandler && releaseCaptureHandler(e); + + exports.removeListener(document, "mousemove", eventHandler, true); + exports.removeListener(document, "mouseup", onMouseUp, true); + exports.removeListener(document, "dragstart", onMouseUp, true); + } + + exports.addListener(document, "mousemove", eventHandler, true); + exports.addListener(document, "mouseup", onMouseUp, true); + exports.addListener(document, "dragstart", onMouseUp, true); + + return onMouseUp; +}; + +exports.addTouchMoveListener = function (el, callback) { + if ("ontouchmove" in el) { + var startx, starty; + exports.addListener(el, "touchstart", function (e) { + var touchObj = e.changedTouches[0]; + startx = touchObj.clientX; + starty = touchObj.clientY; + }); + exports.addListener(el, "touchmove", function (e) { + var factor = 1, + touchObj = e.changedTouches[0]; + + e.wheelX = -(touchObj.clientX - startx) / factor; + e.wheelY = -(touchObj.clientY - starty) / factor; + + startx = touchObj.clientX; + starty = touchObj.clientY; + + callback(e); + }); + } +}; + +exports.addMouseWheelListener = function(el, callback) { + if ("onmousewheel" in el) { + exports.addListener(el, "mousewheel", function(e) { + var factor = 8; + if (e.wheelDeltaX !== undefined) { + e.wheelX = -e.wheelDeltaX / factor; + e.wheelY = -e.wheelDeltaY / factor; + } else { + e.wheelX = 0; + e.wheelY = -e.wheelDelta / factor; + } + callback(e); + }); + } else if ("onwheel" in el) { + exports.addListener(el, "wheel", function(e) { + var factor = 0.35; + switch (e.deltaMode) { + case e.DOM_DELTA_PIXEL: + e.wheelX = e.deltaX * factor || 0; + e.wheelY = e.deltaY * factor || 0; + break; + case e.DOM_DELTA_LINE: + case e.DOM_DELTA_PAGE: + e.wheelX = (e.deltaX || 0) * 5; + e.wheelY = (e.deltaY || 0) * 5; + break; + } + + callback(e); + }); + } else { + exports.addListener(el, "DOMMouseScroll", function(e) { + if (e.axis && e.axis == e.HORIZONTAL_AXIS) { + e.wheelX = (e.detail || 0) * 5; + e.wheelY = 0; + } else { + e.wheelX = 0; + e.wheelY = (e.detail || 0) * 5; + } + callback(e); + }); + } +}; + +exports.addMultiMouseDownListener = function(elements, timeouts, eventHandler, callbackName) { + var clicks = 0; + var startX, startY, timer; + var eventNames = { + 2: "dblclick", + 3: "tripleclick", + 4: "quadclick" + }; + + function onMousedown(e) { + if (exports.getButton(e) !== 0) { + clicks = 0; + } else if (e.detail > 1) { + clicks++; + if (clicks > 4) + clicks = 1; + } else { + clicks = 1; + } + if (useragent.isIE) { + var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5; + if (!timer || isNewClick) + clicks = 1; + if (timer) + clearTimeout(timer); + timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600); + + if (clicks == 1) { + startX = e.clientX; + startY = e.clientY; + } + } + + e._clicks = clicks; + + eventHandler[callbackName]("mousedown", e); + + if (clicks > 4) + clicks = 0; + else if (clicks > 1) + return eventHandler[callbackName](eventNames[clicks], e); + } + function onDblclick(e) { + clicks = 2; + if (timer) + clearTimeout(timer); + timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600); + eventHandler[callbackName]("mousedown", e); + eventHandler[callbackName](eventNames[clicks], e); + } + if (!Array.isArray(elements)) + elements = [elements]; + elements.forEach(function(el) { + exports.addListener(el, "mousedown", onMousedown); + if (useragent.isOldIE) + exports.addListener(el, "dblclick", onDblclick); + }); +}; + +var getModifierHash = useragent.isMac && useragent.isOpera && !("KeyboardEvent" in window) + ? function(e) { + return 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0); + } + : function(e) { + return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0); + }; + +exports.getModifierString = function(e) { + return keys.KEY_MODS[getModifierHash(e)]; +}; + +function normalizeCommandKeys(callback, e, keyCode) { + var hashId = getModifierHash(e); + + if (!useragent.isMac && pressedKeys) { + if (pressedKeys.OSKey) + hashId |= 8; + if (pressedKeys.altGr) { + if ((3 & hashId) != 3) + pressedKeys.altGr = 0; + else + return; + } + if (keyCode === 18 || keyCode === 17) { + var location = "location" in e ? e.location : e.keyLocation; + if (keyCode === 17 && location === 1) { + if (pressedKeys[keyCode] == 1) + ts = e.timeStamp; + } else if (keyCode === 18 && hashId === 3 && location === 2) { + var dt = e.timeStamp - ts; + if (dt < 50) + pressedKeys.altGr = true; + } + } + } + + if (keyCode in keys.MODIFIER_KEYS) { + keyCode = -1; + } + if (hashId & 8 && (keyCode >= 91 && keyCode <= 93)) { + keyCode = -1; + } + + if (!hashId && keyCode === 13) { + var location = "location" in e ? e.location : e.keyLocation; + if (location === 3) { + callback(e, hashId, -keyCode); + if (e.defaultPrevented) + return; + } + } + + if (useragent.isChromeOS && hashId & 8) { + callback(e, hashId, keyCode); + if (e.defaultPrevented) + return; + else + hashId &= ~8; + } + if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) { + return false; + } + + return callback(e, hashId, keyCode); +} + + +exports.addCommandKeyListener = function(el, callback) { + var addListener = exports.addListener; + if (useragent.isOldGecko || (useragent.isOpera && !("KeyboardEvent" in window))) { + var lastKeyDownKeyCode = null; + addListener(el, "keydown", function(e) { + lastKeyDownKeyCode = e.keyCode; + }); + addListener(el, "keypress", function(e) { + return normalizeCommandKeys(callback, e, lastKeyDownKeyCode); + }); + } else { + var lastDefaultPrevented = null; + + addListener(el, "keydown", function(e) { + var keyCode = e.keyCode; + pressedKeys[keyCode] = (pressedKeys[keyCode] || 0) + 1; + if (keyCode == 91 || keyCode == 92) { + pressedKeys.OSKey = true; + } else if (pressedKeys.OSKey) { + if (e.timeStamp - pressedKeys.lastT > 200 && pressedKeys.count == 1) + resetPressedKeys(); + } + if (pressedKeys[keyCode] == 1) + pressedKeys.count++; + pressedKeys.lastT = e.timeStamp; + var result = normalizeCommandKeys(callback, e, keyCode); + lastDefaultPrevented = e.defaultPrevented; + return result; + }); + + addListener(el, "keypress", function(e) { + if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) { + exports.stopEvent(e); + lastDefaultPrevented = null; + } + }); + + addListener(el, "keyup", function(e) { + var keyCode = e.keyCode; + if (!pressedKeys[keyCode]) { + resetPressedKeys(); + } else { + pressedKeys.count = Math.max(pressedKeys.count - 1, 0); + } + if (keyCode == 91 || keyCode == 92) { + pressedKeys.OSKey = false; + } + pressedKeys[keyCode] = null; + }); + + if (!pressedKeys) { + resetPressedKeys(); + addListener(window, "focus", resetPressedKeys); + } + } +}; +function resetPressedKeys() { + pressedKeys = Object.create(null); + pressedKeys.count = 0; + pressedKeys.lastT = 0; +} + +if (typeof window == "object" && window.postMessage && !useragent.isOldIE) { + var postMessageId = 1; + exports.nextTick = function(callback, win) { + win = win || window; + var messageName = "zero-timeout-message-" + postMessageId; + exports.addListener(win, "message", function listener(e) { + if (e.data == messageName) { + exports.stopPropagation(e); + exports.removeListener(win, "message", listener); + callback(); + } + }); + win.postMessage(messageName, "*"); + }; +} + + +exports.nextFrame = typeof window == "object" && (window.requestAnimationFrame + || window.mozRequestAnimationFrame + || window.webkitRequestAnimationFrame + || window.msRequestAnimationFrame + || window.oRequestAnimationFrame); + +if (exports.nextFrame) + exports.nextFrame = exports.nextFrame.bind(window); +else + exports.nextFrame = function(callback) { + setTimeout(callback, 17); + }; +}); + +ace.define("ace/lib/lang",["require","exports","module"], function(acequire, exports, module) { +"use strict"; + +exports.last = function(a) { + return a[a.length - 1]; +}; + +exports.stringReverse = function(string) { + return string.split("").reverse().join(""); +}; + +exports.stringRepeat = function (string, count) { + var result = ''; + while (count > 0) { + if (count & 1) + result += string; + + if (count >>= 1) + string += string; + } + return result; +}; + +var trimBeginRegexp = /^\s\s*/; +var trimEndRegexp = /\s\s*$/; + +exports.stringTrimLeft = function (string) { + return string.replace(trimBeginRegexp, ''); +}; + +exports.stringTrimRight = function (string) { + return string.replace(trimEndRegexp, ''); +}; + +exports.copyObject = function(obj) { + var copy = {}; + for (var key in obj) { + copy[key] = obj[key]; + } + return copy; +}; + +exports.copyArray = function(array){ + var copy = []; + for (var i=0, l=array.length; i 1); + return ev.preventDefault(); + }; + + this.startSelect = function(pos, waitForClickSelection) { + pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y); + var editor = this.editor; + editor.$blockScrolling++; + if (this.mousedownEvent.getShiftKey()) + editor.selection.selectToPosition(pos); + else if (!waitForClickSelection) + editor.selection.moveToPosition(pos); + if (!waitForClickSelection) + this.select(); + if (editor.renderer.scroller.setCapture) { + editor.renderer.scroller.setCapture(); + } + editor.setStyle("ace_selecting"); + this.setState("select"); + editor.$blockScrolling--; + }; + + this.select = function() { + var anchor, editor = this.editor; + var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y); + editor.$blockScrolling++; + if (this.$clickSelection) { + var cmp = this.$clickSelection.comparePoint(cursor); + + if (cmp == -1) { + anchor = this.$clickSelection.end; + } else if (cmp == 1) { + anchor = this.$clickSelection.start; + } else { + var orientedRange = calcRangeOrientation(this.$clickSelection, cursor); + cursor = orientedRange.cursor; + anchor = orientedRange.anchor; + } + editor.selection.setSelectionAnchor(anchor.row, anchor.column); + } + editor.selection.selectToPosition(cursor); + editor.$blockScrolling--; + editor.renderer.scrollCursorIntoView(); + }; + + this.extendSelectionBy = function(unitName) { + var anchor, editor = this.editor; + var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y); + var range = editor.selection[unitName](cursor.row, cursor.column); + editor.$blockScrolling++; + if (this.$clickSelection) { + var cmpStart = this.$clickSelection.comparePoint(range.start); + var cmpEnd = this.$clickSelection.comparePoint(range.end); + + if (cmpStart == -1 && cmpEnd <= 0) { + anchor = this.$clickSelection.end; + if (range.end.row != cursor.row || range.end.column != cursor.column) + cursor = range.start; + } else if (cmpEnd == 1 && cmpStart >= 0) { + anchor = this.$clickSelection.start; + if (range.start.row != cursor.row || range.start.column != cursor.column) + cursor = range.end; + } else if (cmpStart == -1 && cmpEnd == 1) { + cursor = range.end; + anchor = range.start; + } else { + var orientedRange = calcRangeOrientation(this.$clickSelection, cursor); + cursor = orientedRange.cursor; + anchor = orientedRange.anchor; + } + editor.selection.setSelectionAnchor(anchor.row, anchor.column); + } + editor.selection.selectToPosition(cursor); + editor.$blockScrolling--; + editor.renderer.scrollCursorIntoView(); + }; + + this.selectEnd = + this.selectAllEnd = + this.selectByWordsEnd = + this.selectByLinesEnd = function() { + this.$clickSelection = null; + this.editor.unsetStyle("ace_selecting"); + if (this.editor.renderer.scroller.releaseCapture) { + this.editor.renderer.scroller.releaseCapture(); + } + }; + + this.focusWait = function() { + var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); + var time = Date.now(); + + if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimout) + this.startSelect(this.mousedownEvent.getDocumentPosition()); + }; + + this.onDoubleClick = function(ev) { + var pos = ev.getDocumentPosition(); + var editor = this.editor; + var session = editor.session; + + var range = session.getBracketRange(pos); + if (range) { + if (range.isEmpty()) { + range.start.column--; + range.end.column++; + } + this.setState("select"); + } else { + range = editor.selection.getWordRange(pos.row, pos.column); + this.setState("selectByWords"); + } + this.$clickSelection = range; + this.select(); + }; + + this.onTripleClick = function(ev) { + var pos = ev.getDocumentPosition(); + var editor = this.editor; + + this.setState("selectByLines"); + var range = editor.getSelectionRange(); + if (range.isMultiLine() && range.contains(pos.row, pos.column)) { + this.$clickSelection = editor.selection.getLineRange(range.start.row); + this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end; + } else { + this.$clickSelection = editor.selection.getLineRange(pos.row); + } + this.select(); + }; + + this.onQuadClick = function(ev) { + var editor = this.editor; + + editor.selectAll(); + this.$clickSelection = editor.getSelectionRange(); + this.setState("selectAll"); + }; + + this.onMouseWheel = function(ev) { + if (ev.getAccelKey()) + return; + if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) { + ev.wheelX = ev.wheelY; + ev.wheelY = 0; + } + + var t = ev.domEvent.timeStamp; + var dt = t - (this.$lastScrollTime||0); + + var editor = this.editor; + var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); + if (isScrolable || dt < 200) { + this.$lastScrollTime = t; + editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); + return ev.stop(); + } + }; + + this.onTouchMove = function (ev) { + var t = ev.domEvent.timeStamp; + var dt = t - (this.$lastScrollTime || 0); + + var editor = this.editor; + var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); + if (isScrolable || dt < 200) { + this.$lastScrollTime = t; + editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); + return ev.stop(); + } + }; + +}).call(DefaultHandlers.prototype); + +exports.DefaultHandlers = DefaultHandlers; + +function calcDistance(ax, ay, bx, by) { + return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2)); +} + +function calcRangeOrientation(range, cursor) { + if (range.start.row == range.end.row) + var cmp = 2 * cursor.column - range.start.column - range.end.column; + else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column) + var cmp = cursor.column - 4; + else + var cmp = 2 * cursor.row - range.start.row - range.end.row; + + if (cmp < 0) + return {cursor: range.start, anchor: range.end}; + else + return {cursor: range.end, anchor: range.start}; +} + +}); + +ace.define("ace/tooltip",["require","exports","module","ace/lib/oop","ace/lib/dom"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("./lib/oop"); +var dom = acequire("./lib/dom"); +function Tooltip (parentNode) { + this.isOpen = false; + this.$element = null; + this.$parentNode = parentNode; +} + +(function() { + this.$init = function() { + this.$element = dom.createElement("div"); + this.$element.className = "ace_tooltip"; + this.$element.style.display = "none"; + this.$parentNode.appendChild(this.$element); + return this.$element; + }; + this.getElement = function() { + return this.$element || this.$init(); + }; + this.setText = function(text) { + dom.setInnerText(this.getElement(), text); + }; + this.setHtml = function(html) { + this.getElement().innerHTML = html; + }; + this.setPosition = function(x, y) { + this.getElement().style.left = x + "px"; + this.getElement().style.top = y + "px"; + }; + this.setClassName = function(className) { + dom.addCssClass(this.getElement(), className); + }; + this.show = function(text, x, y) { + if (text != null) + this.setText(text); + if (x != null && y != null) + this.setPosition(x, y); + if (!this.isOpen) { + this.getElement().style.display = "block"; + this.isOpen = true; + } + }; + + this.hide = function() { + if (this.isOpen) { + this.getElement().style.display = "none"; + this.isOpen = false; + } + }; + this.getHeight = function() { + return this.getElement().offsetHeight; + }; + this.getWidth = function() { + return this.getElement().offsetWidth; + }; + +}).call(Tooltip.prototype); + +exports.Tooltip = Tooltip; +}); + +ace.define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event","ace/tooltip"], function(acequire, exports, module) { +"use strict"; +var dom = acequire("../lib/dom"); +var oop = acequire("../lib/oop"); +var event = acequire("../lib/event"); +var Tooltip = acequire("../tooltip").Tooltip; + +function GutterHandler(mouseHandler) { + var editor = mouseHandler.editor; + var gutter = editor.renderer.$gutterLayer; + var tooltip = new GutterTooltip(editor.container); + + mouseHandler.editor.setDefaultHandler("guttermousedown", function(e) { + if (!editor.isFocused() || e.getButton() != 0) + return; + var gutterRegion = gutter.getRegion(e); + + if (gutterRegion == "foldWidgets") + return; + + var row = e.getDocumentPosition().row; + var selection = editor.session.selection; + + if (e.getShiftKey()) + selection.selectTo(row, 0); + else { + if (e.domEvent.detail == 2) { + editor.selectAll(); + return e.preventDefault(); + } + mouseHandler.$clickSelection = editor.selection.getLineRange(row); + } + mouseHandler.setState("selectByLines"); + mouseHandler.captureMouse(e); + return e.preventDefault(); + }); + + + var tooltipTimeout, mouseEvent, tooltipAnnotation; + + function showTooltip() { + var row = mouseEvent.getDocumentPosition().row; + var annotation = gutter.$annotations[row]; + if (!annotation) + return hideTooltip(); + + var maxRow = editor.session.getLength(); + if (row == maxRow) { + var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row; + var pos = mouseEvent.$pos; + if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column)) + return hideTooltip(); + } + + if (tooltipAnnotation == annotation) + return; + tooltipAnnotation = annotation.text.join("
"); + + tooltip.setHtml(tooltipAnnotation); + tooltip.show(); + editor.on("mousewheel", hideTooltip); + + if (mouseHandler.$tooltipFollowsMouse) { + moveTooltip(mouseEvent); + } else { + var gutterElement = mouseEvent.domEvent.target; + var rect = gutterElement.getBoundingClientRect(); + var style = tooltip.getElement().style; + style.left = rect.right + "px"; + style.top = rect.bottom + "px"; + } + } + + function hideTooltip() { + if (tooltipTimeout) + tooltipTimeout = clearTimeout(tooltipTimeout); + if (tooltipAnnotation) { + tooltip.hide(); + tooltipAnnotation = null; + editor.removeEventListener("mousewheel", hideTooltip); + } + } + + function moveTooltip(e) { + tooltip.setPosition(e.x, e.y); + } + + mouseHandler.editor.setDefaultHandler("guttermousemove", function(e) { + var target = e.domEvent.target || e.domEvent.srcElement; + if (dom.hasCssClass(target, "ace_fold-widget")) + return hideTooltip(); + + if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse) + moveTooltip(e); + + mouseEvent = e; + if (tooltipTimeout) + return; + tooltipTimeout = setTimeout(function() { + tooltipTimeout = null; + if (mouseEvent && !mouseHandler.isMousePressed) + showTooltip(); + else + hideTooltip(); + }, 50); + }); + + event.addListener(editor.renderer.$gutter, "mouseout", function(e) { + mouseEvent = null; + if (!tooltipAnnotation || tooltipTimeout) + return; + + tooltipTimeout = setTimeout(function() { + tooltipTimeout = null; + hideTooltip(); + }, 50); + }); + + editor.on("changeSession", hideTooltip); +} + +function GutterTooltip(parentNode) { + Tooltip.call(this, parentNode); +} + +oop.inherits(GutterTooltip, Tooltip); + +(function(){ + this.setPosition = function(x, y) { + var windowWidth = window.innerWidth || document.documentElement.clientWidth; + var windowHeight = window.innerHeight || document.documentElement.clientHeight; + var width = this.getWidth(); + var height = this.getHeight(); + x += 15; + y += 15; + if (x + width > windowWidth) { + x -= (x + width) - windowWidth; + } + if (y + height > windowHeight) { + y -= 20 + height; + } + Tooltip.prototype.setPosition.call(this, x, y); + }; + +}).call(GutterTooltip.prototype); + + + +exports.GutterHandler = GutterHandler; + +}); + +ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"], function(acequire, exports, module) { +"use strict"; + +var event = acequire("../lib/event"); +var useragent = acequire("../lib/useragent"); +var MouseEvent = exports.MouseEvent = function(domEvent, editor) { + this.domEvent = domEvent; + this.editor = editor; + + this.x = this.clientX = domEvent.clientX; + this.y = this.clientY = domEvent.clientY; + + this.$pos = null; + this.$inSelection = null; + + this.propagationStopped = false; + this.defaultPrevented = false; +}; + +(function() { + + this.stopPropagation = function() { + event.stopPropagation(this.domEvent); + this.propagationStopped = true; + }; + + this.preventDefault = function() { + event.preventDefault(this.domEvent); + this.defaultPrevented = true; + }; + + this.stop = function() { + this.stopPropagation(); + this.preventDefault(); + }; + this.getDocumentPosition = function() { + if (this.$pos) + return this.$pos; + + this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY); + return this.$pos; + }; + this.inSelection = function() { + if (this.$inSelection !== null) + return this.$inSelection; + + var editor = this.editor; + + + var selectionRange = editor.getSelectionRange(); + if (selectionRange.isEmpty()) + this.$inSelection = false; + else { + var pos = this.getDocumentPosition(); + this.$inSelection = selectionRange.contains(pos.row, pos.column); + } + + return this.$inSelection; + }; + this.getButton = function() { + return event.getButton(this.domEvent); + }; + this.getShiftKey = function() { + return this.domEvent.shiftKey; + }; + + this.getAccelKey = useragent.isMac + ? function() { return this.domEvent.metaKey; } + : function() { return this.domEvent.ctrlKey; }; + +}).call(MouseEvent.prototype); + +}); + +ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"], function(acequire, exports, module) { +"use strict"; + +var dom = acequire("../lib/dom"); +var event = acequire("../lib/event"); +var useragent = acequire("../lib/useragent"); + +var AUTOSCROLL_DELAY = 200; +var SCROLL_CURSOR_DELAY = 200; +var SCROLL_CURSOR_HYSTERESIS = 5; + +function DragdropHandler(mouseHandler) { + + var editor = mouseHandler.editor; + + var blankImage = dom.createElement("img"); + blankImage.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; + if (useragent.isOpera) + blankImage.style.cssText = "width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;"; + + var exports = ["dragWait", "dragWaitEnd", "startDrag", "dragReadyEnd", "onMouseDrag"]; + + exports.forEach(function(x) { + mouseHandler[x] = this[x]; + }, this); + editor.addEventListener("mousedown", this.onMouseDown.bind(mouseHandler)); + + + var mouseTarget = editor.container; + var dragSelectionMarker, x, y; + var timerId, range; + var dragCursor, counter = 0; + var dragOperation; + var isInternal; + var autoScrollStartTime; + var cursorMovedTime; + var cursorPointOnCaretMoved; + + this.onDragStart = function(e) { + if (this.cancelDrag || !mouseTarget.draggable) { + var self = this; + setTimeout(function(){ + self.startSelect(); + self.captureMouse(e); + }, 0); + return e.preventDefault(); + } + range = editor.getSelectionRange(); + + var dataTransfer = e.dataTransfer; + dataTransfer.effectAllowed = editor.getReadOnly() ? "copy" : "copyMove"; + if (useragent.isOpera) { + editor.container.appendChild(blankImage); + blankImage.scrollTop = 0; + } + dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0); + if (useragent.isOpera) { + editor.container.removeChild(blankImage); + } + dataTransfer.clearData(); + dataTransfer.setData("Text", editor.session.getTextRange()); + + isInternal = true; + this.setState("drag"); + }; + + this.onDragEnd = function(e) { + mouseTarget.draggable = false; + isInternal = false; + this.setState(null); + if (!editor.getReadOnly()) { + var dropEffect = e.dataTransfer.dropEffect; + if (!dragOperation && dropEffect == "move") + editor.session.remove(editor.getSelectionRange()); + editor.renderer.$cursorLayer.setBlinking(true); + } + this.editor.unsetStyle("ace_dragging"); + this.editor.renderer.setCursorStyle(""); + }; + + this.onDragEnter = function(e) { + if (editor.getReadOnly() || !canAccept(e.dataTransfer)) + return; + x = e.clientX; + y = e.clientY; + if (!dragSelectionMarker) + addDragMarker(); + counter++; + e.dataTransfer.dropEffect = dragOperation = getDropEffect(e); + return event.preventDefault(e); + }; + + this.onDragOver = function(e) { + if (editor.getReadOnly() || !canAccept(e.dataTransfer)) + return; + x = e.clientX; + y = e.clientY; + if (!dragSelectionMarker) { + addDragMarker(); + counter++; + } + if (onMouseMoveTimer !== null) + onMouseMoveTimer = null; + + e.dataTransfer.dropEffect = dragOperation = getDropEffect(e); + return event.preventDefault(e); + }; + + this.onDragLeave = function(e) { + counter--; + if (counter <= 0 && dragSelectionMarker) { + clearDragMarker(); + dragOperation = null; + return event.preventDefault(e); + } + }; + + this.onDrop = function(e) { + if (!dragCursor) + return; + var dataTransfer = e.dataTransfer; + if (isInternal) { + switch (dragOperation) { + case "move": + if (range.contains(dragCursor.row, dragCursor.column)) { + range = { + start: dragCursor, + end: dragCursor + }; + } else { + range = editor.moveText(range, dragCursor); + } + break; + case "copy": + range = editor.moveText(range, dragCursor, true); + break; + } + } else { + var dropData = dataTransfer.getData('Text'); + range = { + start: dragCursor, + end: editor.session.insert(dragCursor, dropData) + }; + editor.focus(); + dragOperation = null; + } + clearDragMarker(); + return event.preventDefault(e); + }; + + event.addListener(mouseTarget, "dragstart", this.onDragStart.bind(mouseHandler)); + event.addListener(mouseTarget, "dragend", this.onDragEnd.bind(mouseHandler)); + event.addListener(mouseTarget, "dragenter", this.onDragEnter.bind(mouseHandler)); + event.addListener(mouseTarget, "dragover", this.onDragOver.bind(mouseHandler)); + event.addListener(mouseTarget, "dragleave", this.onDragLeave.bind(mouseHandler)); + event.addListener(mouseTarget, "drop", this.onDrop.bind(mouseHandler)); + + function scrollCursorIntoView(cursor, prevCursor) { + var now = Date.now(); + var vMovement = !prevCursor || cursor.row != prevCursor.row; + var hMovement = !prevCursor || cursor.column != prevCursor.column; + if (!cursorMovedTime || vMovement || hMovement) { + editor.$blockScrolling += 1; + editor.moveCursorToPosition(cursor); + editor.$blockScrolling -= 1; + cursorMovedTime = now; + cursorPointOnCaretMoved = {x: x, y: y}; + } else { + var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y); + if (distance > SCROLL_CURSOR_HYSTERESIS) { + cursorMovedTime = null; + } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) { + editor.renderer.scrollCursorIntoView(); + cursorMovedTime = null; + } + } + } + + function autoScroll(cursor, prevCursor) { + var now = Date.now(); + var lineHeight = editor.renderer.layerConfig.lineHeight; + var characterWidth = editor.renderer.layerConfig.characterWidth; + var editorRect = editor.renderer.scroller.getBoundingClientRect(); + var offsets = { + x: { + left: x - editorRect.left, + right: editorRect.right - x + }, + y: { + top: y - editorRect.top, + bottom: editorRect.bottom - y + } + }; + var nearestXOffset = Math.min(offsets.x.left, offsets.x.right); + var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom); + var scrollCursor = {row: cursor.row, column: cursor.column}; + if (nearestXOffset / characterWidth <= 2) { + scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2); + } + if (nearestYOffset / lineHeight <= 1) { + scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1); + } + var vScroll = cursor.row != scrollCursor.row; + var hScroll = cursor.column != scrollCursor.column; + var vMovement = !prevCursor || cursor.row != prevCursor.row; + if (vScroll || (hScroll && !vMovement)) { + if (!autoScrollStartTime) + autoScrollStartTime = now; + else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY) + editor.renderer.scrollCursorIntoView(scrollCursor); + } else { + autoScrollStartTime = null; + } + } + + function onDragInterval() { + var prevCursor = dragCursor; + dragCursor = editor.renderer.screenToTextCoordinates(x, y); + scrollCursorIntoView(dragCursor, prevCursor); + autoScroll(dragCursor, prevCursor); + } + + function addDragMarker() { + range = editor.selection.toOrientedRange(); + dragSelectionMarker = editor.session.addMarker(range, "ace_selection", editor.getSelectionStyle()); + editor.clearSelection(); + if (editor.isFocused()) + editor.renderer.$cursorLayer.setBlinking(false); + clearInterval(timerId); + onDragInterval(); + timerId = setInterval(onDragInterval, 20); + counter = 0; + event.addListener(document, "mousemove", onMouseMove); + } + + function clearDragMarker() { + clearInterval(timerId); + editor.session.removeMarker(dragSelectionMarker); + dragSelectionMarker = null; + editor.$blockScrolling += 1; + editor.selection.fromOrientedRange(range); + editor.$blockScrolling -= 1; + if (editor.isFocused() && !isInternal) + editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly()); + range = null; + dragCursor = null; + counter = 0; + autoScrollStartTime = null; + cursorMovedTime = null; + event.removeListener(document, "mousemove", onMouseMove); + } + var onMouseMoveTimer = null; + function onMouseMove() { + if (onMouseMoveTimer == null) { + onMouseMoveTimer = setTimeout(function() { + if (onMouseMoveTimer != null && dragSelectionMarker) + clearDragMarker(); + }, 20); + } + } + + function canAccept(dataTransfer) { + var types = dataTransfer.types; + return !types || Array.prototype.some.call(types, function(type) { + return type == 'text/plain' || type == 'Text'; + }); + } + + function getDropEffect(e) { + var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized']; + var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized']; + + var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey; + var effectAllowed = "uninitialized"; + try { + effectAllowed = e.dataTransfer.effectAllowed.toLowerCase(); + } catch (e) {} + var dropEffect = "none"; + + if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0) + dropEffect = "copy"; + else if (moveAllowed.indexOf(effectAllowed) >= 0) + dropEffect = "move"; + else if (copyAllowed.indexOf(effectAllowed) >= 0) + dropEffect = "copy"; + + return dropEffect; + } +} + +(function() { + + this.dragWait = function() { + var interval = Date.now() - this.mousedownEvent.time; + if (interval > this.editor.getDragDelay()) + this.startDrag(); + }; + + this.dragWaitEnd = function() { + var target = this.editor.container; + target.draggable = false; + this.startSelect(this.mousedownEvent.getDocumentPosition()); + this.selectEnd(); + }; + + this.dragReadyEnd = function(e) { + this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()); + this.editor.unsetStyle("ace_dragging"); + this.editor.renderer.setCursorStyle(""); + this.dragWaitEnd(); + }; + + this.startDrag = function(){ + this.cancelDrag = false; + var editor = this.editor; + var target = editor.container; + target.draggable = true; + editor.renderer.$cursorLayer.setBlinking(false); + editor.setStyle("ace_dragging"); + var cursorStyle = useragent.isWin ? "default" : "move"; + editor.renderer.setCursorStyle(cursorStyle); + this.setState("dragReady"); + }; + + this.onMouseDrag = function(e) { + var target = this.editor.container; + if (useragent.isIE && this.state == "dragReady") { + var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); + if (distance > 3) + target.dragDrop(); + } + if (this.state === "dragWait") { + var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); + if (distance > 0) { + target.draggable = false; + this.startSelect(this.mousedownEvent.getDocumentPosition()); + } + } + }; + + this.onMouseDown = function(e) { + if (!this.$dragEnabled) + return; + this.mousedownEvent = e; + var editor = this.editor; + + var inSelection = e.inSelection(); + var button = e.getButton(); + var clickCount = e.domEvent.detail || 1; + if (clickCount === 1 && button === 0 && inSelection) { + if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey())) + return; + this.mousedownEvent.time = Date.now(); + var eventTarget = e.domEvent.target || e.domEvent.srcElement; + if ("unselectable" in eventTarget) + eventTarget.unselectable = "on"; + if (editor.getDragDelay()) { + if (useragent.isWebKit) { + this.cancelDrag = true; + var mouseTarget = editor.container; + mouseTarget.draggable = true; + } + this.setState("dragWait"); + } else { + this.startDrag(); + } + this.captureMouse(e, this.onMouseDrag.bind(this)); + e.defaultPrevented = true; + } + }; + +}).call(DragdropHandler.prototype); + + +function calcDistance(ax, ay, bx, by) { + return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2)); +} + +exports.DragdropHandler = DragdropHandler; + +}); + +ace.define("ace/lib/net",["require","exports","module","ace/lib/dom"], function(acequire, exports, module) { +"use strict"; +var dom = acequire("./dom"); + +exports.get = function (url, callback) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.onreadystatechange = function () { + if (xhr.readyState === 4) { + callback(xhr.responseText); + } + }; + xhr.send(null); +}; + +exports.loadScript = function(path, callback) { + var head = dom.getDocumentHead(); + var s = document.createElement('script'); + + s.src = path; + head.appendChild(s); + + s.onload = s.onreadystatechange = function(_, isAbort) { + if (isAbort || !s.readyState || s.readyState == "loaded" || s.readyState == "complete") { + s = s.onload = s.onreadystatechange = null; + if (!isAbort) + callback(); + } + }; +}; +exports.qualifyURL = function(url) { + var a = document.createElement('a'); + a.href = url; + return a.href; +} + +}); + +ace.define("ace/lib/event_emitter",["require","exports","module"], function(acequire, exports, module) { +"use strict"; + +var EventEmitter = {}; +var stopPropagation = function() { this.propagationStopped = true; }; +var preventDefault = function() { this.defaultPrevented = true; }; + +EventEmitter._emit = +EventEmitter._dispatchEvent = function(eventName, e) { + this._eventRegistry || (this._eventRegistry = {}); + this._defaultHandlers || (this._defaultHandlers = {}); + + var listeners = this._eventRegistry[eventName] || []; + var defaultHandler = this._defaultHandlers[eventName]; + if (!listeners.length && !defaultHandler) + return; + + if (typeof e != "object" || !e) + e = {}; + + if (!e.type) + e.type = eventName; + if (!e.stopPropagation) + e.stopPropagation = stopPropagation; + if (!e.preventDefault) + e.preventDefault = preventDefault; + + listeners = listeners.slice(); + for (var i=0; i 1) + base = parts[parts.length - 2]; + var path = options[component + "Path"]; + if (path == null) { + path = options.basePath; + } else if (sep == "/") { + component = sep = ""; + } + if (path && path.slice(-1) != "/") + path += "/"; + return path + component + sep + base + this.get("suffix"); +}; + +exports.setModuleUrl = function(name, subst) { + return options.$moduleUrls[name] = subst; +}; + +exports.$loading = {}; +exports.loadModule = function(moduleName, onLoad) { + var module, moduleType; + if (Array.isArray(moduleName)) { + moduleType = moduleName[0]; + moduleName = moduleName[1]; + } + + try { + module = acequire(moduleName); + } catch (e) {} + if (module && !exports.$loading[moduleName]) + return onLoad && onLoad(module); + + if (!exports.$loading[moduleName]) + exports.$loading[moduleName] = []; + + exports.$loading[moduleName].push(onLoad); + + if (exports.$loading[moduleName].length > 1) + return; + + var afterLoad = function() { + acequire([moduleName], function(module) { + exports._emit("load.module", {name: moduleName, module: module}); + var listeners = exports.$loading[moduleName]; + exports.$loading[moduleName] = null; + listeners.forEach(function(onLoad) { + onLoad && onLoad(module); + }); + }); + }; + + if (!exports.get("packaged")) + return afterLoad(); + net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad); +}; +init(true);function init(packaged) { + + if (!global || !global.document) + return; + + options.packaged = packaged || acequire.packaged || module.packaged || (global.define && define.packaged); + + var scriptOptions = {}; + var scriptUrl = ""; + var currentScript = (document.currentScript || document._currentScript ); // native or polyfill + var currentDocument = currentScript && currentScript.ownerDocument || document; + + var scripts = currentDocument.getElementsByTagName("script"); + for (var i=0; i [" + this.end.row + "/" + this.end.column + "]"); + }; + + this.contains = function(row, column) { + return this.compare(row, column) == 0; + }; + this.compareRange = function(range) { + var cmp, + end = range.end, + start = range.start; + + cmp = this.compare(end.row, end.column); + if (cmp == 1) { + cmp = this.compare(start.row, start.column); + if (cmp == 1) { + return 2; + } else if (cmp == 0) { + return 1; + } else { + return 0; + } + } else if (cmp == -1) { + return -2; + } else { + cmp = this.compare(start.row, start.column); + if (cmp == -1) { + return -1; + } else if (cmp == 1) { + return 42; + } else { + return 0; + } + } + }; + this.comparePoint = function(p) { + return this.compare(p.row, p.column); + }; + this.containsRange = function(range) { + return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; + }; + this.intersects = function(range) { + var cmp = this.compareRange(range); + return (cmp == -1 || cmp == 0 || cmp == 1); + }; + this.isEnd = function(row, column) { + return this.end.row == row && this.end.column == column; + }; + this.isStart = function(row, column) { + return this.start.row == row && this.start.column == column; + }; + this.setStart = function(row, column) { + if (typeof row == "object") { + this.start.column = row.column; + this.start.row = row.row; + } else { + this.start.row = row; + this.start.column = column; + } + }; + this.setEnd = function(row, column) { + if (typeof row == "object") { + this.end.column = row.column; + this.end.row = row.row; + } else { + this.end.row = row; + this.end.column = column; + } + }; + this.inside = function(row, column) { + if (this.compare(row, column) == 0) { + if (this.isEnd(row, column) || this.isStart(row, column)) { + return false; + } else { + return true; + } + } + return false; + }; + this.insideStart = function(row, column) { + if (this.compare(row, column) == 0) { + if (this.isEnd(row, column)) { + return false; + } else { + return true; + } + } + return false; + }; + this.insideEnd = function(row, column) { + if (this.compare(row, column) == 0) { + if (this.isStart(row, column)) { + return false; + } else { + return true; + } + } + return false; + }; + this.compare = function(row, column) { + if (!this.isMultiLine()) { + if (row === this.start.row) { + return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0); + } + } + + if (row < this.start.row) + return -1; + + if (row > this.end.row) + return 1; + + if (this.start.row === row) + return column >= this.start.column ? 0 : -1; + + if (this.end.row === row) + return column <= this.end.column ? 0 : 1; + + return 0; + }; + this.compareStart = function(row, column) { + if (this.start.row == row && this.start.column == column) { + return -1; + } else { + return this.compare(row, column); + } + }; + this.compareEnd = function(row, column) { + if (this.end.row == row && this.end.column == column) { + return 1; + } else { + return this.compare(row, column); + } + }; + this.compareInside = function(row, column) { + if (this.end.row == row && this.end.column == column) { + return 1; + } else if (this.start.row == row && this.start.column == column) { + return -1; + } else { + return this.compare(row, column); + } + }; + this.clipRows = function(firstRow, lastRow) { + if (this.end.row > lastRow) + var end = {row: lastRow + 1, column: 0}; + else if (this.end.row < firstRow) + var end = {row: firstRow, column: 0}; + + if (this.start.row > lastRow) + var start = {row: lastRow + 1, column: 0}; + else if (this.start.row < firstRow) + var start = {row: firstRow, column: 0}; + + return Range.fromPoints(start || this.start, end || this.end); + }; + this.extend = function(row, column) { + var cmp = this.compare(row, column); + + if (cmp == 0) + return this; + else if (cmp == -1) + var start = {row: row, column: column}; + else + var end = {row: row, column: column}; + + return Range.fromPoints(start || this.start, end || this.end); + }; + + this.isEmpty = function() { + return (this.start.row === this.end.row && this.start.column === this.end.column); + }; + this.isMultiLine = function() { + return (this.start.row !== this.end.row); + }; + this.clone = function() { + return Range.fromPoints(this.start, this.end); + }; + this.collapseRows = function() { + if (this.end.column == 0) + return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0) + else + return new Range(this.start.row, 0, this.end.row, 0) + }; + this.toScreenRange = function(session) { + var screenPosStart = session.documentToScreenPosition(this.start); + var screenPosEnd = session.documentToScreenPosition(this.end); + + return new Range( + screenPosStart.row, screenPosStart.column, + screenPosEnd.row, screenPosEnd.column + ); + }; + this.moveBy = function(row, column) { + this.start.row += row; + this.start.column += column; + this.end.row += row; + this.end.column += column; + }; + +}).call(Range.prototype); +Range.fromPoints = function(start, end) { + return new Range(start.row, start.column, end.row, end.column); +}; +Range.comparePoints = comparePoints; + +Range.comparePoints = function(p1, p2) { + return p1.row - p2.row || p1.column - p2.column; +}; + + +exports.Range = Range; +}); + +ace.define("ace/selection",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/range"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("./lib/oop"); +var lang = acequire("./lib/lang"); +var EventEmitter = acequire("./lib/event_emitter").EventEmitter; +var Range = acequire("./range").Range; +var Selection = function(session) { + this.session = session; + this.doc = session.getDocument(); + + this.clearSelection(); + this.lead = this.selectionLead = this.doc.createAnchor(0, 0); + this.anchor = this.selectionAnchor = this.doc.createAnchor(0, 0); + + var self = this; + this.lead.on("change", function(e) { + self._emit("changeCursor"); + if (!self.$isEmpty) + self._emit("changeSelection"); + if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column) + self.$desiredColumn = null; + }); + + this.selectionAnchor.on("change", function() { + if (!self.$isEmpty) + self._emit("changeSelection"); + }); +}; + +(function() { + + oop.implement(this, EventEmitter); + this.isEmpty = function() { + return (this.$isEmpty || ( + this.anchor.row == this.lead.row && + this.anchor.column == this.lead.column + )); + }; + this.isMultiLine = function() { + if (this.isEmpty()) { + return false; + } + + return this.getRange().isMultiLine(); + }; + this.getCursor = function() { + return this.lead.getPosition(); + }; + this.setSelectionAnchor = function(row, column) { + this.anchor.setPosition(row, column); + + if (this.$isEmpty) { + this.$isEmpty = false; + this._emit("changeSelection"); + } + }; + this.getSelectionAnchor = function() { + if (this.$isEmpty) + return this.getSelectionLead(); + else + return this.anchor.getPosition(); + }; + this.getSelectionLead = function() { + return this.lead.getPosition(); + }; + this.shiftSelection = function(columns) { + if (this.$isEmpty) { + this.moveCursorTo(this.lead.row, this.lead.column + columns); + return; + } + + var anchor = this.getSelectionAnchor(); + var lead = this.getSelectionLead(); + + var isBackwards = this.isBackwards(); + + if (!isBackwards || anchor.column !== 0) + this.setSelectionAnchor(anchor.row, anchor.column + columns); + + if (isBackwards || lead.column !== 0) { + this.$moveSelection(function() { + this.moveCursorTo(lead.row, lead.column + columns); + }); + } + }; + this.isBackwards = function() { + var anchor = this.anchor; + var lead = this.lead; + return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column)); + }; + this.getRange = function() { + var anchor = this.anchor; + var lead = this.lead; + + if (this.isEmpty()) + return Range.fromPoints(lead, lead); + + if (this.isBackwards()) { + return Range.fromPoints(lead, anchor); + } + else { + return Range.fromPoints(anchor, lead); + } + }; + this.clearSelection = function() { + if (!this.$isEmpty) { + this.$isEmpty = true; + this._emit("changeSelection"); + } + }; + this.selectAll = function() { + var lastRow = this.doc.getLength() - 1; + this.setSelectionAnchor(0, 0); + this.moveCursorTo(lastRow, this.doc.getLine(lastRow).length); + }; + this.setRange = + this.setSelectionRange = function(range, reverse) { + if (reverse) { + this.setSelectionAnchor(range.end.row, range.end.column); + this.selectTo(range.start.row, range.start.column); + } else { + this.setSelectionAnchor(range.start.row, range.start.column); + this.selectTo(range.end.row, range.end.column); + } + if (this.getRange().isEmpty()) + this.$isEmpty = true; + this.$desiredColumn = null; + }; + + this.$moveSelection = function(mover) { + var lead = this.lead; + if (this.$isEmpty) + this.setSelectionAnchor(lead.row, lead.column); + + mover.call(this); + }; + this.selectTo = function(row, column) { + this.$moveSelection(function() { + this.moveCursorTo(row, column); + }); + }; + this.selectToPosition = function(pos) { + this.$moveSelection(function() { + this.moveCursorToPosition(pos); + }); + }; + this.moveTo = function(row, column) { + this.clearSelection(); + this.moveCursorTo(row, column); + }; + this.moveToPosition = function(pos) { + this.clearSelection(); + this.moveCursorToPosition(pos); + }; + this.selectUp = function() { + this.$moveSelection(this.moveCursorUp); + }; + this.selectDown = function() { + this.$moveSelection(this.moveCursorDown); + }; + this.selectRight = function() { + this.$moveSelection(this.moveCursorRight); + }; + this.selectLeft = function() { + this.$moveSelection(this.moveCursorLeft); + }; + this.selectLineStart = function() { + this.$moveSelection(this.moveCursorLineStart); + }; + this.selectLineEnd = function() { + this.$moveSelection(this.moveCursorLineEnd); + }; + this.selectFileEnd = function() { + this.$moveSelection(this.moveCursorFileEnd); + }; + this.selectFileStart = function() { + this.$moveSelection(this.moveCursorFileStart); + }; + this.selectWordRight = function() { + this.$moveSelection(this.moveCursorWordRight); + }; + this.selectWordLeft = function() { + this.$moveSelection(this.moveCursorWordLeft); + }; + this.getWordRange = function(row, column) { + if (typeof column == "undefined") { + var cursor = row || this.lead; + row = cursor.row; + column = cursor.column; + } + return this.session.getWordRange(row, column); + }; + this.selectWord = function() { + this.setSelectionRange(this.getWordRange()); + }; + this.selectAWord = function() { + var cursor = this.getCursor(); + var range = this.session.getAWordRange(cursor.row, cursor.column); + this.setSelectionRange(range); + }; + + this.getLineRange = function(row, excludeLastChar) { + var rowStart = typeof row == "number" ? row : this.lead.row; + var rowEnd; + + var foldLine = this.session.getFoldLine(rowStart); + if (foldLine) { + rowStart = foldLine.start.row; + rowEnd = foldLine.end.row; + } else { + rowEnd = rowStart; + } + if (excludeLastChar === true) + return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length); + else + return new Range(rowStart, 0, rowEnd + 1, 0); + }; + this.selectLine = function() { + this.setSelectionRange(this.getLineRange()); + }; + this.moveCursorUp = function() { + this.moveCursorBy(-1, 0); + }; + this.moveCursorDown = function() { + this.moveCursorBy(1, 0); + }; + this.moveCursorLeft = function() { + var cursor = this.lead.getPosition(), + fold; + + if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) { + this.moveCursorTo(fold.start.row, fold.start.column); + } else if (cursor.column === 0) { + if (cursor.row > 0) { + this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length); + } + } + else { + var tabSize = this.session.getTabSize(); + if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column-tabSize, cursor.column).split(" ").length-1 == tabSize) + this.moveCursorBy(0, -tabSize); + else + this.moveCursorBy(0, -1); + } + }; + this.moveCursorRight = function() { + var cursor = this.lead.getPosition(), + fold; + if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) { + this.moveCursorTo(fold.end.row, fold.end.column); + } + else if (this.lead.column == this.doc.getLine(this.lead.row).length) { + if (this.lead.row < this.doc.getLength() - 1) { + this.moveCursorTo(this.lead.row + 1, 0); + } + } + else { + var tabSize = this.session.getTabSize(); + var cursor = this.lead; + if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column, cursor.column+tabSize).split(" ").length-1 == tabSize) + this.moveCursorBy(0, tabSize); + else + this.moveCursorBy(0, 1); + } + }; + this.moveCursorLineStart = function() { + var row = this.lead.row; + var column = this.lead.column; + var screenRow = this.session.documentToScreenRow(row, column); + var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0); + var beforeCursor = this.session.getDisplayLine( + row, null, firstColumnPosition.row, + firstColumnPosition.column + ); + + var leadingSpace = beforeCursor.match(/^\s*/); + if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart) + firstColumnPosition.column += leadingSpace[0].length; + this.moveCursorToPosition(firstColumnPosition); + }; + this.moveCursorLineEnd = function() { + var lead = this.lead; + var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column); + if (this.lead.column == lineEnd.column) { + var line = this.session.getLine(lineEnd.row); + if (lineEnd.column == line.length) { + var textEnd = line.search(/\s+$/); + if (textEnd > 0) + lineEnd.column = textEnd; + } + } + + this.moveCursorTo(lineEnd.row, lineEnd.column); + }; + this.moveCursorFileEnd = function() { + var row = this.doc.getLength() - 1; + var column = this.doc.getLine(row).length; + this.moveCursorTo(row, column); + }; + this.moveCursorFileStart = function() { + this.moveCursorTo(0, 0); + }; + this.moveCursorLongWordRight = function() { + var row = this.lead.row; + var column = this.lead.column; + var line = this.doc.getLine(row); + var rightOfCursor = line.substring(column); + + var match; + this.session.nonTokenRe.lastIndex = 0; + this.session.tokenRe.lastIndex = 0; + var fold = this.session.getFoldAt(row, column, 1); + if (fold) { + this.moveCursorTo(fold.end.row, fold.end.column); + return; + } + if (match = this.session.nonTokenRe.exec(rightOfCursor)) { + column += this.session.nonTokenRe.lastIndex; + this.session.nonTokenRe.lastIndex = 0; + rightOfCursor = line.substring(column); + } + if (column >= line.length) { + this.moveCursorTo(row, line.length); + this.moveCursorRight(); + if (row < this.doc.getLength() - 1) + this.moveCursorWordRight(); + return; + } + if (match = this.session.tokenRe.exec(rightOfCursor)) { + column += this.session.tokenRe.lastIndex; + this.session.tokenRe.lastIndex = 0; + } + + this.moveCursorTo(row, column); + }; + this.moveCursorLongWordLeft = function() { + var row = this.lead.row; + var column = this.lead.column; + var fold; + if (fold = this.session.getFoldAt(row, column, -1)) { + this.moveCursorTo(fold.start.row, fold.start.column); + return; + } + + var str = this.session.getFoldStringAt(row, column, -1); + if (str == null) { + str = this.doc.getLine(row).substring(0, column); + } + + var leftOfCursor = lang.stringReverse(str); + var match; + this.session.nonTokenRe.lastIndex = 0; + this.session.tokenRe.lastIndex = 0; + if (match = this.session.nonTokenRe.exec(leftOfCursor)) { + column -= this.session.nonTokenRe.lastIndex; + leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex); + this.session.nonTokenRe.lastIndex = 0; + } + if (column <= 0) { + this.moveCursorTo(row, 0); + this.moveCursorLeft(); + if (row > 0) + this.moveCursorWordLeft(); + return; + } + if (match = this.session.tokenRe.exec(leftOfCursor)) { + column -= this.session.tokenRe.lastIndex; + this.session.tokenRe.lastIndex = 0; + } + + this.moveCursorTo(row, column); + }; + + this.$shortWordEndIndex = function(rightOfCursor) { + var match, index = 0, ch; + var whitespaceRe = /\s/; + var tokenRe = this.session.tokenRe; + + tokenRe.lastIndex = 0; + if (match = this.session.tokenRe.exec(rightOfCursor)) { + index = this.session.tokenRe.lastIndex; + } else { + while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) + index ++; + + if (index < 1) { + tokenRe.lastIndex = 0; + while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) { + tokenRe.lastIndex = 0; + index ++; + if (whitespaceRe.test(ch)) { + if (index > 2) { + index--; + break; + } else { + while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) + index ++; + if (index > 2) + break; + } + } + } + } + } + tokenRe.lastIndex = 0; + + return index; + }; + + this.moveCursorShortWordRight = function() { + var row = this.lead.row; + var column = this.lead.column; + var line = this.doc.getLine(row); + var rightOfCursor = line.substring(column); + + var fold = this.session.getFoldAt(row, column, 1); + if (fold) + return this.moveCursorTo(fold.end.row, fold.end.column); + + if (column == line.length) { + var l = this.doc.getLength(); + do { + row++; + rightOfCursor = this.doc.getLine(row); + } while (row < l && /^\s*$/.test(rightOfCursor)); + + if (!/^\s+/.test(rightOfCursor)) + rightOfCursor = ""; + column = 0; + } + + var index = this.$shortWordEndIndex(rightOfCursor); + + this.moveCursorTo(row, column + index); + }; + + this.moveCursorShortWordLeft = function() { + var row = this.lead.row; + var column = this.lead.column; + + var fold; + if (fold = this.session.getFoldAt(row, column, -1)) + return this.moveCursorTo(fold.start.row, fold.start.column); + + var line = this.session.getLine(row).substring(0, column); + if (column === 0) { + do { + row--; + line = this.doc.getLine(row); + } while (row > 0 && /^\s*$/.test(line)); + + column = line.length; + if (!/\s+$/.test(line)) + line = ""; + } + + var leftOfCursor = lang.stringReverse(line); + var index = this.$shortWordEndIndex(leftOfCursor); + + return this.moveCursorTo(row, column - index); + }; + + this.moveCursorWordRight = function() { + if (this.session.$selectLongWords) + this.moveCursorLongWordRight(); + else + this.moveCursorShortWordRight(); + }; + + this.moveCursorWordLeft = function() { + if (this.session.$selectLongWords) + this.moveCursorLongWordLeft(); + else + this.moveCursorShortWordLeft(); + }; + this.moveCursorBy = function(rows, chars) { + var screenPos = this.session.documentToScreenPosition( + this.lead.row, + this.lead.column + ); + + if (chars === 0) { + if (this.$desiredColumn) + screenPos.column = this.$desiredColumn; + else + this.$desiredColumn = screenPos.column; + } + + var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column); + + if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) { + if (this.session.lineWidgets && this.session.lineWidgets[docPos.row]) { + if (docPos.row > 0 || rows > 0) + docPos.row++; + } + } + this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0); + }; + this.moveCursorToPosition = function(position) { + this.moveCursorTo(position.row, position.column); + }; + this.moveCursorTo = function(row, column, keepDesiredColumn) { + var fold = this.session.getFoldAt(row, column, 1); + if (fold) { + row = fold.start.row; + column = fold.start.column; + } + + this.$keepDesiredColumnOnChange = true; + this.lead.setPosition(row, column); + this.$keepDesiredColumnOnChange = false; + + if (!keepDesiredColumn) + this.$desiredColumn = null; + }; + this.moveCursorToScreen = function(row, column, keepDesiredColumn) { + var pos = this.session.screenToDocumentPosition(row, column); + this.moveCursorTo(pos.row, pos.column, keepDesiredColumn); + }; + this.detach = function() { + this.lead.detach(); + this.anchor.detach(); + this.session = this.doc = null; + }; + + this.fromOrientedRange = function(range) { + this.setSelectionRange(range, range.cursor == range.start); + this.$desiredColumn = range.desiredColumn || this.$desiredColumn; + }; + + this.toOrientedRange = function(range) { + var r = this.getRange(); + if (range) { + range.start.column = r.start.column; + range.start.row = r.start.row; + range.end.column = r.end.column; + range.end.row = r.end.row; + } else { + range = r; + } + + range.cursor = this.isBackwards() ? range.start : range.end; + range.desiredColumn = this.$desiredColumn; + return range; + }; + this.getRangeOfMovements = function(func) { + var start = this.getCursor(); + try { + func(this); + var end = this.getCursor(); + return Range.fromPoints(start,end); + } catch(e) { + return Range.fromPoints(start,start); + } finally { + this.moveCursorToPosition(start); + } + }; + + this.toJSON = function() { + if (this.rangeCount) { + var data = this.ranges.map(function(r) { + var r1 = r.clone(); + r1.isBackwards = r.cursor == r.start; + return r1; + }); + } else { + var data = this.getRange(); + data.isBackwards = this.isBackwards(); + } + return data; + }; + + this.fromJSON = function(data) { + if (data.start == undefined) { + if (this.rangeList) { + this.toSingleRange(data[0]); + for (var i = data.length; i--; ) { + var r = Range.fromPoints(data[i].start, data[i].end); + if (data[i].isBackwards) + r.cursor = r.start; + this.addRange(r, true); + } + return; + } else + data = data[0]; + } + if (this.rangeList) + this.toSingleRange(data); + this.setSelectionRange(data, data.isBackwards); + }; + + this.isEqual = function(data) { + if ((data.length || this.rangeCount) && data.length != this.rangeCount) + return false; + if (!data.length || !this.ranges) + return this.getRange().isEqual(data); + + for (var i = this.ranges.length; i--; ) { + if (!this.ranges[i].isEqual(data[i])) + return false; + } + return true; + }; + +}).call(Selection.prototype); + +exports.Selection = Selection; +}); + +ace.define("ace/tokenizer",["require","exports","module","ace/config"], function(acequire, exports, module) { +"use strict"; + +var config = acequire("./config"); +var MAX_TOKEN_COUNT = 2000; +var Tokenizer = function(rules) { + this.states = rules; + + this.regExps = {}; + this.matchMappings = {}; + for (var key in this.states) { + var state = this.states[key]; + var ruleRegExps = []; + var matchTotal = 0; + var mapping = this.matchMappings[key] = {defaultToken: "text"}; + var flag = "g"; + + var splitterRurles = []; + for (var i = 0; i < state.length; i++) { + var rule = state[i]; + if (rule.defaultToken) + mapping.defaultToken = rule.defaultToken; + if (rule.caseInsensitive) + flag = "gi"; + if (rule.regex == null) + continue; + + if (rule.regex instanceof RegExp) + rule.regex = rule.regex.toString().slice(1, -1); + var adjustedregex = rule.regex; + var matchcount = new RegExp("(?:(" + adjustedregex + ")|(.))").exec("a").length - 2; + if (Array.isArray(rule.token)) { + if (rule.token.length == 1 || matchcount == 1) { + rule.token = rule.token[0]; + } else if (matchcount - 1 != rule.token.length) { + this.reportError("number of classes and regexp groups doesn't match", { + rule: rule, + groupCount: matchcount - 1 + }); + rule.token = rule.token[0]; + } else { + rule.tokenArray = rule.token; + rule.token = null; + rule.onMatch = this.$arrayTokens; + } + } else if (typeof rule.token == "function" && !rule.onMatch) { + if (matchcount > 1) + rule.onMatch = this.$applyToken; + else + rule.onMatch = rule.token; + } + + if (matchcount > 1) { + if (/\\\d/.test(rule.regex)) { + adjustedregex = rule.regex.replace(/\\([0-9]+)/g, function(match, digit) { + return "\\" + (parseInt(digit, 10) + matchTotal + 1); + }); + } else { + matchcount = 1; + adjustedregex = this.removeCapturingGroups(rule.regex); + } + if (!rule.splitRegex && typeof rule.token != "string") + splitterRurles.push(rule); // flag will be known only at the very end + } + + mapping[matchTotal] = i; + matchTotal += matchcount; + + ruleRegExps.push(adjustedregex); + if (!rule.onMatch) + rule.onMatch = null; + } + + if (!ruleRegExps.length) { + mapping[0] = 0; + ruleRegExps.push("$"); + } + + splitterRurles.forEach(function(rule) { + rule.splitRegex = this.createSplitterRegexp(rule.regex, flag); + }, this); + + this.regExps[key] = new RegExp("(" + ruleRegExps.join(")|(") + ")|($)", flag); + } +}; + +(function() { + this.$setMaxTokenCount = function(m) { + MAX_TOKEN_COUNT = m | 0; + }; + + this.$applyToken = function(str) { + var values = this.splitRegex.exec(str).slice(1); + var types = this.token.apply(this, values); + if (typeof types === "string") + return [{type: types, value: str}]; + + var tokens = []; + for (var i = 0, l = types.length; i < l; i++) { + if (values[i]) + tokens[tokens.length] = { + type: types[i], + value: values[i] + }; + } + return tokens; + }; + + this.$arrayTokens = function(str) { + if (!str) + return []; + var values = this.splitRegex.exec(str); + if (!values) + return "text"; + var tokens = []; + var types = this.tokenArray; + for (var i = 0, l = types.length; i < l; i++) { + if (values[i + 1]) + tokens[tokens.length] = { + type: types[i], + value: values[i + 1] + }; + } + return tokens; + }; + + this.removeCapturingGroups = function(src) { + var r = src.replace( + /\[(?:\\.|[^\]])*?\]|\\.|\(\?[:=!]|(\()/g, + function(x, y) {return y ? "(?:" : x;} + ); + return r; + }; + + this.createSplitterRegexp = function(src, flag) { + if (src.indexOf("(?=") != -1) { + var stack = 0; + var inChClass = false; + var lastCapture = {}; + src.replace(/(\\.)|(\((?:\?[=!])?)|(\))|([\[\]])/g, function( + m, esc, parenOpen, parenClose, square, index + ) { + if (inChClass) { + inChClass = square != "]"; + } else if (square) { + inChClass = true; + } else if (parenClose) { + if (stack == lastCapture.stack) { + lastCapture.end = index+1; + lastCapture.stack = -1; + } + stack--; + } else if (parenOpen) { + stack++; + if (parenOpen.length != 1) { + lastCapture.stack = stack + lastCapture.start = index; + } + } + return m; + }); + + if (lastCapture.end != null && /^\)*$/.test(src.substr(lastCapture.end))) + src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end); + } + if (src.charAt(0) != "^") src = "^" + src; + if (src.charAt(src.length - 1) != "$") src += "$"; + + return new RegExp(src, (flag||"").replace("g", "")); + }; + this.getLineTokens = function(line, startState) { + if (startState && typeof startState != "string") { + var stack = startState.slice(0); + startState = stack[0]; + if (startState === "#tmp") { + stack.shift() + startState = stack.shift() + } + } else + var stack = []; + + var currentState = startState || "start"; + var state = this.states[currentState]; + if (!state) { + currentState = "start"; + state = this.states[currentState]; + } + var mapping = this.matchMappings[currentState]; + var re = this.regExps[currentState]; + re.lastIndex = 0; + + var match, tokens = []; + var lastIndex = 0; + var matchAttempts = 0; + + var token = {type: null, value: ""}; + + while (match = re.exec(line)) { + var type = mapping.defaultToken; + var rule = null; + var value = match[0]; + var index = re.lastIndex; + + if (index - value.length > lastIndex) { + var skipped = line.substring(lastIndex, index - value.length); + if (token.type == type) { + token.value += skipped; + } else { + if (token.type) + tokens.push(token); + token = {type: type, value: skipped}; + } + } + + for (var i = 0; i < match.length-2; i++) { + if (match[i + 1] === undefined) + continue; + + rule = state[mapping[i]]; + + if (rule.onMatch) + type = rule.onMatch(value, currentState, stack); + else + type = rule.token; + + if (rule.next) { + if (typeof rule.next == "string") { + currentState = rule.next; + } else { + currentState = rule.next(currentState, stack); + } + + state = this.states[currentState]; + if (!state) { + this.reportError("state doesn't exist", currentState); + currentState = "start"; + state = this.states[currentState]; + } + mapping = this.matchMappings[currentState]; + lastIndex = index; + re = this.regExps[currentState]; + re.lastIndex = index; + } + break; + } + + if (value) { + if (typeof type === "string") { + if ((!rule || rule.merge !== false) && token.type === type) { + token.value += value; + } else { + if (token.type) + tokens.push(token); + token = {type: type, value: value}; + } + } else if (type) { + if (token.type) + tokens.push(token); + token = {type: null, value: ""}; + for (var i = 0; i < type.length; i++) + tokens.push(type[i]); + } + } + + if (lastIndex == line.length) + break; + + lastIndex = index; + + if (matchAttempts++ > MAX_TOKEN_COUNT) { + if (matchAttempts > 2 * line.length) { + this.reportError("infinite loop with in ace tokenizer", { + startState: startState, + line: line + }); + } + while (lastIndex < line.length) { + if (token.type) + tokens.push(token); + token = { + value: line.substring(lastIndex, lastIndex += 2000), + type: "overflow" + }; + } + currentState = "start"; + stack = []; + break; + } + } + + if (token.type) + tokens.push(token); + + if (stack.length > 1) { + if (stack[0] !== currentState) + stack.unshift("#tmp", currentState); + } + return { + tokens : tokens, + state : stack.length ? stack : currentState + }; + }; + + this.reportError = config.reportError; + +}).call(Tokenizer.prototype); + +exports.Tokenizer = Tokenizer; +}); + +ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"], function(acequire, exports, module) { +"use strict"; + +var lang = acequire("../lib/lang"); + +var TextHighlightRules = function() { + + this.$rules = { + "start" : [{ + token : "empty_line", + regex : '^$' + }, { + defaultToken : "text" + }] + }; +}; + +(function() { + + this.addRules = function(rules, prefix) { + if (!prefix) { + for (var key in rules) + this.$rules[key] = rules[key]; + return; + } + for (var key in rules) { + var state = rules[key]; + for (var i = 0; i < state.length; i++) { + var rule = state[i]; + if (rule.next || rule.onMatch) { + if (typeof rule.next == "string") { + if (rule.next.indexOf(prefix) !== 0) + rule.next = prefix + rule.next; + } + if (rule.nextState && rule.nextState.indexOf(prefix) !== 0) + rule.nextState = prefix + rule.nextState; + } + } + this.$rules[prefix + key] = state; + } + }; + + this.getRules = function() { + return this.$rules; + }; + + this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) { + var embedRules = typeof HighlightRules == "function" + ? new HighlightRules().getRules() + : HighlightRules; + if (states) { + for (var i = 0; i < states.length; i++) + states[i] = prefix + states[i]; + } else { + states = []; + for (var key in embedRules) + states.push(prefix + key); + } + + this.addRules(embedRules, prefix); + + if (escapeRules) { + var addRules = Array.prototype[append ? "push" : "unshift"]; + for (var i = 0; i < states.length; i++) + addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules)); + } + + if (!this.$embeds) + this.$embeds = []; + this.$embeds.push(prefix); + }; + + this.getEmbeds = function() { + return this.$embeds; + }; + + var pushState = function(currentState, stack) { + if (currentState != "start" || stack.length) + stack.unshift(this.nextState, currentState); + return this.nextState; + }; + var popState = function(currentState, stack) { + stack.shift(); + return stack.shift() || "start"; + }; + + this.normalizeRules = function() { + var id = 0; + var rules = this.$rules; + function processState(key) { + var state = rules[key]; + state.processed = true; + for (var i = 0; i < state.length; i++) { + var rule = state[i]; + if (!rule.regex && rule.start) { + rule.regex = rule.start; + if (!rule.next) + rule.next = []; + rule.next.push({ + defaultToken: rule.token + }, { + token: rule.token + ".end", + regex: rule.end || rule.start, + next: "pop" + }); + rule.token = rule.token + ".start"; + rule.push = true; + } + var next = rule.next || rule.push; + if (next && Array.isArray(next)) { + var stateName = rule.stateName; + if (!stateName) { + stateName = rule.token; + if (typeof stateName != "string") + stateName = stateName[0] || ""; + if (rules[stateName]) + stateName += id++; + } + rules[stateName] = next; + rule.next = stateName; + processState(stateName); + } else if (next == "pop") { + rule.next = popState; + } + + if (rule.push) { + rule.nextState = rule.next || rule.push; + rule.next = pushState; + delete rule.push; + } + + if (rule.rules) { + for (var r in rule.rules) { + if (rules[r]) { + if (rules[r].push) + rules[r].push.apply(rules[r], rule.rules[r]); + } else { + rules[r] = rule.rules[r]; + } + } + } + if (rule.include || typeof rule == "string") { + var includeName = rule.include || rule; + var toInsert = rules[includeName]; + } else if (Array.isArray(rule)) + toInsert = rule; + + if (toInsert) { + var args = [i, 1].concat(toInsert); + if (rule.noEscape) + args = args.filter(function(x) {return !x.next;}); + state.splice.apply(state, args); + i--; + toInsert = null; + } + + if (rule.keywordMap) { + rule.token = this.createKeywordMapper( + rule.keywordMap, rule.defaultToken || "text", rule.caseInsensitive + ); + delete rule.defaultToken; + } + } + } + Object.keys(rules).forEach(processState, this); + }; + + this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) { + var keywords = Object.create(null); + Object.keys(map).forEach(function(className) { + var a = map[className]; + if (ignoreCase) + a = a.toLowerCase(); + var list = a.split(splitChar || "|"); + for (var i = list.length; i--; ) + keywords[list[i]] = className; + }); + if (Object.getPrototypeOf(keywords)) { + keywords.__proto__ = null; + } + this.$keywordList = Object.keys(keywords); + map = null; + return ignoreCase + ? function(value) {return keywords[value.toLowerCase()] || defaultToken } + : function(value) {return keywords[value] || defaultToken }; + }; + + this.getKeywords = function() { + return this.$keywords; + }; + +}).call(TextHighlightRules.prototype); + +exports.TextHighlightRules = TextHighlightRules; +}); + +ace.define("ace/mode/behaviour",["require","exports","module"], function(acequire, exports, module) { +"use strict"; + +var Behaviour = function() { + this.$behaviours = {}; +}; + +(function () { + + this.add = function (name, action, callback) { + switch (undefined) { + case this.$behaviours: + this.$behaviours = {}; + case this.$behaviours[name]: + this.$behaviours[name] = {}; + } + this.$behaviours[name][action] = callback; + } + + this.addBehaviours = function (behaviours) { + for (var key in behaviours) { + for (var action in behaviours[key]) { + this.add(key, action, behaviours[key][action]); + } + } + } + + this.remove = function (name) { + if (this.$behaviours && this.$behaviours[name]) { + delete this.$behaviours[name]; + } + } + + this.inherit = function (mode, filter) { + if (typeof mode === "function") { + var behaviours = new mode().getBehaviours(filter); + } else { + var behaviours = mode.getBehaviours(filter); + } + this.addBehaviours(behaviours); + } + + this.getBehaviours = function (filter) { + if (!filter) { + return this.$behaviours; + } else { + var ret = {} + for (var i = 0; i < filter.length; i++) { + if (this.$behaviours[filter[i]]) { + ret[filter[i]] = this.$behaviours[filter[i]]; + } + } + return ret; + } + } + +}).call(Behaviour.prototype); + +exports.Behaviour = Behaviour; +}); + +ace.define("ace/unicode",["require","exports","module"], function(acequire, exports, module) { +"use strict"; +exports.packages = {}; + +addUnicodePackage({ + L: "0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC", + Ll: "0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A", + Lu: "0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A", + Lt: "01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC", + Lm: "02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F", + Lo: "01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC", + M: "0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26", + Mn: "0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26", + Mc: "0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC", + Me: "0488048906DE20DD-20E020E2-20E4A670-A672", + N: "0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19", + Nd: "0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19", + Nl: "16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF", + No: "00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835", + P: "0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65", + Pd: "002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D", + Ps: "0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62", + Pe: "0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63", + Pi: "00AB2018201B201C201F20392E022E042E092E0C2E1C2E20", + Pf: "00BB2019201D203A2E032E052E0A2E0D2E1D2E21", + Pc: "005F203F20402054FE33FE34FE4D-FE4FFF3F", + Po: "0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65", + S: "0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD", + Sm: "002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC", + Sc: "002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6", + Sk: "005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3", + So: "00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD", + Z: "002000A01680180E2000-200A20282029202F205F3000", + Zs: "002000A01680180E2000-200A202F205F3000", + Zl: "2028", + Zp: "2029", + C: "0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF", + Cc: "0000-001F007F-009F", + Cf: "00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB", + Co: "E000-F8FF", + Cs: "D800-DFFF", + Cn: "03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF" +}); + +function addUnicodePackage (pack) { + var codePoint = /\w{4}/g; + for (var name in pack) + exports.packages[name] = pack[name].replace(codePoint, "\\u$&"); +} + +}); + +ace.define("ace/token_iterator",["require","exports","module"], function(acequire, exports, module) { +"use strict"; +var TokenIterator = function(session, initialRow, initialColumn) { + this.$session = session; + this.$row = initialRow; + this.$rowTokens = session.getTokens(initialRow); + + var token = session.getTokenAt(initialRow, initialColumn); + this.$tokenIndex = token ? token.index : -1; +}; + +(function() { + this.stepBackward = function() { + this.$tokenIndex -= 1; + + while (this.$tokenIndex < 0) { + this.$row -= 1; + if (this.$row < 0) { + this.$row = 0; + return null; + } + + this.$rowTokens = this.$session.getTokens(this.$row); + this.$tokenIndex = this.$rowTokens.length - 1; + } + + return this.$rowTokens[this.$tokenIndex]; + }; + this.stepForward = function() { + this.$tokenIndex += 1; + var rowCount; + while (this.$tokenIndex >= this.$rowTokens.length) { + this.$row += 1; + if (!rowCount) + rowCount = this.$session.getLength(); + if (this.$row >= rowCount) { + this.$row = rowCount - 1; + return null; + } + + this.$rowTokens = this.$session.getTokens(this.$row); + this.$tokenIndex = 0; + } + + return this.$rowTokens[this.$tokenIndex]; + }; + this.getCurrentToken = function () { + return this.$rowTokens[this.$tokenIndex]; + }; + this.getCurrentTokenRow = function () { + return this.$row; + }; + this.getCurrentTokenColumn = function() { + var rowTokens = this.$rowTokens; + var tokenIndex = this.$tokenIndex; + var column = rowTokens[tokenIndex].start; + if (column !== undefined) + return column; + + column = 0; + while (tokenIndex > 0) { + tokenIndex -= 1; + column += rowTokens[tokenIndex].value.length; + } + + return column; + }; + this.getCurrentTokenPosition = function() { + return {row: this.$row, column: this.getCurrentTokenColumn()}; + }; + +}).call(TokenIterator.prototype); + +exports.TokenIterator = TokenIterator; +}); + +ace.define("ace/mode/text",["require","exports","module","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour","ace/unicode","ace/lib/lang","ace/token_iterator","ace/range"], function(acequire, exports, module) { +"use strict"; + +var Tokenizer = acequire("../tokenizer").Tokenizer; +var TextHighlightRules = acequire("./text_highlight_rules").TextHighlightRules; +var Behaviour = acequire("./behaviour").Behaviour; +var unicode = acequire("../unicode"); +var lang = acequire("../lib/lang"); +var TokenIterator = acequire("../token_iterator").TokenIterator; +var Range = acequire("../range").Range; + +var Mode = function() { + this.HighlightRules = TextHighlightRules; + this.$behaviour = new Behaviour(); +}; + +(function() { + + this.tokenRe = new RegExp("^[" + + unicode.packages.L + + unicode.packages.Mn + unicode.packages.Mc + + unicode.packages.Nd + + unicode.packages.Pc + "\\$_]+", "g" + ); + + this.nonTokenRe = new RegExp("^(?:[^" + + unicode.packages.L + + unicode.packages.Mn + unicode.packages.Mc + + unicode.packages.Nd + + unicode.packages.Pc + "\\$_]|\\s])+", "g" + ); + + this.getTokenizer = function() { + if (!this.$tokenizer) { + this.$highlightRules = this.$highlightRules || new this.HighlightRules(); + this.$tokenizer = new Tokenizer(this.$highlightRules.getRules()); + } + return this.$tokenizer; + }; + + this.lineCommentStart = ""; + this.blockComment = ""; + + this.toggleCommentLines = function(state, session, startRow, endRow) { + var doc = session.doc; + + var ignoreBlankLines = true; + var shouldRemove = true; + var minIndent = Infinity; + var tabSize = session.getTabSize(); + var insertAtTabStop = false; + + if (!this.lineCommentStart) { + if (!this.blockComment) + return false; + var lineCommentStart = this.blockComment.start; + var lineCommentEnd = this.blockComment.end; + var regexpStart = new RegExp("^(\\s*)(?:" + lang.escapeRegExp(lineCommentStart) + ")"); + var regexpEnd = new RegExp("(?:" + lang.escapeRegExp(lineCommentEnd) + ")\\s*$"); + + var comment = function(line, i) { + if (testRemove(line, i)) + return; + if (!ignoreBlankLines || /\S/.test(line)) { + doc.insertInLine({row: i, column: line.length}, lineCommentEnd); + doc.insertInLine({row: i, column: minIndent}, lineCommentStart); + } + }; + + var uncomment = function(line, i) { + var m; + if (m = line.match(regexpEnd)) + doc.removeInLine(i, line.length - m[0].length, line.length); + if (m = line.match(regexpStart)) + doc.removeInLine(i, m[1].length, m[0].length); + }; + + var testRemove = function(line, row) { + if (regexpStart.test(line)) + return true; + var tokens = session.getTokens(row); + for (var i = 0; i < tokens.length; i++) { + if (tokens[i].type === "comment") + return true; + } + }; + } else { + if (Array.isArray(this.lineCommentStart)) { + var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join("|"); + var lineCommentStart = this.lineCommentStart[0]; + } else { + var regexpStart = lang.escapeRegExp(this.lineCommentStart); + var lineCommentStart = this.lineCommentStart; + } + regexpStart = new RegExp("^(\\s*)(?:" + regexpStart + ") ?"); + + insertAtTabStop = session.getUseSoftTabs(); + + var uncomment = function(line, i) { + var m = line.match(regexpStart); + if (!m) return; + var start = m[1].length, end = m[0].length; + if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == " ") + end--; + doc.removeInLine(i, start, end); + }; + var commentWithSpace = lineCommentStart + " "; + var comment = function(line, i) { + if (!ignoreBlankLines || /\S/.test(line)) { + if (shouldInsertSpace(line, minIndent, minIndent)) + doc.insertInLine({row: i, column: minIndent}, commentWithSpace); + else + doc.insertInLine({row: i, column: minIndent}, lineCommentStart); + } + }; + var testRemove = function(line, i) { + return regexpStart.test(line); + }; + + var shouldInsertSpace = function(line, before, after) { + var spaces = 0; + while (before-- && line.charAt(before) == " ") + spaces++; + if (spaces % tabSize != 0) + return false; + var spaces = 0; + while (line.charAt(after++) == " ") + spaces++; + if (tabSize > 2) + return spaces % tabSize != tabSize - 1; + else + return spaces % tabSize == 0; + return true; + }; + } + + function iter(fun) { + for (var i = startRow; i <= endRow; i++) + fun(doc.getLine(i), i); + } + + + var minEmptyLength = Infinity; + iter(function(line, i) { + var indent = line.search(/\S/); + if (indent !== -1) { + if (indent < minIndent) + minIndent = indent; + if (shouldRemove && !testRemove(line, i)) + shouldRemove = false; + } else if (minEmptyLength > line.length) { + minEmptyLength = line.length; + } + }); + + if (minIndent == Infinity) { + minIndent = minEmptyLength; + ignoreBlankLines = false; + shouldRemove = false; + } + + if (insertAtTabStop && minIndent % tabSize != 0) + minIndent = Math.floor(minIndent / tabSize) * tabSize; + + iter(shouldRemove ? uncomment : comment); + }; + + this.toggleBlockComment = function(state, session, range, cursor) { + var comment = this.blockComment; + if (!comment) + return; + if (!comment.start && comment[0]) + comment = comment[0]; + + var iterator = new TokenIterator(session, cursor.row, cursor.column); + var token = iterator.getCurrentToken(); + + var sel = session.selection; + var initialRange = session.selection.toOrientedRange(); + var startRow, colDiff; + + if (token && /comment/.test(token.type)) { + var startRange, endRange; + while (token && /comment/.test(token.type)) { + var i = token.value.indexOf(comment.start); + if (i != -1) { + var row = iterator.getCurrentTokenRow(); + var column = iterator.getCurrentTokenColumn() + i; + startRange = new Range(row, column, row, column + comment.start.length); + break; + } + token = iterator.stepBackward(); + } + + var iterator = new TokenIterator(session, cursor.row, cursor.column); + var token = iterator.getCurrentToken(); + while (token && /comment/.test(token.type)) { + var i = token.value.indexOf(comment.end); + if (i != -1) { + var row = iterator.getCurrentTokenRow(); + var column = iterator.getCurrentTokenColumn() + i; + endRange = new Range(row, column, row, column + comment.end.length); + break; + } + token = iterator.stepForward(); + } + if (endRange) + session.remove(endRange); + if (startRange) { + session.remove(startRange); + startRow = startRange.start.row; + colDiff = -comment.start.length; + } + } else { + colDiff = comment.start.length; + startRow = range.start.row; + session.insert(range.end, comment.end); + session.insert(range.start, comment.start); + } + if (initialRange.start.row == startRow) + initialRange.start.column += colDiff; + if (initialRange.end.row == startRow) + initialRange.end.column += colDiff; + session.selection.fromOrientedRange(initialRange); + }; + + this.getNextLineIndent = function(state, line, tab) { + return this.$getIndent(line); + }; + + this.checkOutdent = function(state, line, input) { + return false; + }; + + this.autoOutdent = function(state, doc, row) { + }; + + this.$getIndent = function(line) { + return line.match(/^\s*/)[0]; + }; + + this.createWorker = function(session) { + return null; + }; + + this.createModeDelegates = function (mapping) { + this.$embeds = []; + this.$modes = {}; + for (var i in mapping) { + if (mapping[i]) { + this.$embeds.push(i); + this.$modes[i] = new mapping[i](); + } + } + + var delegations = ["toggleBlockComment", "toggleCommentLines", "getNextLineIndent", + "checkOutdent", "autoOutdent", "transformAction", "getCompletions"]; + + for (var i = 0; i < delegations.length; i++) { + (function(scope) { + var functionName = delegations[i]; + var defaultHandler = scope[functionName]; + scope[delegations[i]] = function() { + return this.$delegator(functionName, arguments, defaultHandler); + }; + }(this)); + } + }; + + this.$delegator = function(method, args, defaultHandler) { + var state = args[0]; + if (typeof state != "string") + state = state[0]; + for (var i = 0; i < this.$embeds.length; i++) { + if (!this.$modes[this.$embeds[i]]) continue; + + var split = state.split(this.$embeds[i]); + if (!split[0] && split[1]) { + args[0] = split[1]; + var mode = this.$modes[this.$embeds[i]]; + return mode[method].apply(mode, args); + } + } + var ret = defaultHandler.apply(this, args); + return defaultHandler ? ret : undefined; + }; + + this.transformAction = function(state, action, editor, session, param) { + if (this.$behaviour) { + var behaviours = this.$behaviour.getBehaviours(); + for (var key in behaviours) { + if (behaviours[key][action]) { + var ret = behaviours[key][action].apply(this, arguments); + if (ret) { + return ret; + } + } + } + } + }; + + this.getKeywords = function(append) { + if (!this.completionKeywords) { + var rules = this.$tokenizer.rules; + var completionKeywords = []; + for (var rule in rules) { + var ruleItr = rules[rule]; + for (var r = 0, l = ruleItr.length; r < l; r++) { + if (typeof ruleItr[r].token === "string") { + if (/keyword|support|storage/.test(ruleItr[r].token)) + completionKeywords.push(ruleItr[r].regex); + } + else if (typeof ruleItr[r].token === "object") { + for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) { + if (/keyword|support|storage/.test(ruleItr[r].token[a])) { + var rule = ruleItr[r].regex.match(/\(.+?\)/g)[a]; + completionKeywords.push(rule.substr(1, rule.length - 2)); + } + } + } + } + } + this.completionKeywords = completionKeywords; + } + if (!append) + return this.$keywordList; + return completionKeywords.concat(this.$keywordList || []); + }; + + this.$createKeywordList = function() { + if (!this.$highlightRules) + this.getTokenizer(); + return this.$keywordList = this.$highlightRules.$keywordList || []; + }; + + this.getCompletions = function(state, session, pos, prefix) { + var keywords = this.$keywordList || this.$createKeywordList(); + return keywords.map(function(word) { + return { + name: word, + value: word, + score: 0, + meta: "keyword" + }; + }); + }; + + this.$id = "ace/mode/text"; +}).call(Mode.prototype); + +exports.Mode = Mode; +}); + +ace.define("ace/apply_delta",["require","exports","module"], function(acequire, exports, module) { +"use strict"; + +function throwDeltaError(delta, errorText){ + console.log("Invalid Delta:", delta); + throw "Invalid Delta: " + errorText; +} + +function positionInDocument(docLines, position) { + return position.row >= 0 && position.row < docLines.length && + position.column >= 0 && position.column <= docLines[position.row].length; +} + +function validateDelta(docLines, delta) { + if (delta.action != "insert" && delta.action != "remove") + throwDeltaError(delta, "delta.action must be 'insert' or 'remove'"); + if (!(delta.lines instanceof Array)) + throwDeltaError(delta, "delta.lines must be an Array"); + if (!delta.start || !delta.end) + throwDeltaError(delta, "delta.start/end must be an present"); + var start = delta.start; + if (!positionInDocument(docLines, delta.start)) + throwDeltaError(delta, "delta.start must be contained in document"); + var end = delta.end; + if (delta.action == "remove" && !positionInDocument(docLines, end)) + throwDeltaError(delta, "delta.end must contained in document for 'remove' actions"); + var numRangeRows = end.row - start.row; + var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0)); + if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars) + throwDeltaError(delta, "delta.range must match delta lines"); +} + +exports.applyDelta = function(docLines, delta, doNotValidate) { + + var row = delta.start.row; + var startColumn = delta.start.column; + var line = docLines[row] || ""; + switch (delta.action) { + case "insert": + var lines = delta.lines; + if (lines.length === 1) { + docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn); + } else { + var args = [row, 1].concat(delta.lines); + docLines.splice.apply(docLines, args); + docLines[row] = line.substring(0, startColumn) + docLines[row]; + docLines[row + delta.lines.length - 1] += line.substring(startColumn); + } + break; + case "remove": + var endColumn = delta.end.column; + var endRow = delta.end.row; + if (row === endRow) { + docLines[row] = line.substring(0, startColumn) + line.substring(endColumn); + } else { + docLines.splice( + row, endRow - row + 1, + line.substring(0, startColumn) + docLines[endRow].substring(endColumn) + ); + } + break; + } +} +}); + +ace.define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("./lib/oop"); +var EventEmitter = acequire("./lib/event_emitter").EventEmitter; + +var Anchor = exports.Anchor = function(doc, row, column) { + this.$onChange = this.onChange.bind(this); + this.attach(doc); + + if (typeof column == "undefined") + this.setPosition(row.row, row.column); + else + this.setPosition(row, column); +}; + +(function() { + + oop.implement(this, EventEmitter); + this.getPosition = function() { + return this.$clipPositionToDocument(this.row, this.column); + }; + this.getDocument = function() { + return this.document; + }; + this.$insertRight = false; + this.onChange = function(delta) { + if (delta.start.row == delta.end.row && delta.start.row != this.row) + return; + + if (delta.start.row > this.row) + return; + + var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight); + this.setPosition(point.row, point.column, true); + }; + + function $pointsInOrder(point1, point2, equalPointsInOrder) { + var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column; + return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter); + } + + function $getTransformedPoint(delta, point, moveIfEqual) { + var deltaIsInsert = delta.action == "insert"; + var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row); + var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column); + var deltaStart = delta.start; + var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range. + if ($pointsInOrder(point, deltaStart, moveIfEqual)) { + return { + row: point.row, + column: point.column + }; + } + if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) { + return { + row: point.row + deltaRowShift, + column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0) + }; + } + + return { + row: deltaStart.row, + column: deltaStart.column + }; + } + this.setPosition = function(row, column, noClip) { + var pos; + if (noClip) { + pos = { + row: row, + column: column + }; + } else { + pos = this.$clipPositionToDocument(row, column); + } + + if (this.row == pos.row && this.column == pos.column) + return; + + var old = { + row: this.row, + column: this.column + }; + + this.row = pos.row; + this.column = pos.column; + this._signal("change", { + old: old, + value: pos + }); + }; + this.detach = function() { + this.document.removeEventListener("change", this.$onChange); + }; + this.attach = function(doc) { + this.document = doc || this.document; + this.document.on("change", this.$onChange); + }; + this.$clipPositionToDocument = function(row, column) { + var pos = {}; + + if (row >= this.document.getLength()) { + pos.row = Math.max(0, this.document.getLength() - 1); + pos.column = this.document.getLine(pos.row).length; + } + else if (row < 0) { + pos.row = 0; + pos.column = 0; + } + else { + pos.row = row; + pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column)); + } + + if (column < 0) + pos.column = 0; + + return pos; + }; + +}).call(Anchor.prototype); + +}); + +ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("./lib/oop"); +var applyDelta = acequire("./apply_delta").applyDelta; +var EventEmitter = acequire("./lib/event_emitter").EventEmitter; +var Range = acequire("./range").Range; +var Anchor = acequire("./anchor").Anchor; + +var Document = function(textOrLines) { + this.$lines = [""]; + if (textOrLines.length === 0) { + this.$lines = [""]; + } else if (Array.isArray(textOrLines)) { + this.insertMergedLines({row: 0, column: 0}, textOrLines); + } else { + this.insert({row: 0, column:0}, textOrLines); + } +}; + +(function() { + + oop.implement(this, EventEmitter); + this.setValue = function(text) { + var len = this.getLength() - 1; + this.remove(new Range(0, 0, len, this.getLine(len).length)); + this.insert({row: 0, column: 0}, text); + }; + this.getValue = function() { + return this.getAllLines().join(this.getNewLineCharacter()); + }; + this.createAnchor = function(row, column) { + return new Anchor(this, row, column); + }; + if ("aaa".split(/a/).length === 0) { + this.$split = function(text) { + return text.replace(/\r\n|\r/g, "\n").split("\n"); + }; + } else { + this.$split = function(text) { + return text.split(/\r\n|\r|\n/); + }; + } + + + this.$detectNewLine = function(text) { + var match = text.match(/^.*?(\r\n|\r|\n)/m); + this.$autoNewLine = match ? match[1] : "\n"; + this._signal("changeNewLineMode"); + }; + this.getNewLineCharacter = function() { + switch (this.$newLineMode) { + case "windows": + return "\r\n"; + case "unix": + return "\n"; + default: + return this.$autoNewLine || "\n"; + } + }; + + this.$autoNewLine = ""; + this.$newLineMode = "auto"; + this.setNewLineMode = function(newLineMode) { + if (this.$newLineMode === newLineMode) + return; + + this.$newLineMode = newLineMode; + this._signal("changeNewLineMode"); + }; + this.getNewLineMode = function() { + return this.$newLineMode; + }; + this.isNewLine = function(text) { + return (text == "\r\n" || text == "\r" || text == "\n"); + }; + this.getLine = function(row) { + return this.$lines[row] || ""; + }; + this.getLines = function(firstRow, lastRow) { + return this.$lines.slice(firstRow, lastRow + 1); + }; + this.getAllLines = function() { + return this.getLines(0, this.getLength()); + }; + this.getLength = function() { + return this.$lines.length; + }; + this.getTextRange = function(range) { + return this.getLinesForRange(range).join(this.getNewLineCharacter()); + }; + this.getLinesForRange = function(range) { + var lines; + if (range.start.row === range.end.row) { + lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)]; + } else { + lines = this.getLines(range.start.row, range.end.row); + lines[0] = (lines[0] || "").substring(range.start.column); + var l = lines.length - 1; + if (range.end.row - range.start.row == l) + lines[l] = lines[l].substring(0, range.end.column); + } + return lines; + }; + this.insertLines = function(row, lines) { + console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."); + return this.insertFullLines(row, lines); + }; + this.removeLines = function(firstRow, lastRow) { + console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."); + return this.removeFullLines(firstRow, lastRow); + }; + this.insertNewLine = function(position) { + console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\'\', \'\']) instead."); + return this.insertMergedLines(position, ["", ""]); + }; + this.insert = function(position, text) { + if (this.getLength() <= 1) + this.$detectNewLine(text); + + return this.insertMergedLines(position, this.$split(text)); + }; + this.insertInLine = function(position, text) { + var start = this.clippedPos(position.row, position.column); + var end = this.pos(position.row, position.column + text.length); + + this.applyDelta({ + start: start, + end: end, + action: "insert", + lines: [text] + }, true); + + return this.clonePos(end); + }; + + this.clippedPos = function(row, column) { + var length = this.getLength(); + if (row === undefined) { + row = length; + } else if (row < 0) { + row = 0; + } else if (row >= length) { + row = length - 1; + column = undefined; + } + var line = this.getLine(row); + if (column == undefined) + column = line.length; + column = Math.min(Math.max(column, 0), line.length); + return {row: row, column: column}; + }; + + this.clonePos = function(pos) { + return {row: pos.row, column: pos.column}; + }; + + this.pos = function(row, column) { + return {row: row, column: column}; + }; + + this.$clipPosition = function(position) { + var length = this.getLength(); + if (position.row >= length) { + position.row = Math.max(0, length - 1); + position.column = this.getLine(length - 1).length; + } else { + position.row = Math.max(0, position.row); + position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length); + } + return position; + }; + this.insertFullLines = function(row, lines) { + row = Math.min(Math.max(row, 0), this.getLength()); + var column = 0; + if (row < this.getLength()) { + lines = lines.concat([""]); + column = 0; + } else { + lines = [""].concat(lines); + row--; + column = this.$lines[row].length; + } + this.insertMergedLines({row: row, column: column}, lines); + }; + this.insertMergedLines = function(position, lines) { + var start = this.clippedPos(position.row, position.column); + var end = { + row: start.row + lines.length - 1, + column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length + }; + + this.applyDelta({ + start: start, + end: end, + action: "insert", + lines: lines + }); + + return this.clonePos(end); + }; + this.remove = function(range) { + var start = this.clippedPos(range.start.row, range.start.column); + var end = this.clippedPos(range.end.row, range.end.column); + this.applyDelta({ + start: start, + end: end, + action: "remove", + lines: this.getLinesForRange({start: start, end: end}) + }); + return this.clonePos(start); + }; + this.removeInLine = function(row, startColumn, endColumn) { + var start = this.clippedPos(row, startColumn); + var end = this.clippedPos(row, endColumn); + + this.applyDelta({ + start: start, + end: end, + action: "remove", + lines: this.getLinesForRange({start: start, end: end}) + }, true); + + return this.clonePos(start); + }; + this.removeFullLines = function(firstRow, lastRow) { + firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1); + lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1); + var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0; + var deleteLastNewLine = lastRow < this.getLength() - 1; + var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow ); + var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 ); + var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow ); + var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); + var range = new Range(startRow, startCol, endRow, endCol); + var deletedLines = this.$lines.slice(firstRow, lastRow + 1); + + this.applyDelta({ + start: range.start, + end: range.end, + action: "remove", + lines: this.getLinesForRange(range) + }); + return deletedLines; + }; + this.removeNewLine = function(row) { + if (row < this.getLength() - 1 && row >= 0) { + this.applyDelta({ + start: this.pos(row, this.getLine(row).length), + end: this.pos(row + 1, 0), + action: "remove", + lines: ["", ""] + }); + } + }; + this.replace = function(range, text) { + if (!(range instanceof Range)) + range = Range.fromPoints(range.start, range.end); + if (text.length === 0 && range.isEmpty()) + return range.start; + if (text == this.getTextRange(range)) + return range.end; + + this.remove(range); + var end; + if (text) { + end = this.insert(range.start, text); + } + else { + end = range.start; + } + + return end; + }; + this.applyDeltas = function(deltas) { + for (var i=0; i=0; i--) { + this.revertDelta(deltas[i]); + } + }; + this.applyDelta = function(delta, doNotValidate) { + var isInsert = delta.action == "insert"; + if (isInsert ? delta.lines.length <= 1 && !delta.lines[0] + : !Range.comparePoints(delta.start, delta.end)) { + return; + } + + if (isInsert && delta.lines.length > 20000) + this.$splitAndapplyLargeDelta(delta, 20000); + applyDelta(this.$lines, delta, doNotValidate); + this._signal("change", delta); + }; + + this.$splitAndapplyLargeDelta = function(delta, MAX) { + var lines = delta.lines; + var l = lines.length; + var row = delta.start.row; + var column = delta.start.column; + var from = 0, to = 0; + do { + from = to; + to += MAX - 1; + var chunk = lines.slice(from, to); + if (to > l) { + delta.lines = chunk; + delta.start.row = row + from; + delta.start.column = column; + break; + } + chunk.push(""); + this.applyDelta({ + start: this.pos(row + from, column), + end: this.pos(row + to, column = 0), + action: delta.action, + lines: chunk + }, true); + } while(true); + }; + this.revertDelta = function(delta) { + this.applyDelta({ + start: this.clonePos(delta.start), + end: this.clonePos(delta.end), + action: (delta.action == "insert" ? "remove" : "insert"), + lines: delta.lines.slice() + }); + }; + this.indexToPosition = function(index, startRow) { + var lines = this.$lines || this.getAllLines(); + var newlineLength = this.getNewLineCharacter().length; + for (var i = startRow || 0, l = lines.length; i < l; i++) { + index -= lines[i].length + newlineLength; + if (index < 0) + return {row: i, column: index + lines[i].length + newlineLength}; + } + return {row: l-1, column: lines[l-1].length}; + }; + this.positionToIndex = function(pos, startRow) { + var lines = this.$lines || this.getAllLines(); + var newlineLength = this.getNewLineCharacter().length; + var index = 0; + var row = Math.min(pos.row, lines.length); + for (var i = startRow || 0; i < row; ++i) + index += lines[i].length + newlineLength; + + return index + pos.column; + }; + +}).call(Document.prototype); + +exports.Document = Document; +}); + +ace.define("ace/background_tokenizer",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("./lib/oop"); +var EventEmitter = acequire("./lib/event_emitter").EventEmitter; + +var BackgroundTokenizer = function(tokenizer, editor) { + this.running = false; + this.lines = []; + this.states = []; + this.currentLine = 0; + this.tokenizer = tokenizer; + + var self = this; + + this.$worker = function() { + if (!self.running) { return; } + + var workerStart = new Date(); + var currentLine = self.currentLine; + var endLine = -1; + var doc = self.doc; + + var startLine = currentLine; + while (self.lines[currentLine]) + currentLine++; + + var len = doc.getLength(); + var processedLines = 0; + self.running = false; + while (currentLine < len) { + self.$tokenizeRow(currentLine); + endLine = currentLine; + do { + currentLine++; + } while (self.lines[currentLine]); + processedLines ++; + if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) { + self.running = setTimeout(self.$worker, 20); + break; + } + } + self.currentLine = currentLine; + + if (startLine <= endLine) + self.fireUpdateEvent(startLine, endLine); + }; +}; + +(function(){ + + oop.implement(this, EventEmitter); + this.setTokenizer = function(tokenizer) { + this.tokenizer = tokenizer; + this.lines = []; + this.states = []; + + this.start(0); + }; + this.setDocument = function(doc) { + this.doc = doc; + this.lines = []; + this.states = []; + + this.stop(); + }; + this.fireUpdateEvent = function(firstRow, lastRow) { + var data = { + first: firstRow, + last: lastRow + }; + this._signal("update", {data: data}); + }; + this.start = function(startRow) { + this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength()); + this.lines.splice(this.currentLine, this.lines.length); + this.states.splice(this.currentLine, this.states.length); + + this.stop(); + this.running = setTimeout(this.$worker, 700); + }; + + this.scheduleStart = function() { + if (!this.running) + this.running = setTimeout(this.$worker, 700); + } + + this.$updateOnChange = function(delta) { + var startRow = delta.start.row; + var len = delta.end.row - startRow; + + if (len === 0) { + this.lines[startRow] = null; + } else if (delta.action == "remove") { + this.lines.splice(startRow, len + 1, null); + this.states.splice(startRow, len + 1, null); + } else { + var args = Array(len + 1); + args.unshift(startRow, 1); + this.lines.splice.apply(this.lines, args); + this.states.splice.apply(this.states, args); + } + + this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength()); + + this.stop(); + }; + this.stop = function() { + if (this.running) + clearTimeout(this.running); + this.running = false; + }; + this.getTokens = function(row) { + return this.lines[row] || this.$tokenizeRow(row); + }; + this.getState = function(row) { + if (this.currentLine == row) + this.$tokenizeRow(row); + return this.states[row] || "start"; + }; + + this.$tokenizeRow = function(row) { + var line = this.doc.getLine(row); + var state = this.states[row - 1]; + + var data = this.tokenizer.getLineTokens(line, state, row); + + if (this.states[row] + "" !== data.state + "") { + this.states[row] = data.state; + this.lines[row + 1] = null; + if (this.currentLine > row + 1) + this.currentLine = row + 1; + } else if (this.currentLine == row) { + this.currentLine = row + 1; + } + + return this.lines[row] = data.tokens; + }; + +}).call(BackgroundTokenizer.prototype); + +exports.BackgroundTokenizer = BackgroundTokenizer; +}); + +ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"], function(acequire, exports, module) { +"use strict"; + +var lang = acequire("./lib/lang"); +var oop = acequire("./lib/oop"); +var Range = acequire("./range").Range; + +var SearchHighlight = function(regExp, clazz, type) { + this.setRegexp(regExp); + this.clazz = clazz; + this.type = type || "text"; +}; + +(function() { + this.MAX_RANGES = 500; + + this.setRegexp = function(regExp) { + if (this.regExp+"" == regExp+"") + return; + this.regExp = regExp; + this.cache = []; + }; + + this.update = function(html, markerLayer, session, config) { + if (!this.regExp) + return; + var start = config.firstRow, end = config.lastRow; + + for (var i = start; i <= end; i++) { + var ranges = this.cache[i]; + if (ranges == null) { + ranges = lang.getMatchOffsets(session.getLine(i), this.regExp); + if (ranges.length > this.MAX_RANGES) + ranges = ranges.slice(0, this.MAX_RANGES); + ranges = ranges.map(function(match) { + return new Range(i, match.offset, i, match.offset + match.length); + }); + this.cache[i] = ranges.length ? ranges : ""; + } + + for (var j = ranges.length; j --; ) { + markerLayer.drawSingleLineMarker( + html, ranges[j].toScreenRange(session), this.clazz, config); + } + } + }; + +}).call(SearchHighlight.prototype); + +exports.SearchHighlight = SearchHighlight; +}); + +ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"], function(acequire, exports, module) { +"use strict"; + +var Range = acequire("../range").Range; +function FoldLine(foldData, folds) { + this.foldData = foldData; + if (Array.isArray(folds)) { + this.folds = folds; + } else { + folds = this.folds = [ folds ]; + } + + var last = folds[folds.length - 1]; + this.range = new Range(folds[0].start.row, folds[0].start.column, + last.end.row, last.end.column); + this.start = this.range.start; + this.end = this.range.end; + + this.folds.forEach(function(fold) { + fold.setFoldLine(this); + }, this); +} + +(function() { + this.shiftRow = function(shift) { + this.start.row += shift; + this.end.row += shift; + this.folds.forEach(function(fold) { + fold.start.row += shift; + fold.end.row += shift; + }); + }; + + this.addFold = function(fold) { + if (fold.sameRow) { + if (fold.start.row < this.startRow || fold.endRow > this.endRow) { + throw new Error("Can't add a fold to this FoldLine as it has no connection"); + } + this.folds.push(fold); + this.folds.sort(function(a, b) { + return -a.range.compareEnd(b.start.row, b.start.column); + }); + if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) { + this.end.row = fold.end.row; + this.end.column = fold.end.column; + } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) { + this.start.row = fold.start.row; + this.start.column = fold.start.column; + } + } else if (fold.start.row == this.end.row) { + this.folds.push(fold); + this.end.row = fold.end.row; + this.end.column = fold.end.column; + } else if (fold.end.row == this.start.row) { + this.folds.unshift(fold); + this.start.row = fold.start.row; + this.start.column = fold.start.column; + } else { + throw new Error("Trying to add fold to FoldRow that doesn't have a matching row"); + } + fold.foldLine = this; + }; + + this.containsRow = function(row) { + return row >= this.start.row && row <= this.end.row; + }; + + this.walk = function(callback, endRow, endColumn) { + var lastEnd = 0, + folds = this.folds, + fold, + cmp, stop, isNewRow = true; + + if (endRow == null) { + endRow = this.end.row; + endColumn = this.end.column; + } + + for (var i = 0; i < folds.length; i++) { + fold = folds[i]; + + cmp = fold.range.compareStart(endRow, endColumn); + if (cmp == -1) { + callback(null, endRow, endColumn, lastEnd, isNewRow); + return; + } + + stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow); + stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd); + if (stop || cmp === 0) { + return; + } + isNewRow = !fold.sameRow; + lastEnd = fold.end.column; + } + callback(null, endRow, endColumn, lastEnd, isNewRow); + }; + + this.getNextFoldTo = function(row, column) { + var fold, cmp; + for (var i = 0; i < this.folds.length; i++) { + fold = this.folds[i]; + cmp = fold.range.compareEnd(row, column); + if (cmp == -1) { + return { + fold: fold, + kind: "after" + }; + } else if (cmp === 0) { + return { + fold: fold, + kind: "inside" + }; + } + } + return null; + }; + + this.addRemoveChars = function(row, column, len) { + var ret = this.getNextFoldTo(row, column), + fold, folds; + if (ret) { + fold = ret.fold; + if (ret.kind == "inside" + && fold.start.column != column + && fold.start.row != row) + { + window.console && window.console.log(row, column, fold); + } else if (fold.start.row == row) { + folds = this.folds; + var i = folds.indexOf(fold); + if (i === 0) { + this.start.column += len; + } + for (i; i < folds.length; i++) { + fold = folds[i]; + fold.start.column += len; + if (!fold.sameRow) { + return; + } + fold.end.column += len; + } + this.end.column += len; + } + } + }; + + this.split = function(row, column) { + var pos = this.getNextFoldTo(row, column); + + if (!pos || pos.kind == "inside") + return null; + + var fold = pos.fold; + var folds = this.folds; + var foldData = this.foldData; + + var i = folds.indexOf(fold); + var foldBefore = folds[i - 1]; + this.end.row = foldBefore.end.row; + this.end.column = foldBefore.end.column; + folds = folds.splice(i, folds.length - i); + + var newFoldLine = new FoldLine(foldData, folds); + foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine); + return newFoldLine; + }; + + this.merge = function(foldLineNext) { + var folds = foldLineNext.folds; + for (var i = 0; i < folds.length; i++) { + this.addFold(folds[i]); + } + var foldData = this.foldData; + foldData.splice(foldData.indexOf(foldLineNext), 1); + }; + + this.toString = function() { + var ret = [this.range.toString() + ": [" ]; + + this.folds.forEach(function(fold) { + ret.push(" " + fold.toString()); + }); + ret.push("]"); + return ret.join("\n"); + }; + + this.idxToPosition = function(idx) { + var lastFoldEndColumn = 0; + + for (var i = 0; i < this.folds.length; i++) { + var fold = this.folds[i]; + + idx -= fold.start.column - lastFoldEndColumn; + if (idx < 0) { + return { + row: fold.start.row, + column: fold.start.column + idx + }; + } + + idx -= fold.placeholder.length; + if (idx < 0) { + return fold.start; + } + + lastFoldEndColumn = fold.end.column; + } + + return { + row: this.end.row, + column: this.end.column + idx + }; + }; +}).call(FoldLine.prototype); + +exports.FoldLine = FoldLine; +}); + +ace.define("ace/range_list",["require","exports","module","ace/range"], function(acequire, exports, module) { +"use strict"; +var Range = acequire("./range").Range; +var comparePoints = Range.comparePoints; + +var RangeList = function() { + this.ranges = []; +}; + +(function() { + this.comparePoints = comparePoints; + + this.pointIndex = function(pos, excludeEdges, startIndex) { + var list = this.ranges; + + for (var i = startIndex || 0; i < list.length; i++) { + var range = list[i]; + var cmpEnd = comparePoints(pos, range.end); + if (cmpEnd > 0) + continue; + var cmpStart = comparePoints(pos, range.start); + if (cmpEnd === 0) + return excludeEdges && cmpStart !== 0 ? -i-2 : i; + if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges)) + return i; + + return -i-1; + } + return -i - 1; + }; + + this.add = function(range) { + var excludeEdges = !range.isEmpty(); + var startIndex = this.pointIndex(range.start, excludeEdges); + if (startIndex < 0) + startIndex = -startIndex - 1; + + var endIndex = this.pointIndex(range.end, excludeEdges, startIndex); + + if (endIndex < 0) + endIndex = -endIndex - 1; + else + endIndex++; + return this.ranges.splice(startIndex, endIndex - startIndex, range); + }; + + this.addList = function(list) { + var removed = []; + for (var i = list.length; i--; ) { + removed.push.apply(removed, this.add(list[i])); + } + return removed; + }; + + this.substractPoint = function(pos) { + var i = this.pointIndex(pos); + + if (i >= 0) + return this.ranges.splice(i, 1); + }; + this.merge = function() { + var removed = []; + var list = this.ranges; + + list = list.sort(function(a, b) { + return comparePoints(a.start, b.start); + }); + + var next = list[0], range; + for (var i = 1; i < list.length; i++) { + range = next; + next = list[i]; + var cmp = comparePoints(range.end, next.start); + if (cmp < 0) + continue; + + if (cmp == 0 && !range.isEmpty() && !next.isEmpty()) + continue; + + if (comparePoints(range.end, next.end) < 0) { + range.end.row = next.end.row; + range.end.column = next.end.column; + } + + list.splice(i, 1); + removed.push(next); + next = range; + i--; + } + + this.ranges = list; + + return removed; + }; + + this.contains = function(row, column) { + return this.pointIndex({row: row, column: column}) >= 0; + }; + + this.containsPoint = function(pos) { + return this.pointIndex(pos) >= 0; + }; + + this.rangeAtPoint = function(pos) { + var i = this.pointIndex(pos); + if (i >= 0) + return this.ranges[i]; + }; + + + this.clipRows = function(startRow, endRow) { + var list = this.ranges; + if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow) + return []; + + var startIndex = this.pointIndex({row: startRow, column: 0}); + if (startIndex < 0) + startIndex = -startIndex - 1; + var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex); + if (endIndex < 0) + endIndex = -endIndex - 1; + + var clipped = []; + for (var i = startIndex; i < endIndex; i++) { + clipped.push(list[i]); + } + return clipped; + }; + + this.removeAll = function() { + return this.ranges.splice(0, this.ranges.length); + }; + + this.attach = function(session) { + if (this.session) + this.detach(); + + this.session = session; + this.onChange = this.$onChange.bind(this); + + this.session.on('change', this.onChange); + }; + + this.detach = function() { + if (!this.session) + return; + this.session.removeListener('change', this.onChange); + this.session = null; + }; + + this.$onChange = function(delta) { + if (delta.action == "insert"){ + var start = delta.start; + var end = delta.end; + } else { + var end = delta.start; + var start = delta.end; + } + var startRow = start.row; + var endRow = end.row; + var lineDif = endRow - startRow; + + var colDiff = -start.column + end.column; + var ranges = this.ranges; + + for (var i = 0, n = ranges.length; i < n; i++) { + var r = ranges[i]; + if (r.end.row < startRow) + continue; + if (r.start.row > startRow) + break; + + if (r.start.row == startRow && r.start.column >= start.column ) { + if (r.start.column == start.column && this.$insertRight) { + } else { + r.start.column += colDiff; + r.start.row += lineDif; + } + } + if (r.end.row == startRow && r.end.column >= start.column) { + if (r.end.column == start.column && this.$insertRight) { + continue; + } + if (r.end.column == start.column && colDiff > 0 && i < n - 1) { + if (r.end.column > r.start.column && r.end.column == ranges[i+1].start.column) + r.end.column -= colDiff; + } + r.end.column += colDiff; + r.end.row += lineDif; + } + } + + if (lineDif != 0 && i < n) { + for (; i < n; i++) { + var r = ranges[i]; + r.start.row += lineDif; + r.end.row += lineDif; + } + } + }; + +}).call(RangeList.prototype); + +exports.RangeList = RangeList; +}); + +ace.define("ace/edit_session/fold",["require","exports","module","ace/range","ace/range_list","ace/lib/oop"], function(acequire, exports, module) { +"use strict"; + +var Range = acequire("../range").Range; +var RangeList = acequire("../range_list").RangeList; +var oop = acequire("../lib/oop") +var Fold = exports.Fold = function(range, placeholder) { + this.foldLine = null; + this.placeholder = placeholder; + this.range = range; + this.start = range.start; + this.end = range.end; + + this.sameRow = range.start.row == range.end.row; + this.subFolds = this.ranges = []; +}; + +oop.inherits(Fold, RangeList); + +(function() { + + this.toString = function() { + return '"' + this.placeholder + '" ' + this.range.toString(); + }; + + this.setFoldLine = function(foldLine) { + this.foldLine = foldLine; + this.subFolds.forEach(function(fold) { + fold.setFoldLine(foldLine); + }); + }; + + this.clone = function() { + var range = this.range.clone(); + var fold = new Fold(range, this.placeholder); + this.subFolds.forEach(function(subFold) { + fold.subFolds.push(subFold.clone()); + }); + fold.collapseChildren = this.collapseChildren; + return fold; + }; + + this.addSubFold = function(fold) { + if (this.range.isEqual(fold)) + return; + + if (!this.range.containsRange(fold)) + throw new Error("A fold can't intersect already existing fold" + fold.range + this.range); + consumeRange(fold, this.start); + + var row = fold.start.row, column = fold.start.column; + for (var i = 0, cmp = -1; i < this.subFolds.length; i++) { + cmp = this.subFolds[i].range.compare(row, column); + if (cmp != 1) + break; + } + var afterStart = this.subFolds[i]; + + if (cmp == 0) + return afterStart.addSubFold(fold); + var row = fold.range.end.row, column = fold.range.end.column; + for (var j = i, cmp = -1; j < this.subFolds.length; j++) { + cmp = this.subFolds[j].range.compare(row, column); + if (cmp != 1) + break; + } + var afterEnd = this.subFolds[j]; + + if (cmp == 0) + throw new Error("A fold can't intersect already existing fold" + fold.range + this.range); + + var consumedFolds = this.subFolds.splice(i, j - i, fold); + fold.setFoldLine(this.foldLine); + + return fold; + }; + + this.restoreRange = function(range) { + return restoreRange(range, this.start); + }; + +}).call(Fold.prototype); + +function consumePoint(point, anchor) { + point.row -= anchor.row; + if (point.row == 0) + point.column -= anchor.column; +} +function consumeRange(range, anchor) { + consumePoint(range.start, anchor); + consumePoint(range.end, anchor); +} +function restorePoint(point, anchor) { + if (point.row == 0) + point.column += anchor.column; + point.row += anchor.row; +} +function restoreRange(range, anchor) { + restorePoint(range.start, anchor); + restorePoint(range.end, anchor); +} + +}); + +ace.define("ace/edit_session/folding",["require","exports","module","ace/range","ace/edit_session/fold_line","ace/edit_session/fold","ace/token_iterator"], function(acequire, exports, module) { +"use strict"; + +var Range = acequire("../range").Range; +var FoldLine = acequire("./fold_line").FoldLine; +var Fold = acequire("./fold").Fold; +var TokenIterator = acequire("../token_iterator").TokenIterator; + +function Folding() { + this.getFoldAt = function(row, column, side) { + var foldLine = this.getFoldLine(row); + if (!foldLine) + return null; + + var folds = foldLine.folds; + for (var i = 0; i < folds.length; i++) { + var fold = folds[i]; + if (fold.range.contains(row, column)) { + if (side == 1 && fold.range.isEnd(row, column)) { + continue; + } else if (side == -1 && fold.range.isStart(row, column)) { + continue; + } + return fold; + } + } + }; + this.getFoldsInRange = function(range) { + var start = range.start; + var end = range.end; + var foldLines = this.$foldData; + var foundFolds = []; + + start.column += 1; + end.column -= 1; + + for (var i = 0; i < foldLines.length; i++) { + var cmp = foldLines[i].range.compareRange(range); + if (cmp == 2) { + continue; + } + else if (cmp == -2) { + break; + } + + var folds = foldLines[i].folds; + for (var j = 0; j < folds.length; j++) { + var fold = folds[j]; + cmp = fold.range.compareRange(range); + if (cmp == -2) { + break; + } else if (cmp == 2) { + continue; + } else + if (cmp == 42) { + break; + } + foundFolds.push(fold); + } + } + start.column -= 1; + end.column += 1; + + return foundFolds; + }; + + this.getFoldsInRangeList = function(ranges) { + if (Array.isArray(ranges)) { + var folds = []; + ranges.forEach(function(range) { + folds = folds.concat(this.getFoldsInRange(range)); + }, this); + } else { + var folds = this.getFoldsInRange(ranges); + } + return folds; + }; + this.getAllFolds = function() { + var folds = []; + var foldLines = this.$foldData; + + for (var i = 0; i < foldLines.length; i++) + for (var j = 0; j < foldLines[i].folds.length; j++) + folds.push(foldLines[i].folds[j]); + + return folds; + }; + this.getFoldStringAt = function(row, column, trim, foldLine) { + foldLine = foldLine || this.getFoldLine(row); + if (!foldLine) + return null; + + var lastFold = { + end: { column: 0 } + }; + var str, fold; + for (var i = 0; i < foldLine.folds.length; i++) { + fold = foldLine.folds[i]; + var cmp = fold.range.compareEnd(row, column); + if (cmp == -1) { + str = this + .getLine(fold.start.row) + .substring(lastFold.end.column, fold.start.column); + break; + } + else if (cmp === 0) { + return null; + } + lastFold = fold; + } + if (!str) + str = this.getLine(fold.start.row).substring(lastFold.end.column); + + if (trim == -1) + return str.substring(0, column - lastFold.end.column); + else if (trim == 1) + return str.substring(column - lastFold.end.column); + else + return str; + }; + + this.getFoldLine = function(docRow, startFoldLine) { + var foldData = this.$foldData; + var i = 0; + if (startFoldLine) + i = foldData.indexOf(startFoldLine); + if (i == -1) + i = 0; + for (i; i < foldData.length; i++) { + var foldLine = foldData[i]; + if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) { + return foldLine; + } else if (foldLine.end.row > docRow) { + return null; + } + } + return null; + }; + this.getNextFoldLine = function(docRow, startFoldLine) { + var foldData = this.$foldData; + var i = 0; + if (startFoldLine) + i = foldData.indexOf(startFoldLine); + if (i == -1) + i = 0; + for (i; i < foldData.length; i++) { + var foldLine = foldData[i]; + if (foldLine.end.row >= docRow) { + return foldLine; + } + } + return null; + }; + + this.getFoldedRowCount = function(first, last) { + var foldData = this.$foldData, rowCount = last-first+1; + for (var i = 0; i < foldData.length; i++) { + var foldLine = foldData[i], + end = foldLine.end.row, + start = foldLine.start.row; + if (end >= last) { + if (start < last) { + if (start >= first) + rowCount -= last-start; + else + rowCount = 0; // in one fold + } + break; + } else if (end >= first){ + if (start >= first) // fold inside range + rowCount -= end-start; + else + rowCount -= end-first+1; + } + } + return rowCount; + }; + + this.$addFoldLine = function(foldLine) { + this.$foldData.push(foldLine); + this.$foldData.sort(function(a, b) { + return a.start.row - b.start.row; + }); + return foldLine; + }; + this.addFold = function(placeholder, range) { + var foldData = this.$foldData; + var added = false; + var fold; + + if (placeholder instanceof Fold) + fold = placeholder; + else { + fold = new Fold(range, placeholder); + fold.collapseChildren = range.collapseChildren; + } + this.$clipRangeToDocument(fold.range); + + var startRow = fold.start.row; + var startColumn = fold.start.column; + var endRow = fold.end.row; + var endColumn = fold.end.column; + if (!(startRow < endRow || + startRow == endRow && startColumn <= endColumn - 2)) + throw new Error("The range has to be at least 2 characters width"); + + var startFold = this.getFoldAt(startRow, startColumn, 1); + var endFold = this.getFoldAt(endRow, endColumn, -1); + if (startFold && endFold == startFold) + return startFold.addSubFold(fold); + + if (startFold && !startFold.range.isStart(startRow, startColumn)) + this.removeFold(startFold); + + if (endFold && !endFold.range.isEnd(endRow, endColumn)) + this.removeFold(endFold); + var folds = this.getFoldsInRange(fold.range); + if (folds.length > 0) { + this.removeFolds(folds); + folds.forEach(function(subFold) { + fold.addSubFold(subFold); + }); + } + + for (var i = 0; i < foldData.length; i++) { + var foldLine = foldData[i]; + if (endRow == foldLine.start.row) { + foldLine.addFold(fold); + added = true; + break; + } else if (startRow == foldLine.end.row) { + foldLine.addFold(fold); + added = true; + if (!fold.sameRow) { + var foldLineNext = foldData[i + 1]; + if (foldLineNext && foldLineNext.start.row == endRow) { + foldLine.merge(foldLineNext); + break; + } + } + break; + } else if (endRow <= foldLine.start.row) { + break; + } + } + + if (!added) + foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold)); + + if (this.$useWrapMode) + this.$updateWrapData(foldLine.start.row, foldLine.start.row); + else + this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row); + this.$modified = true; + this._signal("changeFold", { data: fold, action: "add" }); + + return fold; + }; + + this.addFolds = function(folds) { + folds.forEach(function(fold) { + this.addFold(fold); + }, this); + }; + + this.removeFold = function(fold) { + var foldLine = fold.foldLine; + var startRow = foldLine.start.row; + var endRow = foldLine.end.row; + + var foldLines = this.$foldData; + var folds = foldLine.folds; + if (folds.length == 1) { + foldLines.splice(foldLines.indexOf(foldLine), 1); + } else + if (foldLine.range.isEnd(fold.end.row, fold.end.column)) { + folds.pop(); + foldLine.end.row = folds[folds.length - 1].end.row; + foldLine.end.column = folds[folds.length - 1].end.column; + } else + if (foldLine.range.isStart(fold.start.row, fold.start.column)) { + folds.shift(); + foldLine.start.row = folds[0].start.row; + foldLine.start.column = folds[0].start.column; + } else + if (fold.sameRow) { + folds.splice(folds.indexOf(fold), 1); + } else + { + var newFoldLine = foldLine.split(fold.start.row, fold.start.column); + folds = newFoldLine.folds; + folds.shift(); + newFoldLine.start.row = folds[0].start.row; + newFoldLine.start.column = folds[0].start.column; + } + + if (!this.$updating) { + if (this.$useWrapMode) + this.$updateWrapData(startRow, endRow); + else + this.$updateRowLengthCache(startRow, endRow); + } + this.$modified = true; + this._signal("changeFold", { data: fold, action: "remove" }); + }; + + this.removeFolds = function(folds) { + var cloneFolds = []; + for (var i = 0; i < folds.length; i++) { + cloneFolds.push(folds[i]); + } + + cloneFolds.forEach(function(fold) { + this.removeFold(fold); + }, this); + this.$modified = true; + }; + + this.expandFold = function(fold) { + this.removeFold(fold); + fold.subFolds.forEach(function(subFold) { + fold.restoreRange(subFold); + this.addFold(subFold); + }, this); + if (fold.collapseChildren > 0) { + this.foldAll(fold.start.row+1, fold.end.row, fold.collapseChildren-1); + } + fold.subFolds = []; + }; + + this.expandFolds = function(folds) { + folds.forEach(function(fold) { + this.expandFold(fold); + }, this); + }; + + this.unfold = function(location, expandInner) { + var range, folds; + if (location == null) { + range = new Range(0, 0, this.getLength(), 0); + expandInner = true; + } else if (typeof location == "number") + range = new Range(location, 0, location, this.getLine(location).length); + else if ("row" in location) + range = Range.fromPoints(location, location); + else + range = location; + + folds = this.getFoldsInRangeList(range); + if (expandInner) { + this.removeFolds(folds); + } else { + var subFolds = folds; + while (subFolds.length) { + this.expandFolds(subFolds); + subFolds = this.getFoldsInRangeList(range); + } + } + if (folds.length) + return folds; + }; + this.isRowFolded = function(docRow, startFoldRow) { + return !!this.getFoldLine(docRow, startFoldRow); + }; + + this.getRowFoldEnd = function(docRow, startFoldRow) { + var foldLine = this.getFoldLine(docRow, startFoldRow); + return foldLine ? foldLine.end.row : docRow; + }; + + this.getRowFoldStart = function(docRow, startFoldRow) { + var foldLine = this.getFoldLine(docRow, startFoldRow); + return foldLine ? foldLine.start.row : docRow; + }; + + this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) { + if (startRow == null) + startRow = foldLine.start.row; + if (startColumn == null) + startColumn = 0; + if (endRow == null) + endRow = foldLine.end.row; + if (endColumn == null) + endColumn = this.getLine(endRow).length; + var doc = this.doc; + var textLine = ""; + + foldLine.walk(function(placeholder, row, column, lastColumn) { + if (row < startRow) + return; + if (row == startRow) { + if (column < startColumn) + return; + lastColumn = Math.max(startColumn, lastColumn); + } + + if (placeholder != null) { + textLine += placeholder; + } else { + textLine += doc.getLine(row).substring(lastColumn, column); + } + }, endRow, endColumn); + return textLine; + }; + + this.getDisplayLine = function(row, endColumn, startRow, startColumn) { + var foldLine = this.getFoldLine(row); + + if (!foldLine) { + var line; + line = this.doc.getLine(row); + return line.substring(startColumn || 0, endColumn || line.length); + } else { + return this.getFoldDisplayLine( + foldLine, row, endColumn, startRow, startColumn); + } + }; + + this.$cloneFoldData = function() { + var fd = []; + fd = this.$foldData.map(function(foldLine) { + var folds = foldLine.folds.map(function(fold) { + return fold.clone(); + }); + return new FoldLine(fd, folds); + }); + + return fd; + }; + + this.toggleFold = function(tryToUnfold) { + var selection = this.selection; + var range = selection.getRange(); + var fold; + var bracketPos; + + if (range.isEmpty()) { + var cursor = range.start; + fold = this.getFoldAt(cursor.row, cursor.column); + + if (fold) { + this.expandFold(fold); + return; + } else if (bracketPos = this.findMatchingBracket(cursor)) { + if (range.comparePoint(bracketPos) == 1) { + range.end = bracketPos; + } else { + range.start = bracketPos; + range.start.column++; + range.end.column--; + } + } else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) { + if (range.comparePoint(bracketPos) == 1) + range.end = bracketPos; + else + range.start = bracketPos; + + range.start.column++; + } else { + range = this.getCommentFoldRange(cursor.row, cursor.column) || range; + } + } else { + var folds = this.getFoldsInRange(range); + if (tryToUnfold && folds.length) { + this.expandFolds(folds); + return; + } else if (folds.length == 1 ) { + fold = folds[0]; + } + } + + if (!fold) + fold = this.getFoldAt(range.start.row, range.start.column); + + if (fold && fold.range.toString() == range.toString()) { + this.expandFold(fold); + return; + } + + var placeholder = "..."; + if (!range.isMultiLine()) { + placeholder = this.getTextRange(range); + if (placeholder.length < 4) + return; + placeholder = placeholder.trim().substring(0, 2) + ".."; + } + + this.addFold(placeholder, range); + }; + + this.getCommentFoldRange = function(row, column, dir) { + var iterator = new TokenIterator(this, row, column); + var token = iterator.getCurrentToken(); + if (token && /^comment|string/.test(token.type)) { + var range = new Range(); + var re = new RegExp(token.type.replace(/\..*/, "\\.")); + if (dir != 1) { + do { + token = iterator.stepBackward(); + } while (token && re.test(token.type)); + iterator.stepForward(); + } + + range.start.row = iterator.getCurrentTokenRow(); + range.start.column = iterator.getCurrentTokenColumn() + 2; + + iterator = new TokenIterator(this, row, column); + + if (dir != -1) { + do { + token = iterator.stepForward(); + } while (token && re.test(token.type)); + token = iterator.stepBackward(); + } else + token = iterator.getCurrentToken(); + + range.end.row = iterator.getCurrentTokenRow(); + range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2; + return range; + } + }; + + this.foldAll = function(startRow, endRow, depth) { + if (depth == undefined) + depth = 100000; // JSON.stringify doesn't hanle Infinity + var foldWidgets = this.foldWidgets; + if (!foldWidgets) + return; // mode doesn't support folding + endRow = endRow || this.getLength(); + startRow = startRow || 0; + for (var row = startRow; row < endRow; row++) { + if (foldWidgets[row] == null) + foldWidgets[row] = this.getFoldWidget(row); + if (foldWidgets[row] != "start") + continue; + + var range = this.getFoldWidgetRange(row); + if (range && range.isMultiLine() + && range.end.row <= endRow + && range.start.row >= startRow + ) { + row = range.end.row; + try { + var fold = this.addFold("...", range); + if (fold) + fold.collapseChildren = depth; + } catch(e) {} + } + } + }; + this.$foldStyles = { + "manual": 1, + "markbegin": 1, + "markbeginend": 1 + }; + this.$foldStyle = "markbegin"; + this.setFoldStyle = function(style) { + if (!this.$foldStyles[style]) + throw new Error("invalid fold style: " + style + "[" + Object.keys(this.$foldStyles).join(", ") + "]"); + + if (this.$foldStyle == style) + return; + + this.$foldStyle = style; + + if (style == "manual") + this.unfold(); + var mode = this.$foldMode; + this.$setFolding(null); + this.$setFolding(mode); + }; + + this.$setFolding = function(foldMode) { + if (this.$foldMode == foldMode) + return; + + this.$foldMode = foldMode; + + this.off('change', this.$updateFoldWidgets); + this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets); + this._signal("changeAnnotation"); + + if (!foldMode || this.$foldStyle == "manual") { + this.foldWidgets = null; + return; + } + + this.foldWidgets = []; + this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle); + this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle); + + this.$updateFoldWidgets = this.updateFoldWidgets.bind(this); + this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this); + this.on('change', this.$updateFoldWidgets); + this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets); + }; + + this.getParentFoldRangeData = function (row, ignoreCurrent) { + var fw = this.foldWidgets; + if (!fw || (ignoreCurrent && fw[row])) + return {}; + + var i = row - 1, firstRange; + while (i >= 0) { + var c = fw[i]; + if (c == null) + c = fw[i] = this.getFoldWidget(i); + + if (c == "start") { + var range = this.getFoldWidgetRange(i); + if (!firstRange) + firstRange = range; + if (range && range.end.row >= row) + break; + } + i--; + } + + return { + range: i !== -1 && range, + firstRange: firstRange + }; + }; + + this.onFoldWidgetClick = function(row, e) { + e = e.domEvent; + var options = { + children: e.shiftKey, + all: e.ctrlKey || e.metaKey, + siblings: e.altKey + }; + + var range = this.$toggleFoldWidget(row, options); + if (!range) { + var el = (e.target || e.srcElement); + if (el && /ace_fold-widget/.test(el.className)) + el.className += " ace_invalid"; + } + }; + + this.$toggleFoldWidget = function(row, options) { + if (!this.getFoldWidget) + return; + var type = this.getFoldWidget(row); + var line = this.getLine(row); + + var dir = type === "end" ? -1 : 1; + var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir); + + if (fold) { + if (options.children || options.all) + this.removeFold(fold); + else + this.expandFold(fold); + return; + } + + var range = this.getFoldWidgetRange(row, true); + if (range && !range.isMultiLine()) { + fold = this.getFoldAt(range.start.row, range.start.column, 1); + if (fold && range.isEqual(fold.range)) { + this.removeFold(fold); + return; + } + } + + if (options.siblings) { + var data = this.getParentFoldRangeData(row); + if (data.range) { + var startRow = data.range.start.row + 1; + var endRow = data.range.end.row; + } + this.foldAll(startRow, endRow, options.all ? 10000 : 0); + } else if (options.children) { + endRow = range ? range.end.row : this.getLength(); + this.foldAll(row + 1, endRow, options.all ? 10000 : 0); + } else if (range) { + if (options.all) + range.collapseChildren = 10000; + this.addFold("...", range); + } + + return range; + }; + + + + this.toggleFoldWidget = function(toggleParent) { + var row = this.selection.getCursor().row; + row = this.getRowFoldStart(row); + var range = this.$toggleFoldWidget(row, {}); + + if (range) + return; + var data = this.getParentFoldRangeData(row, true); + range = data.range || data.firstRange; + + if (range) { + row = range.start.row; + var fold = this.getFoldAt(row, this.getLine(row).length, 1); + + if (fold) { + this.removeFold(fold); + } else { + this.addFold("...", range); + } + } + }; + + this.updateFoldWidgets = function(delta) { + var firstRow = delta.start.row; + var len = delta.end.row - firstRow; + + if (len === 0) { + this.foldWidgets[firstRow] = null; + } else if (delta.action == 'remove') { + this.foldWidgets.splice(firstRow, len + 1, null); + } else { + var args = Array(len + 1); + args.unshift(firstRow, 1); + this.foldWidgets.splice.apply(this.foldWidgets, args); + } + }; + this.tokenizerUpdateFoldWidgets = function(e) { + var rows = e.data; + if (rows.first != rows.last) { + if (this.foldWidgets.length > rows.first) + this.foldWidgets.splice(rows.first, this.foldWidgets.length); + } + }; +} + +exports.Folding = Folding; + +}); + +ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"], function(acequire, exports, module) { +"use strict"; + +var TokenIterator = acequire("../token_iterator").TokenIterator; +var Range = acequire("../range").Range; + + +function BracketMatch() { + + this.findMatchingBracket = function(position, chr) { + if (position.column == 0) return null; + + var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1); + if (charBeforeCursor == "") return null; + + var match = charBeforeCursor.match(/([\(\[\{])|([\)\]\}])/); + if (!match) + return null; + + if (match[1]) + return this.$findClosingBracket(match[1], position); + else + return this.$findOpeningBracket(match[2], position); + }; + + this.getBracketRange = function(pos) { + var line = this.getLine(pos.row); + var before = true, range; + + var chr = line.charAt(pos.column-1); + var match = chr && chr.match(/([\(\[\{])|([\)\]\}])/); + if (!match) { + chr = line.charAt(pos.column); + pos = {row: pos.row, column: pos.column + 1}; + match = chr && chr.match(/([\(\[\{])|([\)\]\}])/); + before = false; + } + if (!match) + return null; + + if (match[1]) { + var bracketPos = this.$findClosingBracket(match[1], pos); + if (!bracketPos) + return null; + range = Range.fromPoints(pos, bracketPos); + if (!before) { + range.end.column++; + range.start.column--; + } + range.cursor = range.end; + } else { + var bracketPos = this.$findOpeningBracket(match[2], pos); + if (!bracketPos) + return null; + range = Range.fromPoints(bracketPos, pos); + if (!before) { + range.start.column++; + range.end.column--; + } + range.cursor = range.start; + } + + return range; + }; + + this.$brackets = { + ")": "(", + "(": ")", + "]": "[", + "[": "]", + "{": "}", + "}": "{" + }; + + this.$findOpeningBracket = function(bracket, position, typeRe) { + var openBracket = this.$brackets[bracket]; + var depth = 1; + + var iterator = new TokenIterator(this, position.row, position.column); + var token = iterator.getCurrentToken(); + if (!token) + token = iterator.stepForward(); + if (!token) + return; + + if (!typeRe){ + typeRe = new RegExp( + "(\\.?" + + token.type.replace(".", "\\.").replace("rparen", ".paren") + .replace(/\b(?:end)\b/, "(?:start|begin|end)") + + ")+" + ); + } + var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2; + var value = token.value; + + while (true) { + + while (valueIndex >= 0) { + var chr = value.charAt(valueIndex); + if (chr == openBracket) { + depth -= 1; + if (depth == 0) { + return {row: iterator.getCurrentTokenRow(), + column: valueIndex + iterator.getCurrentTokenColumn()}; + } + } + else if (chr == bracket) { + depth += 1; + } + valueIndex -= 1; + } + do { + token = iterator.stepBackward(); + } while (token && !typeRe.test(token.type)); + + if (token == null) + break; + + value = token.value; + valueIndex = value.length - 1; + } + + return null; + }; + + this.$findClosingBracket = function(bracket, position, typeRe) { + var closingBracket = this.$brackets[bracket]; + var depth = 1; + + var iterator = new TokenIterator(this, position.row, position.column); + var token = iterator.getCurrentToken(); + if (!token) + token = iterator.stepForward(); + if (!token) + return; + + if (!typeRe){ + typeRe = new RegExp( + "(\\.?" + + token.type.replace(".", "\\.").replace("lparen", ".paren") + .replace(/\b(?:start|begin)\b/, "(?:start|begin|end)") + + ")+" + ); + } + var valueIndex = position.column - iterator.getCurrentTokenColumn(); + + while (true) { + + var value = token.value; + var valueLength = value.length; + while (valueIndex < valueLength) { + var chr = value.charAt(valueIndex); + if (chr == closingBracket) { + depth -= 1; + if (depth == 0) { + return {row: iterator.getCurrentTokenRow(), + column: valueIndex + iterator.getCurrentTokenColumn()}; + } + } + else if (chr == bracket) { + depth += 1; + } + valueIndex += 1; + } + do { + token = iterator.stepForward(); + } while (token && !typeRe.test(token.type)); + + if (token == null) + break; + + valueIndex = 0; + } + + return null; + }; +} +exports.BracketMatch = BracketMatch; + +}); + +ace.define("ace/edit_session",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/config","ace/lib/event_emitter","ace/selection","ace/mode/text","ace/range","ace/document","ace/background_tokenizer","ace/search_highlight","ace/edit_session/folding","ace/edit_session/bracket_match"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("./lib/oop"); +var lang = acequire("./lib/lang"); +var config = acequire("./config"); +var EventEmitter = acequire("./lib/event_emitter").EventEmitter; +var Selection = acequire("./selection").Selection; +var TextMode = acequire("./mode/text").Mode; +var Range = acequire("./range").Range; +var Document = acequire("./document").Document; +var BackgroundTokenizer = acequire("./background_tokenizer").BackgroundTokenizer; +var SearchHighlight = acequire("./search_highlight").SearchHighlight; + +var EditSession = function(text, mode) { + this.$breakpoints = []; + this.$decorations = []; + this.$frontMarkers = {}; + this.$backMarkers = {}; + this.$markerId = 1; + this.$undoSelect = true; + + this.$foldData = []; + this.$foldData.toString = function() { + return this.join("\n"); + }; + this.on("changeFold", this.onChangeFold.bind(this)); + this.$onChange = this.onChange.bind(this); + + if (typeof text != "object" || !text.getLine) + text = new Document(text); + + this.setDocument(text); + this.selection = new Selection(this); + + config.resetOptions(this); + this.setMode(mode); + config._signal("session", this); +}; + + +(function() { + + oop.implement(this, EventEmitter); + this.setDocument = function(doc) { + if (this.doc) + this.doc.removeListener("change", this.$onChange); + + this.doc = doc; + doc.on("change", this.$onChange); + + if (this.bgTokenizer) + this.bgTokenizer.setDocument(this.getDocument()); + + this.resetCaches(); + }; + this.getDocument = function() { + return this.doc; + }; + this.$resetRowCache = function(docRow) { + if (!docRow) { + this.$docRowCache = []; + this.$screenRowCache = []; + return; + } + var l = this.$docRowCache.length; + var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1; + if (l > i) { + this.$docRowCache.splice(i, l); + this.$screenRowCache.splice(i, l); + } + }; + + this.$getRowCacheIndex = function(cacheArray, val) { + var low = 0; + var hi = cacheArray.length - 1; + + while (low <= hi) { + var mid = (low + hi) >> 1; + var c = cacheArray[mid]; + + if (val > c) + low = mid + 1; + else if (val < c) + hi = mid - 1; + else + return mid; + } + + return low -1; + }; + + this.resetCaches = function() { + this.$modified = true; + this.$wrapData = []; + this.$rowLengthCache = []; + this.$resetRowCache(0); + if (this.bgTokenizer) + this.bgTokenizer.start(0); + }; + + this.onChangeFold = function(e) { + var fold = e.data; + this.$resetRowCache(fold.start.row); + }; + + this.onChange = function(delta) { + this.$modified = true; + + this.$resetRowCache(delta.start.row); + + var removedFolds = this.$updateInternalDataOnChange(delta); + if (!this.$fromUndo && this.$undoManager && !delta.ignore) { + this.$deltasDoc.push(delta); + if (removedFolds && removedFolds.length != 0) { + this.$deltasFold.push({ + action: "removeFolds", + folds: removedFolds + }); + } + + this.$informUndoManager.schedule(); + } + + this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta); + this._signal("change", delta); + }; + this.setValue = function(text) { + this.doc.setValue(text); + this.selection.moveTo(0, 0); + + this.$resetRowCache(0); + this.$deltas = []; + this.$deltasDoc = []; + this.$deltasFold = []; + this.setUndoManager(this.$undoManager); + this.getUndoManager().reset(); + }; + this.getValue = + this.toString = function() { + return this.doc.getValue(); + }; + this.getSelection = function() { + return this.selection; + }; + this.getState = function(row) { + return this.bgTokenizer.getState(row); + }; + this.getTokens = function(row) { + return this.bgTokenizer.getTokens(row); + }; + this.getTokenAt = function(row, column) { + var tokens = this.bgTokenizer.getTokens(row); + var token, c = 0; + if (column == null) { + i = tokens.length - 1; + c = this.getLine(row).length; + } else { + for (var i = 0; i < tokens.length; i++) { + c += tokens[i].value.length; + if (c >= column) + break; + } + } + token = tokens[i]; + if (!token) + return null; + token.index = i; + token.start = c - token.value.length; + return token; + }; + this.setUndoManager = function(undoManager) { + this.$undoManager = undoManager; + this.$deltas = []; + this.$deltasDoc = []; + this.$deltasFold = []; + + if (this.$informUndoManager) + this.$informUndoManager.cancel(); + + if (undoManager) { + var self = this; + + this.$syncInformUndoManager = function() { + self.$informUndoManager.cancel(); + + if (self.$deltasFold.length) { + self.$deltas.push({ + group: "fold", + deltas: self.$deltasFold + }); + self.$deltasFold = []; + } + + if (self.$deltasDoc.length) { + self.$deltas.push({ + group: "doc", + deltas: self.$deltasDoc + }); + self.$deltasDoc = []; + } + + if (self.$deltas.length > 0) { + undoManager.execute({ + action: "aceupdate", + args: [self.$deltas, self], + merge: self.mergeUndoDeltas + }); + } + self.mergeUndoDeltas = false; + self.$deltas = []; + }; + this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager); + } + }; + this.markUndoGroup = function() { + if (this.$syncInformUndoManager) + this.$syncInformUndoManager(); + }; + + this.$defaultUndoManager = { + undo: function() {}, + redo: function() {}, + reset: function() {} + }; + this.getUndoManager = function() { + return this.$undoManager || this.$defaultUndoManager; + }; + this.getTabString = function() { + if (this.getUseSoftTabs()) { + return lang.stringRepeat(" ", this.getTabSize()); + } else { + return "\t"; + } + }; + this.setUseSoftTabs = function(val) { + this.setOption("useSoftTabs", val); + }; + this.getUseSoftTabs = function() { + return this.$useSoftTabs && !this.$mode.$indentWithTabs; + }; + this.setTabSize = function(tabSize) { + this.setOption("tabSize", tabSize); + }; + this.getTabSize = function() { + return this.$tabSize; + }; + this.isTabStop = function(position) { + return this.$useSoftTabs && (position.column % this.$tabSize === 0); + }; + + this.$overwrite = false; + this.setOverwrite = function(overwrite) { + this.setOption("overwrite", overwrite); + }; + this.getOverwrite = function() { + return this.$overwrite; + }; + this.toggleOverwrite = function() { + this.setOverwrite(!this.$overwrite); + }; + this.addGutterDecoration = function(row, className) { + if (!this.$decorations[row]) + this.$decorations[row] = ""; + this.$decorations[row] += " " + className; + this._signal("changeBreakpoint", {}); + }; + this.removeGutterDecoration = function(row, className) { + this.$decorations[row] = (this.$decorations[row] || "").replace(" " + className, ""); + this._signal("changeBreakpoint", {}); + }; + this.getBreakpoints = function() { + return this.$breakpoints; + }; + this.setBreakpoints = function(rows) { + this.$breakpoints = []; + for (var i=0; i 0) + inToken = !!line.charAt(column - 1).match(this.tokenRe); + + if (!inToken) + inToken = !!line.charAt(column).match(this.tokenRe); + + if (inToken) + var re = this.tokenRe; + else if (/^\s+$/.test(line.slice(column-1, column+1))) + var re = /\s/; + else + var re = this.nonTokenRe; + + var start = column; + if (start > 0) { + do { + start--; + } + while (start >= 0 && line.charAt(start).match(re)); + start++; + } + + var end = column; + while (end < line.length && line.charAt(end).match(re)) { + end++; + } + + return new Range(row, start, row, end); + }; + this.getAWordRange = function(row, column) { + var wordRange = this.getWordRange(row, column); + var line = this.getLine(wordRange.end.row); + + while (line.charAt(wordRange.end.column).match(/[ \t]/)) { + wordRange.end.column += 1; + } + return wordRange; + }; + this.setNewLineMode = function(newLineMode) { + this.doc.setNewLineMode(newLineMode); + }; + this.getNewLineMode = function() { + return this.doc.getNewLineMode(); + }; + this.setUseWorker = function(useWorker) { this.setOption("useWorker", useWorker); }; + this.getUseWorker = function() { return this.$useWorker; }; + this.onReloadTokenizer = function(e) { + var rows = e.data; + this.bgTokenizer.start(rows.first); + this._signal("tokenizerUpdate", e); + }; + + this.$modes = {}; + this.$mode = null; + this.$modeId = null; + this.setMode = function(mode, cb) { + if (mode && typeof mode === "object") { + if (mode.getTokenizer) + return this.$onChangeMode(mode); + var options = mode; + var path = options.path; + } else { + path = mode || "ace/mode/text"; + } + if (!this.$modes["ace/mode/text"]) + this.$modes["ace/mode/text"] = new TextMode(); + + if (this.$modes[path] && !options) { + this.$onChangeMode(this.$modes[path]); + cb && cb(); + return; + } + this.$modeId = path; + config.loadModule(["mode", path], function(m) { + if (this.$modeId !== path) + return cb && cb(); + if (this.$modes[path] && !options) { + this.$onChangeMode(this.$modes[path]); + } else if (m && m.Mode) { + m = new m.Mode(options); + if (!options) { + this.$modes[path] = m; + m.$id = path; + } + this.$onChangeMode(m); + } + cb && cb(); + }.bind(this)); + if (!this.$mode) + this.$onChangeMode(this.$modes["ace/mode/text"], true); + }; + + this.$onChangeMode = function(mode, $isPlaceholder) { + if (!$isPlaceholder) + this.$modeId = mode.$id; + if (this.$mode === mode) + return; + + this.$mode = mode; + + this.$stopWorker(); + + if (this.$useWorker) + this.$startWorker(); + + var tokenizer = mode.getTokenizer(); + + if(tokenizer.addEventListener !== undefined) { + var onReloadTokenizer = this.onReloadTokenizer.bind(this); + tokenizer.addEventListener("update", onReloadTokenizer); + } + + if (!this.bgTokenizer) { + this.bgTokenizer = new BackgroundTokenizer(tokenizer); + var _self = this; + this.bgTokenizer.addEventListener("update", function(e) { + _self._signal("tokenizerUpdate", e); + }); + } else { + this.bgTokenizer.setTokenizer(tokenizer); + } + + this.bgTokenizer.setDocument(this.getDocument()); + + this.tokenRe = mode.tokenRe; + this.nonTokenRe = mode.nonTokenRe; + + + if (!$isPlaceholder) { + if (mode.attachToSession) + mode.attachToSession(this); + this.$options.wrapMethod.set.call(this, this.$wrapMethod); + this.$setFolding(mode.foldingRules); + this.bgTokenizer.start(0); + this._emit("changeMode"); + } + }; + + this.$stopWorker = function() { + if (this.$worker) { + this.$worker.terminate(); + this.$worker = null; + } + }; + + this.$startWorker = function() { + try { + this.$worker = this.$mode.createWorker(this); + } catch (e) { + config.warn("Could not load worker", e); + this.$worker = null; + } + }; + this.getMode = function() { + return this.$mode; + }; + + this.$scrollTop = 0; + this.setScrollTop = function(scrollTop) { + if (this.$scrollTop === scrollTop || isNaN(scrollTop)) + return; + + this.$scrollTop = scrollTop; + this._signal("changeScrollTop", scrollTop); + }; + this.getScrollTop = function() { + return this.$scrollTop; + }; + + this.$scrollLeft = 0; + this.setScrollLeft = function(scrollLeft) { + if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft)) + return; + + this.$scrollLeft = scrollLeft; + this._signal("changeScrollLeft", scrollLeft); + }; + this.getScrollLeft = function() { + return this.$scrollLeft; + }; + this.getScreenWidth = function() { + this.$computeWidth(); + if (this.lineWidgets) + return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth); + return this.screenWidth; + }; + + this.getLineWidgetMaxWidth = function() { + if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth; + var width = 0; + this.lineWidgets.forEach(function(w) { + if (w && w.screenWidth > width) + width = w.screenWidth; + }); + return this.lineWidgetWidth = width; + }; + + this.$computeWidth = function(force) { + if (this.$modified || force) { + this.$modified = false; + + if (this.$useWrapMode) + return this.screenWidth = this.$wrapLimit; + + var lines = this.doc.getAllLines(); + var cache = this.$rowLengthCache; + var longestScreenLine = 0; + var foldIndex = 0; + var foldLine = this.$foldData[foldIndex]; + var foldStart = foldLine ? foldLine.start.row : Infinity; + var len = lines.length; + + for (var i = 0; i < len; i++) { + if (i > foldStart) { + i = foldLine.end.row + 1; + if (i >= len) + break; + foldLine = this.$foldData[foldIndex++]; + foldStart = foldLine ? foldLine.start.row : Infinity; + } + + if (cache[i] == null) + cache[i] = this.$getStringScreenWidth(lines[i])[0]; + + if (cache[i] > longestScreenLine) + longestScreenLine = cache[i]; + } + this.screenWidth = longestScreenLine; + } + }; + this.getLine = function(row) { + return this.doc.getLine(row); + }; + this.getLines = function(firstRow, lastRow) { + return this.doc.getLines(firstRow, lastRow); + }; + this.getLength = function() { + return this.doc.getLength(); + }; + this.getTextRange = function(range) { + return this.doc.getTextRange(range || this.selection.getRange()); + }; + this.insert = function(position, text) { + return this.doc.insert(position, text); + }; + this.remove = function(range) { + return this.doc.remove(range); + }; + this.removeFullLines = function(firstRow, lastRow){ + return this.doc.removeFullLines(firstRow, lastRow); + }; + this.undoChanges = function(deltas, dontSelect) { + if (!deltas.length) + return; + + this.$fromUndo = true; + var lastUndoRange = null; + for (var i = deltas.length - 1; i != -1; i--) { + var delta = deltas[i]; + if (delta.group == "doc") { + this.doc.revertDeltas(delta.deltas); + lastUndoRange = + this.$getUndoSelection(delta.deltas, true, lastUndoRange); + } else { + delta.deltas.forEach(function(foldDelta) { + this.addFolds(foldDelta.folds); + }, this); + } + } + this.$fromUndo = false; + lastUndoRange && + this.$undoSelect && + !dontSelect && + this.selection.setSelectionRange(lastUndoRange); + return lastUndoRange; + }; + this.redoChanges = function(deltas, dontSelect) { + if (!deltas.length) + return; + + this.$fromUndo = true; + var lastUndoRange = null; + for (var i = 0; i < deltas.length; i++) { + var delta = deltas[i]; + if (delta.group == "doc") { + this.doc.applyDeltas(delta.deltas); + lastUndoRange = + this.$getUndoSelection(delta.deltas, false, lastUndoRange); + } + } + this.$fromUndo = false; + lastUndoRange && + this.$undoSelect && + !dontSelect && + this.selection.setSelectionRange(lastUndoRange); + return lastUndoRange; + }; + this.setUndoSelect = function(enable) { + this.$undoSelect = enable; + }; + + this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) { + function isInsert(delta) { + return isUndo ? delta.action !== "insert" : delta.action === "insert"; + } + + var delta = deltas[0]; + var range, point; + var lastDeltaIsInsert = false; + if (isInsert(delta)) { + range = Range.fromPoints(delta.start, delta.end); + lastDeltaIsInsert = true; + } else { + range = Range.fromPoints(delta.start, delta.start); + lastDeltaIsInsert = false; + } + + for (var i = 1; i < deltas.length; i++) { + delta = deltas[i]; + if (isInsert(delta)) { + point = delta.start; + if (range.compare(point.row, point.column) == -1) { + range.setStart(point); + } + point = delta.end; + if (range.compare(point.row, point.column) == 1) { + range.setEnd(point); + } + lastDeltaIsInsert = true; + } else { + point = delta.start; + if (range.compare(point.row, point.column) == -1) { + range = Range.fromPoints(delta.start, delta.start); + } + lastDeltaIsInsert = false; + } + } + if (lastUndoRange != null) { + if (Range.comparePoints(lastUndoRange.start, range.start) === 0) { + lastUndoRange.start.column += range.end.column - range.start.column; + lastUndoRange.end.column += range.end.column - range.start.column; + } + + var cmp = lastUndoRange.compareRange(range); + if (cmp == 1) { + range.setStart(lastUndoRange.start); + } else if (cmp == -1) { + range.setEnd(lastUndoRange.end); + } + } + + return range; + }; + this.replace = function(range, text) { + return this.doc.replace(range, text); + }; + this.moveText = function(fromRange, toPosition, copy) { + var text = this.getTextRange(fromRange); + var folds = this.getFoldsInRange(fromRange); + + var toRange = Range.fromPoints(toPosition, toPosition); + if (!copy) { + this.remove(fromRange); + var rowDiff = fromRange.start.row - fromRange.end.row; + var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column; + if (collDiff) { + if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column) + toRange.start.column += collDiff; + if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column) + toRange.end.column += collDiff; + } + if (rowDiff && toRange.start.row >= fromRange.end.row) { + toRange.start.row += rowDiff; + toRange.end.row += rowDiff; + } + } + + toRange.end = this.insert(toRange.start, text); + if (folds.length) { + var oldStart = fromRange.start; + var newStart = toRange.start; + var rowDiff = newStart.row - oldStart.row; + var collDiff = newStart.column - oldStart.column; + this.addFolds(folds.map(function(x) { + x = x.clone(); + if (x.start.row == oldStart.row) + x.start.column += collDiff; + if (x.end.row == oldStart.row) + x.end.column += collDiff; + x.start.row += rowDiff; + x.end.row += rowDiff; + return x; + })); + } + + return toRange; + }; + this.indentRows = function(startRow, endRow, indentString) { + indentString = indentString.replace(/\t/g, this.getTabString()); + for (var row=startRow; row<=endRow; row++) + this.doc.insertInLine({row: row, column: 0}, indentString); + }; + this.outdentRows = function (range) { + var rowRange = range.collapseRows(); + var deleteRange = new Range(0, 0, 0, 0); + var size = this.getTabSize(); + + for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) { + var line = this.getLine(i); + + deleteRange.start.row = i; + deleteRange.end.row = i; + for (var j = 0; j < size; ++j) + if (line.charAt(j) != ' ') + break; + if (j < size && line.charAt(j) == '\t') { + deleteRange.start.column = j; + deleteRange.end.column = j + 1; + } else { + deleteRange.start.column = 0; + deleteRange.end.column = j; + } + this.remove(deleteRange); + } + }; + + this.$moveLines = function(firstRow, lastRow, dir) { + firstRow = this.getRowFoldStart(firstRow); + lastRow = this.getRowFoldEnd(lastRow); + if (dir < 0) { + var row = this.getRowFoldStart(firstRow + dir); + if (row < 0) return 0; + var diff = row-firstRow; + } else if (dir > 0) { + var row = this.getRowFoldEnd(lastRow + dir); + if (row > this.doc.getLength()-1) return 0; + var diff = row-lastRow; + } else { + firstRow = this.$clipRowToDocument(firstRow); + lastRow = this.$clipRowToDocument(lastRow); + var diff = lastRow - firstRow + 1; + } + + var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE); + var folds = this.getFoldsInRange(range).map(function(x){ + x = x.clone(); + x.start.row += diff; + x.end.row += diff; + return x; + }); + + var lines = dir == 0 + ? this.doc.getLines(firstRow, lastRow) + : this.doc.removeFullLines(firstRow, lastRow); + this.doc.insertFullLines(firstRow+diff, lines); + folds.length && this.addFolds(folds); + return diff; + }; + this.moveLinesUp = function(firstRow, lastRow) { + return this.$moveLines(firstRow, lastRow, -1); + }; + this.moveLinesDown = function(firstRow, lastRow) { + return this.$moveLines(firstRow, lastRow, 1); + }; + this.duplicateLines = function(firstRow, lastRow) { + return this.$moveLines(firstRow, lastRow, 0); + }; + + + this.$clipRowToDocument = function(row) { + return Math.max(0, Math.min(row, this.doc.getLength()-1)); + }; + + this.$clipColumnToRow = function(row, column) { + if (column < 0) + return 0; + return Math.min(this.doc.getLine(row).length, column); + }; + + + this.$clipPositionToDocument = function(row, column) { + column = Math.max(0, column); + + if (row < 0) { + row = 0; + column = 0; + } else { + var len = this.doc.getLength(); + if (row >= len) { + row = len - 1; + column = this.doc.getLine(len-1).length; + } else { + column = Math.min(this.doc.getLine(row).length, column); + } + } + + return { + row: row, + column: column + }; + }; + + this.$clipRangeToDocument = function(range) { + if (range.start.row < 0) { + range.start.row = 0; + range.start.column = 0; + } else { + range.start.column = this.$clipColumnToRow( + range.start.row, + range.start.column + ); + } + + var len = this.doc.getLength() - 1; + if (range.end.row > len) { + range.end.row = len; + range.end.column = this.doc.getLine(len).length; + } else { + range.end.column = this.$clipColumnToRow( + range.end.row, + range.end.column + ); + } + return range; + }; + this.$wrapLimit = 80; + this.$useWrapMode = false; + this.$wrapLimitRange = { + min : null, + max : null + }; + this.setUseWrapMode = function(useWrapMode) { + if (useWrapMode != this.$useWrapMode) { + this.$useWrapMode = useWrapMode; + this.$modified = true; + this.$resetRowCache(0); + if (useWrapMode) { + var len = this.getLength(); + this.$wrapData = Array(len); + this.$updateWrapData(0, len - 1); + } + + this._signal("changeWrapMode"); + } + }; + this.getUseWrapMode = function() { + return this.$useWrapMode; + }; + this.setWrapLimitRange = function(min, max) { + if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) { + this.$wrapLimitRange = { min: min, max: max }; + this.$modified = true; + if (this.$useWrapMode) + this._signal("changeWrapMode"); + } + }; + this.adjustWrapLimit = function(desiredLimit, $printMargin) { + var limits = this.$wrapLimitRange; + if (limits.max < 0) + limits = {min: $printMargin, max: $printMargin}; + var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max); + if (wrapLimit != this.$wrapLimit && wrapLimit > 1) { + this.$wrapLimit = wrapLimit; + this.$modified = true; + if (this.$useWrapMode) { + this.$updateWrapData(0, this.getLength() - 1); + this.$resetRowCache(0); + this._signal("changeWrapLimit"); + } + return true; + } + return false; + }; + + this.$constrainWrapLimit = function(wrapLimit, min, max) { + if (min) + wrapLimit = Math.max(min, wrapLimit); + + if (max) + wrapLimit = Math.min(max, wrapLimit); + + return wrapLimit; + }; + this.getWrapLimit = function() { + return this.$wrapLimit; + }; + this.setWrapLimit = function (limit) { + this.setWrapLimitRange(limit, limit); + }; + this.getWrapLimitRange = function() { + return { + min : this.$wrapLimitRange.min, + max : this.$wrapLimitRange.max + }; + }; + + this.$updateInternalDataOnChange = function(delta) { + var useWrapMode = this.$useWrapMode; + var action = delta.action; + var start = delta.start; + var end = delta.end; + var firstRow = start.row; + var lastRow = end.row; + var len = lastRow - firstRow; + var removedFolds = null; + + this.$updating = true; + if (len != 0) { + if (action === "remove") { + this[useWrapMode ? "$wrapData" : "$rowLengthCache"].splice(firstRow, len); + + var foldLines = this.$foldData; + removedFolds = this.getFoldsInRange(delta); + this.removeFolds(removedFolds); + + var foldLine = this.getFoldLine(end.row); + var idx = 0; + if (foldLine) { + foldLine.addRemoveChars(end.row, end.column, start.column - end.column); + foldLine.shiftRow(-len); + + var foldLineBefore = this.getFoldLine(firstRow); + if (foldLineBefore && foldLineBefore !== foldLine) { + foldLineBefore.merge(foldLine); + foldLine = foldLineBefore; + } + idx = foldLines.indexOf(foldLine) + 1; + } + + for (idx; idx < foldLines.length; idx++) { + var foldLine = foldLines[idx]; + if (foldLine.start.row >= end.row) { + foldLine.shiftRow(-len); + } + } + + lastRow = firstRow; + } else { + var args = Array(len); + args.unshift(firstRow, 0); + var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache + arr.splice.apply(arr, args); + var foldLines = this.$foldData; + var foldLine = this.getFoldLine(firstRow); + var idx = 0; + if (foldLine) { + var cmp = foldLine.range.compareInside(start.row, start.column); + if (cmp == 0) { + foldLine = foldLine.split(start.row, start.column); + if (foldLine) { + foldLine.shiftRow(len); + foldLine.addRemoveChars(lastRow, 0, end.column - start.column); + } + } else + if (cmp == -1) { + foldLine.addRemoveChars(firstRow, 0, end.column - start.column); + foldLine.shiftRow(len); + } + idx = foldLines.indexOf(foldLine) + 1; + } + + for (idx; idx < foldLines.length; idx++) { + var foldLine = foldLines[idx]; + if (foldLine.start.row >= firstRow) { + foldLine.shiftRow(len); + } + } + } + } else { + len = Math.abs(delta.start.column - delta.end.column); + if (action === "remove") { + removedFolds = this.getFoldsInRange(delta); + this.removeFolds(removedFolds); + + len = -len; + } + var foldLine = this.getFoldLine(firstRow); + if (foldLine) { + foldLine.addRemoveChars(firstRow, start.column, len); + } + } + + if (useWrapMode && this.$wrapData.length != this.doc.getLength()) { + console.error("doc.getLength() and $wrapData.length have to be the same!"); + } + this.$updating = false; + + if (useWrapMode) + this.$updateWrapData(firstRow, lastRow); + else + this.$updateRowLengthCache(firstRow, lastRow); + + return removedFolds; + }; + + this.$updateRowLengthCache = function(firstRow, lastRow, b) { + this.$rowLengthCache[firstRow] = null; + this.$rowLengthCache[lastRow] = null; + }; + + this.$updateWrapData = function(firstRow, lastRow) { + var lines = this.doc.getAllLines(); + var tabSize = this.getTabSize(); + var wrapData = this.$wrapData; + var wrapLimit = this.$wrapLimit; + var tokens; + var foldLine; + + var row = firstRow; + lastRow = Math.min(lastRow, lines.length - 1); + while (row <= lastRow) { + foldLine = this.getFoldLine(row, foldLine); + if (!foldLine) { + tokens = this.$getDisplayTokens(lines[row]); + wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize); + row ++; + } else { + tokens = []; + foldLine.walk(function(placeholder, row, column, lastColumn) { + var walkTokens; + if (placeholder != null) { + walkTokens = this.$getDisplayTokens( + placeholder, tokens.length); + walkTokens[0] = PLACEHOLDER_START; + for (var i = 1; i < walkTokens.length; i++) { + walkTokens[i] = PLACEHOLDER_BODY; + } + } else { + walkTokens = this.$getDisplayTokens( + lines[row].substring(lastColumn, column), + tokens.length); + } + tokens = tokens.concat(walkTokens); + }.bind(this), + foldLine.end.row, + lines[foldLine.end.row].length + 1 + ); + + wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize); + row = foldLine.end.row + 1; + } + } + }; + var CHAR = 1, + CHAR_EXT = 2, + PLACEHOLDER_START = 3, + PLACEHOLDER_BODY = 4, + PUNCTUATION = 9, + SPACE = 10, + TAB = 11, + TAB_SPACE = 12; + + + this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) { + if (tokens.length == 0) { + return []; + } + + var splits = []; + var displayLength = tokens.length; + var lastSplit = 0, lastDocSplit = 0; + + var isCode = this.$wrapAsCode; + + var indentedSoftWrap = this.$indentedSoftWrap; + var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8) + || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2); + + function getWrapIndent() { + var indentation = 0; + if (maxIndent === 0) + return indentation; + if (indentedSoftWrap) { + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + if (token == SPACE) + indentation += 1; + else if (token == TAB) + indentation += tabSize; + else if (token == TAB_SPACE) + continue; + else + break; + } + } + if (isCode && indentedSoftWrap !== false) + indentation += tabSize; + return Math.min(indentation, maxIndent); + } + function addSplit(screenPos) { + var displayed = tokens.slice(lastSplit, screenPos); + var len = displayed.length; + displayed.join("") + .replace(/12/g, function() { + len -= 1; + }) + .replace(/2/g, function() { + len -= 1; + }); + + if (!splits.length) { + indent = getWrapIndent(); + splits.indent = indent; + } + lastDocSplit += len; + splits.push(lastDocSplit); + lastSplit = screenPos; + } + var indent = 0; + while (displayLength - lastSplit > wrapLimit - indent) { + var split = lastSplit + wrapLimit - indent; + if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) { + addSplit(split); + continue; + } + if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) { + for (split; split != lastSplit - 1; split--) { + if (tokens[split] == PLACEHOLDER_START) { + break; + } + } + if (split > lastSplit) { + addSplit(split); + continue; + } + split = lastSplit + wrapLimit; + for (split; split < tokens.length; split++) { + if (tokens[split] != PLACEHOLDER_BODY) { + break; + } + } + if (split == tokens.length) { + break; // Breaks the while-loop. + } + addSplit(split); + continue; + } + var minSplit = Math.max(split - (wrapLimit -(wrapLimit>>2)), lastSplit - 1); + while (split > minSplit && tokens[split] < PLACEHOLDER_START) { + split --; + } + if (isCode) { + while (split > minSplit && tokens[split] < PLACEHOLDER_START) { + split --; + } + while (split > minSplit && tokens[split] == PUNCTUATION) { + split --; + } + } else { + while (split > minSplit && tokens[split] < SPACE) { + split --; + } + } + if (split > minSplit) { + addSplit(++split); + continue; + } + split = lastSplit + wrapLimit; + if (tokens[split] == CHAR_EXT) + split--; + addSplit(split - indent); + } + return splits; + }; + this.$getDisplayTokens = function(str, offset) { + var arr = []; + var tabSize; + offset = offset || 0; + + for (var i = 0; i < str.length; i++) { + var c = str.charCodeAt(i); + if (c == 9) { + tabSize = this.getScreenTabSize(arr.length + offset); + arr.push(TAB); + for (var n = 1; n < tabSize; n++) { + arr.push(TAB_SPACE); + } + } + else if (c == 32) { + arr.push(SPACE); + } else if((c > 39 && c < 48) || (c > 57 && c < 64)) { + arr.push(PUNCTUATION); + } + else if (c >= 0x1100 && isFullWidth(c)) { + arr.push(CHAR, CHAR_EXT); + } else { + arr.push(CHAR); + } + } + return arr; + }; + this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) { + if (maxScreenColumn == 0) + return [0, 0]; + if (maxScreenColumn == null) + maxScreenColumn = Infinity; + screenColumn = screenColumn || 0; + + var c, column; + for (column = 0; column < str.length; column++) { + c = str.charCodeAt(column); + if (c == 9) { + screenColumn += this.getScreenTabSize(screenColumn); + } + else if (c >= 0x1100 && isFullWidth(c)) { + screenColumn += 2; + } else { + screenColumn += 1; + } + if (screenColumn > maxScreenColumn) { + break; + } + } + + return [screenColumn, column]; + }; + + this.lineWidgets = null; + this.getRowLength = function(row) { + if (this.lineWidgets) + var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0; + else + h = 0 + if (!this.$useWrapMode || !this.$wrapData[row]) { + return 1 + h; + } else { + return this.$wrapData[row].length + 1 + h; + } + }; + this.getRowLineCount = function(row) { + if (!this.$useWrapMode || !this.$wrapData[row]) { + return 1; + } else { + return this.$wrapData[row].length + 1; + } + }; + + this.getRowWrapIndent = function(screenRow) { + if (this.$useWrapMode) { + var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE); + var splits = this.$wrapData[pos.row]; + return splits.length && splits[0] < pos.column ? splits.indent : 0; + } else { + return 0; + } + } + this.getScreenLastRowColumn = function(screenRow) { + var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE); + return this.documentToScreenColumn(pos.row, pos.column); + }; + this.getDocumentLastRowColumn = function(docRow, docColumn) { + var screenRow = this.documentToScreenRow(docRow, docColumn); + return this.getScreenLastRowColumn(screenRow); + }; + this.getDocumentLastRowColumnPosition = function(docRow, docColumn) { + var screenRow = this.documentToScreenRow(docRow, docColumn); + return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10); + }; + this.getRowSplitData = function(row) { + if (!this.$useWrapMode) { + return undefined; + } else { + return this.$wrapData[row]; + } + }; + this.getScreenTabSize = function(screenColumn) { + return this.$tabSize - screenColumn % this.$tabSize; + }; + + + this.screenToDocumentRow = function(screenRow, screenColumn) { + return this.screenToDocumentPosition(screenRow, screenColumn).row; + }; + + + this.screenToDocumentColumn = function(screenRow, screenColumn) { + return this.screenToDocumentPosition(screenRow, screenColumn).column; + }; + this.screenToDocumentPosition = function(screenRow, screenColumn) { + if (screenRow < 0) + return {row: 0, column: 0}; + + var line; + var docRow = 0; + var docColumn = 0; + var column; + var row = 0; + var rowLength = 0; + + var rowCache = this.$screenRowCache; + var i = this.$getRowCacheIndex(rowCache, screenRow); + var l = rowCache.length; + if (l && i >= 0) { + var row = rowCache[i]; + var docRow = this.$docRowCache[i]; + var doCache = screenRow > rowCache[l - 1]; + } else { + var doCache = !l; + } + + var maxRow = this.getLength() - 1; + var foldLine = this.getNextFoldLine(docRow); + var foldStart = foldLine ? foldLine.start.row : Infinity; + + while (row <= screenRow) { + rowLength = this.getRowLength(docRow); + if (row + rowLength > screenRow || docRow >= maxRow) { + break; + } else { + row += rowLength; + docRow++; + if (docRow > foldStart) { + docRow = foldLine.end.row+1; + foldLine = this.getNextFoldLine(docRow, foldLine); + foldStart = foldLine ? foldLine.start.row : Infinity; + } + } + + if (doCache) { + this.$docRowCache.push(docRow); + this.$screenRowCache.push(row); + } + } + + if (foldLine && foldLine.start.row <= docRow) { + line = this.getFoldDisplayLine(foldLine); + docRow = foldLine.start.row; + } else if (row + rowLength <= screenRow || docRow > maxRow) { + return { + row: maxRow, + column: this.getLine(maxRow).length + }; + } else { + line = this.getLine(docRow); + foldLine = null; + } + var wrapIndent = 0; + if (this.$useWrapMode) { + var splits = this.$wrapData[docRow]; + if (splits) { + var splitIndex = Math.floor(screenRow - row); + column = splits[splitIndex]; + if(splitIndex > 0 && splits.length) { + wrapIndent = splits.indent; + docColumn = splits[splitIndex - 1] || splits[splits.length - 1]; + line = line.substring(docColumn); + } + } + } + + docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1]; + if (this.$useWrapMode && docColumn >= column) + docColumn = column - 1; + + if (foldLine) + return foldLine.idxToPosition(docColumn); + + return {row: docRow, column: docColumn}; + }; + this.documentToScreenPosition = function(docRow, docColumn) { + if (typeof docColumn === "undefined") + var pos = this.$clipPositionToDocument(docRow.row, docRow.column); + else + pos = this.$clipPositionToDocument(docRow, docColumn); + + docRow = pos.row; + docColumn = pos.column; + + var screenRow = 0; + var foldStartRow = null; + var fold = null; + fold = this.getFoldAt(docRow, docColumn, 1); + if (fold) { + docRow = fold.start.row; + docColumn = fold.start.column; + } + + var rowEnd, row = 0; + + + var rowCache = this.$docRowCache; + var i = this.$getRowCacheIndex(rowCache, docRow); + var l = rowCache.length; + if (l && i >= 0) { + var row = rowCache[i]; + var screenRow = this.$screenRowCache[i]; + var doCache = docRow > rowCache[l - 1]; + } else { + var doCache = !l; + } + + var foldLine = this.getNextFoldLine(row); + var foldStart = foldLine ?foldLine.start.row :Infinity; + + while (row < docRow) { + if (row >= foldStart) { + rowEnd = foldLine.end.row + 1; + if (rowEnd > docRow) + break; + foldLine = this.getNextFoldLine(rowEnd, foldLine); + foldStart = foldLine ?foldLine.start.row :Infinity; + } + else { + rowEnd = row + 1; + } + + screenRow += this.getRowLength(row); + row = rowEnd; + + if (doCache) { + this.$docRowCache.push(row); + this.$screenRowCache.push(screenRow); + } + } + var textLine = ""; + if (foldLine && row >= foldStart) { + textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn); + foldStartRow = foldLine.start.row; + } else { + textLine = this.getLine(docRow).substring(0, docColumn); + foldStartRow = docRow; + } + var wrapIndent = 0; + if (this.$useWrapMode) { + var wrapRow = this.$wrapData[foldStartRow]; + if (wrapRow) { + var screenRowOffset = 0; + while (textLine.length >= wrapRow[screenRowOffset]) { + screenRow ++; + screenRowOffset++; + } + textLine = textLine.substring( + wrapRow[screenRowOffset - 1] || 0, textLine.length + ); + wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0; + } + } + + return { + row: screenRow, + column: wrapIndent + this.$getStringScreenWidth(textLine)[0] + }; + }; + this.documentToScreenColumn = function(row, docColumn) { + return this.documentToScreenPosition(row, docColumn).column; + }; + this.documentToScreenRow = function(docRow, docColumn) { + return this.documentToScreenPosition(docRow, docColumn).row; + }; + this.getScreenLength = function() { + var screenRows = 0; + var fold = null; + if (!this.$useWrapMode) { + screenRows = this.getLength(); + var foldData = this.$foldData; + for (var i = 0; i < foldData.length; i++) { + fold = foldData[i]; + screenRows -= fold.end.row - fold.start.row; + } + } else { + var lastRow = this.$wrapData.length; + var row = 0, i = 0; + var fold = this.$foldData[i++]; + var foldStart = fold ? fold.start.row :Infinity; + + while (row < lastRow) { + var splits = this.$wrapData[row]; + screenRows += splits ? splits.length + 1 : 1; + row ++; + if (row > foldStart) { + row = fold.end.row+1; + fold = this.$foldData[i++]; + foldStart = fold ?fold.start.row :Infinity; + } + } + } + if (this.lineWidgets) + screenRows += this.$getWidgetScreenLength(); + + return screenRows; + }; + this.$setFontMetrics = function(fm) { + if (!this.$enableVarChar) return; + this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) { + if (maxScreenColumn === 0) + return [0, 0]; + if (!maxScreenColumn) + maxScreenColumn = Infinity; + screenColumn = screenColumn || 0; + + var c, column; + for (column = 0; column < str.length; column++) { + c = str.charAt(column); + if (c === "\t") { + screenColumn += this.getScreenTabSize(screenColumn); + } else { + screenColumn += fm.getCharacterWidth(c); + } + if (screenColumn > maxScreenColumn) { + break; + } + } + + return [screenColumn, column]; + }; + }; + + this.destroy = function() { + if (this.bgTokenizer) { + this.bgTokenizer.setDocument(null); + this.bgTokenizer = null; + } + this.$stopWorker(); + }; + function isFullWidth(c) { + if (c < 0x1100) + return false; + return c >= 0x1100 && c <= 0x115F || + c >= 0x11A3 && c <= 0x11A7 || + c >= 0x11FA && c <= 0x11FF || + c >= 0x2329 && c <= 0x232A || + c >= 0x2E80 && c <= 0x2E99 || + c >= 0x2E9B && c <= 0x2EF3 || + c >= 0x2F00 && c <= 0x2FD5 || + c >= 0x2FF0 && c <= 0x2FFB || + c >= 0x3000 && c <= 0x303E || + c >= 0x3041 && c <= 0x3096 || + c >= 0x3099 && c <= 0x30FF || + c >= 0x3105 && c <= 0x312D || + c >= 0x3131 && c <= 0x318E || + c >= 0x3190 && c <= 0x31BA || + c >= 0x31C0 && c <= 0x31E3 || + c >= 0x31F0 && c <= 0x321E || + c >= 0x3220 && c <= 0x3247 || + c >= 0x3250 && c <= 0x32FE || + c >= 0x3300 && c <= 0x4DBF || + c >= 0x4E00 && c <= 0xA48C || + c >= 0xA490 && c <= 0xA4C6 || + c >= 0xA960 && c <= 0xA97C || + c >= 0xAC00 && c <= 0xD7A3 || + c >= 0xD7B0 && c <= 0xD7C6 || + c >= 0xD7CB && c <= 0xD7FB || + c >= 0xF900 && c <= 0xFAFF || + c >= 0xFE10 && c <= 0xFE19 || + c >= 0xFE30 && c <= 0xFE52 || + c >= 0xFE54 && c <= 0xFE66 || + c >= 0xFE68 && c <= 0xFE6B || + c >= 0xFF01 && c <= 0xFF60 || + c >= 0xFFE0 && c <= 0xFFE6; + } + +}).call(EditSession.prototype); + +acequire("./edit_session/folding").Folding.call(EditSession.prototype); +acequire("./edit_session/bracket_match").BracketMatch.call(EditSession.prototype); + + +config.defineOptions(EditSession.prototype, "session", { + wrap: { + set: function(value) { + if (!value || value == "off") + value = false; + else if (value == "free") + value = true; + else if (value == "printMargin") + value = -1; + else if (typeof value == "string") + value = parseInt(value, 10) || false; + + if (this.$wrap == value) + return; + this.$wrap = value; + if (!value) { + this.setUseWrapMode(false); + } else { + var col = typeof value == "number" ? value : null; + this.setWrapLimitRange(col, col); + this.setUseWrapMode(true); + } + }, + get: function() { + if (this.getUseWrapMode()) { + if (this.$wrap == -1) + return "printMargin"; + if (!this.getWrapLimitRange().min) + return "free"; + return this.$wrap; + } + return "off"; + }, + handlesSet: true + }, + wrapMethod: { + set: function(val) { + val = val == "auto" + ? this.$mode.type != "text" + : val != "text"; + if (val != this.$wrapAsCode) { + this.$wrapAsCode = val; + if (this.$useWrapMode) { + this.$modified = true; + this.$resetRowCache(0); + this.$updateWrapData(0, this.getLength() - 1); + } + } + }, + initialValue: "auto" + }, + indentedSoftWrap: { initialValue: true }, + firstLineNumber: { + set: function() {this._signal("changeBreakpoint");}, + initialValue: 1 + }, + useWorker: { + set: function(useWorker) { + this.$useWorker = useWorker; + + this.$stopWorker(); + if (useWorker) + this.$startWorker(); + }, + initialValue: true + }, + useSoftTabs: {initialValue: true}, + tabSize: { + set: function(tabSize) { + if (isNaN(tabSize) || this.$tabSize === tabSize) return; + + this.$modified = true; + this.$rowLengthCache = []; + this.$tabSize = tabSize; + this._signal("changeTabSize"); + }, + initialValue: 4, + handlesSet: true + }, + overwrite: { + set: function(val) {this._signal("changeOverwrite");}, + initialValue: false + }, + newLineMode: { + set: function(val) {this.doc.setNewLineMode(val)}, + get: function() {return this.doc.getNewLineMode()}, + handlesSet: true + }, + mode: { + set: function(val) { this.setMode(val) }, + get: function() { return this.$modeId } + } +}); + +exports.EditSession = EditSession; +}); + +ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"], function(acequire, exports, module) { +"use strict"; + +var lang = acequire("./lib/lang"); +var oop = acequire("./lib/oop"); +var Range = acequire("./range").Range; + +var Search = function() { + this.$options = {}; +}; + +(function() { + this.set = function(options) { + oop.mixin(this.$options, options); + return this; + }; + this.getOptions = function() { + return lang.copyObject(this.$options); + }; + this.setOptions = function(options) { + this.$options = options; + }; + this.find = function(session) { + var options = this.$options; + var iterator = this.$matchIterator(session, options); + if (!iterator) + return false; + + var firstRange = null; + iterator.forEach(function(range, row, offset) { + if (!range.start) { + var column = range.offset + (offset || 0); + firstRange = new Range(row, column, row, column + range.length); + if (!range.length && options.start && options.start.start + && options.skipCurrent != false && firstRange.isEqual(options.start) + ) { + firstRange = null; + return false; + } + } else + firstRange = range; + return true; + }); + + return firstRange; + }; + this.findAll = function(session) { + var options = this.$options; + if (!options.needle) + return []; + this.$assembleRegExp(options); + + var range = options.range; + var lines = range + ? session.getLines(range.start.row, range.end.row) + : session.doc.getAllLines(); + + var ranges = []; + var re = options.re; + if (options.$isMultiLine) { + var len = re.length; + var maxRow = lines.length - len; + var prevRange; + outer: for (var row = re.offset || 0; row <= maxRow; row++) { + for (var j = 0; j < len; j++) + if (lines[row + j].search(re[j]) == -1) + continue outer; + + var startLine = lines[row]; + var line = lines[row + len - 1]; + var startIndex = startLine.length - startLine.match(re[0])[0].length; + var endIndex = line.match(re[len - 1])[0].length; + + if (prevRange && prevRange.end.row === row && + prevRange.end.column > startIndex + ) { + continue; + } + ranges.push(prevRange = new Range( + row, startIndex, row + len - 1, endIndex + )); + if (len > 2) + row = row + len - 2; + } + } else { + for (var i = 0; i < lines.length; i++) { + var matches = lang.getMatchOffsets(lines[i], re); + for (var j = 0; j < matches.length; j++) { + var match = matches[j]; + ranges.push(new Range(i, match.offset, i, match.offset + match.length)); + } + } + } + + if (range) { + var startColumn = range.start.column; + var endColumn = range.start.column; + var i = 0, j = ranges.length - 1; + while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row) + i++; + + while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row) + j--; + + ranges = ranges.slice(i, j + 1); + for (i = 0, j = ranges.length; i < j; i++) { + ranges[i].start.row += range.start.row; + ranges[i].end.row += range.start.row; + } + } + + return ranges; + }; + this.replace = function(input, replacement) { + var options = this.$options; + + var re = this.$assembleRegExp(options); + if (options.$isMultiLine) + return replacement; + + if (!re) + return; + + var match = re.exec(input); + if (!match || match[0].length != input.length) + return null; + + replacement = input.replace(re, replacement); + if (options.preserveCase) { + replacement = replacement.split(""); + for (var i = Math.min(input.length, input.length); i--; ) { + var ch = input[i]; + if (ch && ch.toLowerCase() != ch) + replacement[i] = replacement[i].toUpperCase(); + else + replacement[i] = replacement[i].toLowerCase(); + } + replacement = replacement.join(""); + } + + return replacement; + }; + + this.$matchIterator = function(session, options) { + var re = this.$assembleRegExp(options); + if (!re) + return false; + + var callback; + if (options.$isMultiLine) { + var len = re.length; + var matchIterator = function(line, row, offset) { + var startIndex = line.search(re[0]); + if (startIndex == -1) + return; + for (var i = 1; i < len; i++) { + line = session.getLine(row + i); + if (line.search(re[i]) == -1) + return; + } + + var endIndex = line.match(re[len - 1])[0].length; + + var range = new Range(row, startIndex, row + len - 1, endIndex); + if (re.offset == 1) { + range.start.row--; + range.start.column = Number.MAX_VALUE; + } else if (offset) + range.start.column += offset; + + if (callback(range)) + return true; + }; + } else if (options.backwards) { + var matchIterator = function(line, row, startIndex) { + var matches = lang.getMatchOffsets(line, re); + for (var i = matches.length-1; i >= 0; i--) + if (callback(matches[i], row, startIndex)) + return true; + }; + } else { + var matchIterator = function(line, row, startIndex) { + var matches = lang.getMatchOffsets(line, re); + for (var i = 0; i < matches.length; i++) + if (callback(matches[i], row, startIndex)) + return true; + }; + } + + var lineIterator = this.$lineIterator(session, options); + + return { + forEach: function(_callback) { + callback = _callback; + lineIterator.forEach(matchIterator); + } + }; + }; + + this.$assembleRegExp = function(options, $disableFakeMultiline) { + if (options.needle instanceof RegExp) + return options.re = options.needle; + + var needle = options.needle; + + if (!options.needle) + return options.re = false; + + if (!options.regExp) + needle = lang.escapeRegExp(needle); + + if (options.wholeWord) + needle = "\\b" + needle + "\\b"; + + var modifier = options.caseSensitive ? "gm" : "gmi"; + + options.$isMultiLine = !$disableFakeMultiline && /[\n\r]/.test(needle); + if (options.$isMultiLine) + return options.re = this.$assembleMultilineRegExp(needle, modifier); + + try { + var re = new RegExp(needle, modifier); + } catch(e) { + re = false; + } + return options.re = re; + }; + + this.$assembleMultilineRegExp = function(needle, modifier) { + var parts = needle.replace(/\r\n|\r|\n/g, "$\n^").split("\n"); + var re = []; + for (var i = 0; i < parts.length; i++) try { + re.push(new RegExp(parts[i], modifier)); + } catch(e) { + return false; + } + if (parts[0] == "") { + re.shift(); + re.offset = 1; + } else { + re.offset = 0; + } + return re; + }; + + this.$lineIterator = function(session, options) { + var backwards = options.backwards == true; + var skipCurrent = options.skipCurrent != false; + + var range = options.range; + var start = options.start; + if (!start) + start = range ? range[backwards ? "end" : "start"] : session.selection.getRange(); + + if (start.start) + start = start[skipCurrent != backwards ? "end" : "start"]; + + var firstRow = range ? range.start.row : 0; + var lastRow = range ? range.end.row : session.getLength() - 1; + + var forEach = backwards ? function(callback) { + var row = start.row; + + var line = session.getLine(row).substring(0, start.column); + if (callback(line, row)) + return; + + for (row--; row >= firstRow; row--) + if (callback(session.getLine(row), row)) + return; + + if (options.wrap == false) + return; + + for (row = lastRow, firstRow = start.row; row >= firstRow; row--) + if (callback(session.getLine(row), row)) + return; + } : function(callback) { + var row = start.row; + + var line = session.getLine(row).substr(start.column); + if (callback(line, row, start.column)) + return; + + for (row = row+1; row <= lastRow; row++) + if (callback(session.getLine(row), row)) + return; + + if (options.wrap == false) + return; + + for (row = firstRow, lastRow = start.row; row <= lastRow; row++) + if (callback(session.getLine(row), row)) + return; + }; + + return {forEach: forEach}; + }; + +}).call(Search.prototype); + +exports.Search = Search; +}); + +ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"], function(acequire, exports, module) { +"use strict"; + +var keyUtil = acequire("../lib/keys"); +var useragent = acequire("../lib/useragent"); +var KEY_MODS = keyUtil.KEY_MODS; + +function HashHandler(config, platform) { + this.platform = platform || (useragent.isMac ? "mac" : "win"); + this.commands = {}; + this.commandKeyBinding = {}; + this.addCommands(config); + this.$singleCommand = true; +} + +function MultiHashHandler(config, platform) { + HashHandler.call(this, config, platform); + this.$singleCommand = false; +} + +MultiHashHandler.prototype = HashHandler.prototype; + +(function() { + + + this.addCommand = function(command) { + if (this.commands[command.name]) + this.removeCommand(command); + + this.commands[command.name] = command; + + if (command.bindKey) + this._buildKeyHash(command); + }; + + this.removeCommand = function(command, keepCommand) { + var name = command && (typeof command === 'string' ? command : command.name); + command = this.commands[name]; + if (!keepCommand) + delete this.commands[name]; + var ckb = this.commandKeyBinding; + for (var keyId in ckb) { + var cmdGroup = ckb[keyId]; + if (cmdGroup == command) { + delete ckb[keyId]; + } else if (Array.isArray(cmdGroup)) { + var i = cmdGroup.indexOf(command); + if (i != -1) { + cmdGroup.splice(i, 1); + if (cmdGroup.length == 1) + ckb[keyId] = cmdGroup[0]; + } + } + } + }; + + this.bindKey = function(key, command, position) { + if (typeof key == "object" && key) { + if (position == undefined) + position = key.position; + key = key[this.platform]; + } + if (!key) + return; + if (typeof command == "function") + return this.addCommand({exec: command, bindKey: key, name: command.name || key}); + + key.split("|").forEach(function(keyPart) { + var chain = ""; + if (keyPart.indexOf(" ") != -1) { + var parts = keyPart.split(/\s+/); + keyPart = parts.pop(); + parts.forEach(function(keyPart) { + var binding = this.parseKeys(keyPart); + var id = KEY_MODS[binding.hashId] + binding.key; + chain += (chain ? " " : "") + id; + this._addCommandToBinding(chain, "chainKeys"); + }, this); + chain += " "; + } + var binding = this.parseKeys(keyPart); + var id = KEY_MODS[binding.hashId] + binding.key; + this._addCommandToBinding(chain + id, command, position); + }, this); + }; + + function getPosition(command) { + return typeof command == "object" && command.bindKey + && command.bindKey.position || 0; + } + this._addCommandToBinding = function(keyId, command, position) { + var ckb = this.commandKeyBinding, i; + if (!command) { + delete ckb[keyId]; + } else if (!ckb[keyId] || this.$singleCommand) { + ckb[keyId] = command; + } else { + if (!Array.isArray(ckb[keyId])) { + ckb[keyId] = [ckb[keyId]]; + } else if ((i = ckb[keyId].indexOf(command)) != -1) { + ckb[keyId].splice(i, 1); + } + + if (typeof position != "number") { + if (position || command.isDefault) + position = -100; + else + position = getPosition(command); + } + var commands = ckb[keyId]; + for (i = 0; i < commands.length; i++) { + var other = commands[i]; + var otherPos = getPosition(other); + if (otherPos > position) + break; + } + commands.splice(i, 0, command); + } + }; + + this.addCommands = function(commands) { + commands && Object.keys(commands).forEach(function(name) { + var command = commands[name]; + if (!command) + return; + + if (typeof command === "string") + return this.bindKey(command, name); + + if (typeof command === "function") + command = { exec: command }; + + if (typeof command !== "object") + return; + + if (!command.name) + command.name = name; + + this.addCommand(command); + }, this); + }; + + this.removeCommands = function(commands) { + Object.keys(commands).forEach(function(name) { + this.removeCommand(commands[name]); + }, this); + }; + + this.bindKeys = function(keyList) { + Object.keys(keyList).forEach(function(key) { + this.bindKey(key, keyList[key]); + }, this); + }; + + this._buildKeyHash = function(command) { + this.bindKey(command.bindKey, command); + }; + this.parseKeys = function(keys) { + var parts = keys.toLowerCase().split(/[\-\+]([\-\+])?/).filter(function(x){return x}); + var key = parts.pop(); + + var keyCode = keyUtil[key]; + if (keyUtil.FUNCTION_KEYS[keyCode]) + key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase(); + else if (!parts.length) + return {key: key, hashId: -1}; + else if (parts.length == 1 && parts[0] == "shift") + return {key: key.toUpperCase(), hashId: -1}; + + var hashId = 0; + for (var i = parts.length; i--;) { + var modifier = keyUtil.KEY_MODS[parts[i]]; + if (modifier == null) { + if (typeof console != "undefined") + console.error("invalid modifier " + parts[i] + " in " + keys); + return false; + } + hashId |= modifier; + } + return {key: key, hashId: hashId}; + }; + + this.findKeyCommand = function findKeyCommand(hashId, keyString) { + var key = KEY_MODS[hashId] + keyString; + return this.commandKeyBinding[key]; + }; + + this.handleKeyboard = function(data, hashId, keyString, keyCode) { + if (keyCode < 0) return; + var key = KEY_MODS[hashId] + keyString; + var command = this.commandKeyBinding[key]; + if (data.$keyChain) { + data.$keyChain += " " + key; + command = this.commandKeyBinding[data.$keyChain] || command; + } + + if (command) { + if (command == "chainKeys" || command[command.length - 1] == "chainKeys") { + data.$keyChain = data.$keyChain || key; + return {command: "null"}; + } + } + + if (data.$keyChain) { + if ((!hashId || hashId == 4) && keyString.length == 1) + data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input + else if (hashId == -1 || keyCode > 0) + data.$keyChain = ""; // reset keyChain + } + return {command: command}; + }; + + this.getStatusText = function(editor, data) { + return data.$keyChain || ""; + }; + +}).call(HashHandler.prototype); + +exports.HashHandler = HashHandler; +exports.MultiHashHandler = MultiHashHandler; +}); + +ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("../lib/oop"); +var MultiHashHandler = acequire("../keyboard/hash_handler").MultiHashHandler; +var EventEmitter = acequire("../lib/event_emitter").EventEmitter; + +var CommandManager = function(platform, commands) { + MultiHashHandler.call(this, commands, platform); + this.byName = this.commands; + this.setDefaultHandler("exec", function(e) { + return e.command.exec(e.editor, e.args || {}); + }); +}; + +oop.inherits(CommandManager, MultiHashHandler); + +(function() { + + oop.implement(this, EventEmitter); + + this.exec = function(command, editor, args) { + if (Array.isArray(command)) { + for (var i = command.length; i--; ) { + if (this.exec(command[i], editor, args)) return true; + } + return false; + } + + if (typeof command === "string") + command = this.commands[command]; + + if (!command) + return false; + + if (editor && editor.$readOnly && !command.readOnly) + return false; + + var e = {editor: editor, command: command, args: args}; + e.returnValue = this._emit("exec", e); + this._signal("afterExec", e); + + return e.returnValue === false ? false : true; + }; + + this.toggleRecording = function(editor) { + if (this.$inReplay) + return; + + editor && editor._emit("changeStatus"); + if (this.recording) { + this.macro.pop(); + this.removeEventListener("exec", this.$addCommandToMacro); + + if (!this.macro.length) + this.macro = this.oldMacro; + + return this.recording = false; + } + if (!this.$addCommandToMacro) { + this.$addCommandToMacro = function(e) { + this.macro.push([e.command, e.args]); + }.bind(this); + } + + this.oldMacro = this.macro; + this.macro = []; + this.on("exec", this.$addCommandToMacro); + return this.recording = true; + }; + + this.replay = function(editor) { + if (this.$inReplay || !this.macro) + return; + + if (this.recording) + return this.toggleRecording(editor); + + try { + this.$inReplay = true; + this.macro.forEach(function(x) { + if (typeof x == "string") + this.exec(x, editor); + else + this.exec(x[0], editor, x[1]); + }, this); + } finally { + this.$inReplay = false; + } + }; + + this.trimMacro = function(m) { + return m.map(function(x){ + if (typeof x[0] != "string") + x[0] = x[0].name; + if (!x[1]) + x = x[0]; + return x; + }); + }; + +}).call(CommandManager.prototype); + +exports.CommandManager = CommandManager; + +}); + +ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"], function(acequire, exports, module) { +"use strict"; + +var lang = acequire("../lib/lang"); +var config = acequire("../config"); +var Range = acequire("../range").Range; + +function bindKey(win, mac) { + return {win: win, mac: mac}; +} +exports.commands = [{ + name: "showSettingsMenu", + bindKey: bindKey("Ctrl-,", "Command-,"), + exec: function(editor) { + config.loadModule("ace/ext/settings_menu", function(module) { + module.init(editor); + editor.showSettingsMenu(); + }); + }, + readOnly: true +}, { + name: "goToNextError", + bindKey: bindKey("Alt-E", "Ctrl-E"), + exec: function(editor) { + config.loadModule("ace/ext/error_marker", function(module) { + module.showErrorMarker(editor, 1); + }); + }, + scrollIntoView: "animate", + readOnly: true +}, { + name: "goToPreviousError", + bindKey: bindKey("Alt-Shift-E", "Ctrl-Shift-E"), + exec: function(editor) { + config.loadModule("ace/ext/error_marker", function(module) { + module.showErrorMarker(editor, -1); + }); + }, + scrollIntoView: "animate", + readOnly: true +}, { + name: "selectall", + bindKey: bindKey("Ctrl-A", "Command-A"), + exec: function(editor) { editor.selectAll(); }, + readOnly: true +}, { + name: "centerselection", + bindKey: bindKey(null, "Ctrl-L"), + exec: function(editor) { editor.centerSelection(); }, + readOnly: true +}, { + name: "gotoline", + bindKey: bindKey("Ctrl-L", "Command-L"), + exec: function(editor) { + var line = parseInt(prompt("Enter line number:"), 10); + if (!isNaN(line)) { + editor.gotoLine(line); + } + }, + readOnly: true +}, { + name: "fold", + bindKey: bindKey("Alt-L|Ctrl-F1", "Command-Alt-L|Command-F1"), + exec: function(editor) { editor.session.toggleFold(false); }, + multiSelectAction: "forEach", + scrollIntoView: "center", + readOnly: true +}, { + name: "unfold", + bindKey: bindKey("Alt-Shift-L|Ctrl-Shift-F1", "Command-Alt-Shift-L|Command-Shift-F1"), + exec: function(editor) { editor.session.toggleFold(true); }, + multiSelectAction: "forEach", + scrollIntoView: "center", + readOnly: true +}, { + name: "toggleFoldWidget", + bindKey: bindKey("F2", "F2"), + exec: function(editor) { editor.session.toggleFoldWidget(); }, + multiSelectAction: "forEach", + scrollIntoView: "center", + readOnly: true +}, { + name: "toggleParentFoldWidget", + bindKey: bindKey("Alt-F2", "Alt-F2"), + exec: function(editor) { editor.session.toggleFoldWidget(true); }, + multiSelectAction: "forEach", + scrollIntoView: "center", + readOnly: true +}, { + name: "foldall", + bindKey: bindKey(null, "Ctrl-Command-Option-0"), + exec: function(editor) { editor.session.foldAll(); }, + scrollIntoView: "center", + readOnly: true +}, { + name: "foldOther", + bindKey: bindKey("Alt-0", "Command-Option-0"), + exec: function(editor) { + editor.session.foldAll(); + editor.session.unfold(editor.selection.getAllRanges()); + }, + scrollIntoView: "center", + readOnly: true +}, { + name: "unfoldall", + bindKey: bindKey("Alt-Shift-0", "Command-Option-Shift-0"), + exec: function(editor) { editor.session.unfold(); }, + scrollIntoView: "center", + readOnly: true +}, { + name: "findnext", + bindKey: bindKey("Ctrl-K", "Command-G"), + exec: function(editor) { editor.findNext(); }, + multiSelectAction: "forEach", + scrollIntoView: "center", + readOnly: true +}, { + name: "findprevious", + bindKey: bindKey("Ctrl-Shift-K", "Command-Shift-G"), + exec: function(editor) { editor.findPrevious(); }, + multiSelectAction: "forEach", + scrollIntoView: "center", + readOnly: true +}, { + name: "selectOrFindNext", + bindKey: bindKey("Alt-K", "Ctrl-G"), + exec: function(editor) { + if (editor.selection.isEmpty()) + editor.selection.selectWord(); + else + editor.findNext(); + }, + readOnly: true +}, { + name: "selectOrFindPrevious", + bindKey: bindKey("Alt-Shift-K", "Ctrl-Shift-G"), + exec: function(editor) { + if (editor.selection.isEmpty()) + editor.selection.selectWord(); + else + editor.findPrevious(); + }, + readOnly: true +}, { + name: "find", + bindKey: bindKey("Ctrl-F", "Command-F"), + exec: function(editor) { + config.loadModule("ace/ext/searchbox", function(e) {e.Search(editor)}); + }, + readOnly: true +}, { + name: "overwrite", + bindKey: "Insert", + exec: function(editor) { editor.toggleOverwrite(); }, + readOnly: true +}, { + name: "selecttostart", + bindKey: bindKey("Ctrl-Shift-Home", "Command-Shift-Up"), + exec: function(editor) { editor.getSelection().selectFileStart(); }, + multiSelectAction: "forEach", + readOnly: true, + scrollIntoView: "animate", + aceCommandGroup: "fileJump" +}, { + name: "gotostart", + bindKey: bindKey("Ctrl-Home", "Command-Home|Command-Up"), + exec: function(editor) { editor.navigateFileStart(); }, + multiSelectAction: "forEach", + readOnly: true, + scrollIntoView: "animate", + aceCommandGroup: "fileJump" +}, { + name: "selectup", + bindKey: bindKey("Shift-Up", "Shift-Up"), + exec: function(editor) { editor.getSelection().selectUp(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true +}, { + name: "golineup", + bindKey: bindKey("Up", "Up|Ctrl-P"), + exec: function(editor, args) { editor.navigateUp(args.times); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true +}, { + name: "selecttoend", + bindKey: bindKey("Ctrl-Shift-End", "Command-Shift-Down"), + exec: function(editor) { editor.getSelection().selectFileEnd(); }, + multiSelectAction: "forEach", + readOnly: true, + scrollIntoView: "animate", + aceCommandGroup: "fileJump" +}, { + name: "gotoend", + bindKey: bindKey("Ctrl-End", "Command-End|Command-Down"), + exec: function(editor) { editor.navigateFileEnd(); }, + multiSelectAction: "forEach", + readOnly: true, + scrollIntoView: "animate", + aceCommandGroup: "fileJump" +}, { + name: "selectdown", + bindKey: bindKey("Shift-Down", "Shift-Down"), + exec: function(editor) { editor.getSelection().selectDown(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true +}, { + name: "golinedown", + bindKey: bindKey("Down", "Down|Ctrl-N"), + exec: function(editor, args) { editor.navigateDown(args.times); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true +}, { + name: "selectwordleft", + bindKey: bindKey("Ctrl-Shift-Left", "Option-Shift-Left"), + exec: function(editor) { editor.getSelection().selectWordLeft(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true +}, { + name: "gotowordleft", + bindKey: bindKey("Ctrl-Left", "Option-Left"), + exec: function(editor) { editor.navigateWordLeft(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true +}, { + name: "selecttolinestart", + bindKey: bindKey("Alt-Shift-Left", "Command-Shift-Left"), + exec: function(editor) { editor.getSelection().selectLineStart(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true +}, { + name: "gotolinestart", + bindKey: bindKey("Alt-Left|Home", "Command-Left|Home|Ctrl-A"), + exec: function(editor) { editor.navigateLineStart(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true +}, { + name: "selectleft", + bindKey: bindKey("Shift-Left", "Shift-Left"), + exec: function(editor) { editor.getSelection().selectLeft(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true +}, { + name: "gotoleft", + bindKey: bindKey("Left", "Left|Ctrl-B"), + exec: function(editor, args) { editor.navigateLeft(args.times); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true +}, { + name: "selectwordright", + bindKey: bindKey("Ctrl-Shift-Right", "Option-Shift-Right"), + exec: function(editor) { editor.getSelection().selectWordRight(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true +}, { + name: "gotowordright", + bindKey: bindKey("Ctrl-Right", "Option-Right"), + exec: function(editor) { editor.navigateWordRight(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true +}, { + name: "selecttolineend", + bindKey: bindKey("Alt-Shift-Right", "Command-Shift-Right"), + exec: function(editor) { editor.getSelection().selectLineEnd(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true +}, { + name: "gotolineend", + bindKey: bindKey("Alt-Right|End", "Command-Right|End|Ctrl-E"), + exec: function(editor) { editor.navigateLineEnd(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true +}, { + name: "selectright", + bindKey: bindKey("Shift-Right", "Shift-Right"), + exec: function(editor) { editor.getSelection().selectRight(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true +}, { + name: "gotoright", + bindKey: bindKey("Right", "Right|Ctrl-F"), + exec: function(editor, args) { editor.navigateRight(args.times); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true +}, { + name: "selectpagedown", + bindKey: "Shift-PageDown", + exec: function(editor) { editor.selectPageDown(); }, + readOnly: true +}, { + name: "pagedown", + bindKey: bindKey(null, "Option-PageDown"), + exec: function(editor) { editor.scrollPageDown(); }, + readOnly: true +}, { + name: "gotopagedown", + bindKey: bindKey("PageDown", "PageDown|Ctrl-V"), + exec: function(editor) { editor.gotoPageDown(); }, + readOnly: true +}, { + name: "selectpageup", + bindKey: "Shift-PageUp", + exec: function(editor) { editor.selectPageUp(); }, + readOnly: true +}, { + name: "pageup", + bindKey: bindKey(null, "Option-PageUp"), + exec: function(editor) { editor.scrollPageUp(); }, + readOnly: true +}, { + name: "gotopageup", + bindKey: "PageUp", + exec: function(editor) { editor.gotoPageUp(); }, + readOnly: true +}, { + name: "scrollup", + bindKey: bindKey("Ctrl-Up", null), + exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); }, + readOnly: true +}, { + name: "scrolldown", + bindKey: bindKey("Ctrl-Down", null), + exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); }, + readOnly: true +}, { + name: "selectlinestart", + bindKey: "Shift-Home", + exec: function(editor) { editor.getSelection().selectLineStart(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true +}, { + name: "selectlineend", + bindKey: "Shift-End", + exec: function(editor) { editor.getSelection().selectLineEnd(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true +}, { + name: "togglerecording", + bindKey: bindKey("Ctrl-Alt-E", "Command-Option-E"), + exec: function(editor) { editor.commands.toggleRecording(editor); }, + readOnly: true +}, { + name: "replaymacro", + bindKey: bindKey("Ctrl-Shift-E", "Command-Shift-E"), + exec: function(editor) { editor.commands.replay(editor); }, + readOnly: true +}, { + name: "jumptomatching", + bindKey: bindKey("Ctrl-P", "Ctrl-P"), + exec: function(editor) { editor.jumpToMatching(); }, + multiSelectAction: "forEach", + scrollIntoView: "animate", + readOnly: true +}, { + name: "selecttomatching", + bindKey: bindKey("Ctrl-Shift-P", "Ctrl-Shift-P"), + exec: function(editor) { editor.jumpToMatching(true); }, + multiSelectAction: "forEach", + scrollIntoView: "animate", + readOnly: true +}, { + name: "expandToMatching", + bindKey: bindKey("Ctrl-Shift-M", "Ctrl-Shift-M"), + exec: function(editor) { editor.jumpToMatching(true, true); }, + multiSelectAction: "forEach", + scrollIntoView: "animate", + readOnly: true +}, { + name: "passKeysToBrowser", + bindKey: bindKey(null, null), + exec: function() {}, + passEvent: true, + readOnly: true +}, { + name: "copy", + exec: function(editor) { + }, + readOnly: true +}, +{ + name: "cut", + exec: function(editor) { + var range = editor.getSelectionRange(); + editor._emit("cut", range); + + if (!editor.selection.isEmpty()) { + editor.session.remove(range); + editor.clearSelection(); + } + }, + scrollIntoView: "cursor", + multiSelectAction: "forEach" +}, { + name: "paste", + exec: function(editor, args) { + editor.$handlePaste(args); + }, + scrollIntoView: "cursor" +}, { + name: "removeline", + bindKey: bindKey("Ctrl-D", "Command-D"), + exec: function(editor) { editor.removeLines(); }, + scrollIntoView: "cursor", + multiSelectAction: "forEachLine" +}, { + name: "duplicateSelection", + bindKey: bindKey("Ctrl-Shift-D", "Command-Shift-D"), + exec: function(editor) { editor.duplicateSelection(); }, + scrollIntoView: "cursor", + multiSelectAction: "forEach" +}, { + name: "sortlines", + bindKey: bindKey("Ctrl-Alt-S", "Command-Alt-S"), + exec: function(editor) { editor.sortLines(); }, + scrollIntoView: "selection", + multiSelectAction: "forEachLine" +}, { + name: "togglecomment", + bindKey: bindKey("Ctrl-/", "Command-/"), + exec: function(editor) { editor.toggleCommentLines(); }, + multiSelectAction: "forEachLine", + scrollIntoView: "selectionPart" +}, { + name: "toggleBlockComment", + bindKey: bindKey("Ctrl-Shift-/", "Command-Shift-/"), + exec: function(editor) { editor.toggleBlockComment(); }, + multiSelectAction: "forEach", + scrollIntoView: "selectionPart" +}, { + name: "modifyNumberUp", + bindKey: bindKey("Ctrl-Shift-Up", "Alt-Shift-Up"), + exec: function(editor) { editor.modifyNumber(1); }, + scrollIntoView: "cursor", + multiSelectAction: "forEach" +}, { + name: "modifyNumberDown", + bindKey: bindKey("Ctrl-Shift-Down", "Alt-Shift-Down"), + exec: function(editor) { editor.modifyNumber(-1); }, + scrollIntoView: "cursor", + multiSelectAction: "forEach" +}, { + name: "replace", + bindKey: bindKey("Ctrl-H", "Command-Option-F"), + exec: function(editor) { + config.loadModule("ace/ext/searchbox", function(e) {e.Search(editor, true)}); + } +}, { + name: "undo", + bindKey: bindKey("Ctrl-Z", "Command-Z"), + exec: function(editor) { editor.undo(); } +}, { + name: "redo", + bindKey: bindKey("Ctrl-Shift-Z|Ctrl-Y", "Command-Shift-Z|Command-Y"), + exec: function(editor) { editor.redo(); } +}, { + name: "copylinesup", + bindKey: bindKey("Alt-Shift-Up", "Command-Option-Up"), + exec: function(editor) { editor.copyLinesUp(); }, + scrollIntoView: "cursor" +}, { + name: "movelinesup", + bindKey: bindKey("Alt-Up", "Option-Up"), + exec: function(editor) { editor.moveLinesUp(); }, + scrollIntoView: "cursor" +}, { + name: "copylinesdown", + bindKey: bindKey("Alt-Shift-Down", "Command-Option-Down"), + exec: function(editor) { editor.copyLinesDown(); }, + scrollIntoView: "cursor" +}, { + name: "movelinesdown", + bindKey: bindKey("Alt-Down", "Option-Down"), + exec: function(editor) { editor.moveLinesDown(); }, + scrollIntoView: "cursor" +}, { + name: "del", + bindKey: bindKey("Delete", "Delete|Ctrl-D|Shift-Delete"), + exec: function(editor) { editor.remove("right"); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" +}, { + name: "backspace", + bindKey: bindKey( + "Shift-Backspace|Backspace", + "Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H" + ), + exec: function(editor) { editor.remove("left"); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" +}, { + name: "cut_or_delete", + bindKey: bindKey("Shift-Delete", null), + exec: function(editor) { + if (editor.selection.isEmpty()) { + editor.remove("left"); + } else { + return false; + } + }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" +}, { + name: "removetolinestart", + bindKey: bindKey("Alt-Backspace", "Command-Backspace"), + exec: function(editor) { editor.removeToLineStart(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" +}, { + name: "removetolineend", + bindKey: bindKey("Alt-Delete", "Ctrl-K"), + exec: function(editor) { editor.removeToLineEnd(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" +}, { + name: "removewordleft", + bindKey: bindKey("Ctrl-Backspace", "Alt-Backspace|Ctrl-Alt-Backspace"), + exec: function(editor) { editor.removeWordLeft(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" +}, { + name: "removewordright", + bindKey: bindKey("Ctrl-Delete", "Alt-Delete"), + exec: function(editor) { editor.removeWordRight(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" +}, { + name: "outdent", + bindKey: bindKey("Shift-Tab", "Shift-Tab"), + exec: function(editor) { editor.blockOutdent(); }, + multiSelectAction: "forEach", + scrollIntoView: "selectionPart" +}, { + name: "indent", + bindKey: bindKey("Tab", "Tab"), + exec: function(editor) { editor.indent(); }, + multiSelectAction: "forEach", + scrollIntoView: "selectionPart" +}, { + name: "blockoutdent", + bindKey: bindKey("Ctrl-[", "Ctrl-["), + exec: function(editor) { editor.blockOutdent(); }, + multiSelectAction: "forEachLine", + scrollIntoView: "selectionPart" +}, { + name: "blockindent", + bindKey: bindKey("Ctrl-]", "Ctrl-]"), + exec: function(editor) { editor.blockIndent(); }, + multiSelectAction: "forEachLine", + scrollIntoView: "selectionPart" +}, { + name: "insertstring", + exec: function(editor, str) { editor.insert(str); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" +}, { + name: "inserttext", + exec: function(editor, args) { + editor.insert(lang.stringRepeat(args.text || "", args.times || 1)); + }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" +}, { + name: "splitline", + bindKey: bindKey(null, "Ctrl-O"), + exec: function(editor) { editor.splitLine(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" +}, { + name: "transposeletters", + bindKey: bindKey("Ctrl-T", "Ctrl-T"), + exec: function(editor) { editor.transposeLetters(); }, + multiSelectAction: function(editor) {editor.transposeSelections(1); }, + scrollIntoView: "cursor" +}, { + name: "touppercase", + bindKey: bindKey("Ctrl-U", "Ctrl-U"), + exec: function(editor) { editor.toUpperCase(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" +}, { + name: "tolowercase", + bindKey: bindKey("Ctrl-Shift-U", "Ctrl-Shift-U"), + exec: function(editor) { editor.toLowerCase(); }, + multiSelectAction: "forEach", + scrollIntoView: "cursor" +}, { + name: "expandtoline", + bindKey: bindKey("Ctrl-Shift-L", "Command-Shift-L"), + exec: function(editor) { + var range = editor.selection.getRange(); + + range.start.column = range.end.column = 0; + range.end.row++; + editor.selection.setRange(range, false); + }, + multiSelectAction: "forEach", + scrollIntoView: "cursor", + readOnly: true +}, { + name: "joinlines", + bindKey: bindKey(null, null), + exec: function(editor) { + var isBackwards = editor.selection.isBackwards(); + var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor(); + var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead(); + var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length; + var selectedText = editor.session.doc.getTextRange(editor.selection.getRange()); + var selectedCount = selectedText.replace(/\n\s*/, " ").length; + var insertLine = editor.session.doc.getLine(selectionStart.row); + + for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) { + var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i))); + if (curLine.length !== 0) { + curLine = " " + curLine; + } + insertLine += curLine; + } + + if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) { + insertLine += editor.session.doc.getNewLineCharacter(); + } + + editor.clearSelection(); + editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine); + + if (selectedCount > 0) { + editor.selection.moveCursorTo(selectionStart.row, selectionStart.column); + editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount); + } else { + firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol; + editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol); + } + }, + multiSelectAction: "forEach", + readOnly: true +}, { + name: "invertSelection", + bindKey: bindKey(null, null), + exec: function(editor) { + var endRow = editor.session.doc.getLength() - 1; + var endCol = editor.session.doc.getLine(endRow).length; + var ranges = editor.selection.rangeList.ranges; + var newRanges = []; + if (ranges.length < 1) { + ranges = [editor.selection.getRange()]; + } + + for (var i = 0; i < ranges.length; i++) { + if (i == (ranges.length - 1)) { + if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) { + newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol)); + } + } + + if (i === 0) { + if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) { + newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column)); + } + } else { + newRanges.push(new Range(ranges[i-1].end.row, ranges[i-1].end.column, ranges[i].start.row, ranges[i].start.column)); + } + } + + editor.exitMultiSelectMode(); + editor.clearSelection(); + + for(var i = 0; i < newRanges.length; i++) { + editor.selection.addRange(newRanges[i], false); + } + }, + readOnly: true, + scrollIntoView: "none" +}]; + +}); + +ace.define("ace/editor",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/keyboard/textinput","ace/mouse/mouse_handler","ace/mouse/fold_handler","ace/keyboard/keybinding","ace/edit_session","ace/search","ace/range","ace/lib/event_emitter","ace/commands/command_manager","ace/commands/default_commands","ace/config","ace/token_iterator"], function(acequire, exports, module) { +"use strict"; + +acequire("./lib/fixoldbrowsers"); + +var oop = acequire("./lib/oop"); +var dom = acequire("./lib/dom"); +var lang = acequire("./lib/lang"); +var useragent = acequire("./lib/useragent"); +var TextInput = acequire("./keyboard/textinput").TextInput; +var MouseHandler = acequire("./mouse/mouse_handler").MouseHandler; +var FoldHandler = acequire("./mouse/fold_handler").FoldHandler; +var KeyBinding = acequire("./keyboard/keybinding").KeyBinding; +var EditSession = acequire("./edit_session").EditSession; +var Search = acequire("./search").Search; +var Range = acequire("./range").Range; +var EventEmitter = acequire("./lib/event_emitter").EventEmitter; +var CommandManager = acequire("./commands/command_manager").CommandManager; +var defaultCommands = acequire("./commands/default_commands").commands; +var config = acequire("./config"); +var TokenIterator = acequire("./token_iterator").TokenIterator; +var Editor = function(renderer, session) { + var container = renderer.getContainerElement(); + this.container = container; + this.renderer = renderer; + + this.commands = new CommandManager(useragent.isMac ? "mac" : "win", defaultCommands); + this.textInput = new TextInput(renderer.getTextAreaContainer(), this); + this.renderer.textarea = this.textInput.getElement(); + this.keyBinding = new KeyBinding(this); + this.$mouseHandler = new MouseHandler(this); + new FoldHandler(this); + + this.$blockScrolling = 0; + this.$search = new Search().set({ + wrap: true + }); + + this.$historyTracker = this.$historyTracker.bind(this); + this.commands.on("exec", this.$historyTracker); + + this.$initOperationListeners(); + + this._$emitInputEvent = lang.delayedCall(function() { + this._signal("input", {}); + if (this.session && this.session.bgTokenizer) + this.session.bgTokenizer.scheduleStart(); + }.bind(this)); + + this.on("change", function(_, _self) { + _self._$emitInputEvent.schedule(31); + }); + + this.setSession(session || new EditSession("")); + config.resetOptions(this); + config._signal("editor", this); +}; + +(function(){ + + oop.implement(this, EventEmitter); + + this.$initOperationListeners = function() { + function last(a) {return a[a.length - 1]} + + this.selections = []; + this.commands.on("exec", this.startOperation.bind(this), true); + this.commands.on("afterExec", this.endOperation.bind(this), true); + + this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this)); + + this.on("change", function() { + this.curOp || this.startOperation(); + this.curOp.docChanged = true; + }.bind(this), true); + + this.on("changeSelection", function() { + this.curOp || this.startOperation(); + this.curOp.selectionChanged = true; + }.bind(this), true); + }; + + this.curOp = null; + this.prevOp = {}; + this.startOperation = function(commadEvent) { + if (this.curOp) { + if (!commadEvent || this.curOp.command) + return; + this.prevOp = this.curOp; + } + if (!commadEvent) { + this.previousCommand = null; + commadEvent = {}; + } + + this.$opResetTimer.schedule(); + this.curOp = { + command: commadEvent.command || {}, + args: commadEvent.args, + scrollTop: this.renderer.scrollTop + }; + if (this.curOp.command.name && this.curOp.command.scrollIntoView !== undefined) + this.$blockScrolling++; + }; + + this.endOperation = function(e) { + if (this.curOp) { + if (e && e.returnValue === false) + return this.curOp = null; + this._signal("beforeEndOperation"); + var command = this.curOp.command; + if (command.name && this.$blockScrolling > 0) + this.$blockScrolling--; + var scrollIntoView = command && command.scrollIntoView; + if (scrollIntoView) { + switch (scrollIntoView) { + case "center-animate": + scrollIntoView = "animate"; + case "center": + this.renderer.scrollCursorIntoView(null, 0.5); + break; + case "animate": + case "cursor": + this.renderer.scrollCursorIntoView(); + break; + case "selectionPart": + var range = this.selection.getRange(); + var config = this.renderer.layerConfig; + if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) { + this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead); + } + break; + default: + break; + } + if (scrollIntoView == "animate") + this.renderer.animateScrolling(this.curOp.scrollTop); + } + + this.prevOp = this.curOp; + this.curOp = null; + } + }; + this.$mergeableCommands = ["backspace", "del", "insertstring"]; + this.$historyTracker = function(e) { + if (!this.$mergeUndoDeltas) + return; + + var prev = this.prevOp; + var mergeableCommands = this.$mergeableCommands; + var shouldMerge = prev.command && (e.command.name == prev.command.name); + if (e.command.name == "insertstring") { + var text = e.args; + if (this.mergeNextCommand === undefined) + this.mergeNextCommand = true; + + shouldMerge = shouldMerge + && this.mergeNextCommand // previous command allows to coalesce with + && (!/\s/.test(text) || /\s/.test(prev.args)); // previous insertion was of same type + + this.mergeNextCommand = true; + } else { + shouldMerge = shouldMerge + && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable + } + + if ( + this.$mergeUndoDeltas != "always" + && Date.now() - this.sequenceStartTime > 2000 + ) { + shouldMerge = false; // the sequence is too long + } + + if (shouldMerge) + this.session.mergeUndoDeltas = true; + else if (mergeableCommands.indexOf(e.command.name) !== -1) + this.sequenceStartTime = Date.now(); + }; + this.setKeyboardHandler = function(keyboardHandler, cb) { + if (keyboardHandler && typeof keyboardHandler === "string") { + this.$keybindingId = keyboardHandler; + var _self = this; + config.loadModule(["keybinding", keyboardHandler], function(module) { + if (_self.$keybindingId == keyboardHandler) + _self.keyBinding.setKeyboardHandler(module && module.handler); + cb && cb(); + }); + } else { + this.$keybindingId = null; + this.keyBinding.setKeyboardHandler(keyboardHandler); + cb && cb(); + } + }; + this.getKeyboardHandler = function() { + return this.keyBinding.getKeyboardHandler(); + }; + this.setSession = function(session) { + if (this.session == session) + return; + if (this.curOp) this.endOperation(); + this.curOp = {}; + + var oldSession = this.session; + if (oldSession) { + this.session.off("change", this.$onDocumentChange); + this.session.off("changeMode", this.$onChangeMode); + this.session.off("tokenizerUpdate", this.$onTokenizerUpdate); + this.session.off("changeTabSize", this.$onChangeTabSize); + this.session.off("changeWrapLimit", this.$onChangeWrapLimit); + this.session.off("changeWrapMode", this.$onChangeWrapMode); + this.session.off("changeFold", this.$onChangeFold); + this.session.off("changeFrontMarker", this.$onChangeFrontMarker); + this.session.off("changeBackMarker", this.$onChangeBackMarker); + this.session.off("changeBreakpoint", this.$onChangeBreakpoint); + this.session.off("changeAnnotation", this.$onChangeAnnotation); + this.session.off("changeOverwrite", this.$onCursorChange); + this.session.off("changeScrollTop", this.$onScrollTopChange); + this.session.off("changeScrollLeft", this.$onScrollLeftChange); + + var selection = this.session.getSelection(); + selection.off("changeCursor", this.$onCursorChange); + selection.off("changeSelection", this.$onSelectionChange); + } + + this.session = session; + if (session) { + this.$onDocumentChange = this.onDocumentChange.bind(this); + session.on("change", this.$onDocumentChange); + this.renderer.setSession(session); + + this.$onChangeMode = this.onChangeMode.bind(this); + session.on("changeMode", this.$onChangeMode); + + this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this); + session.on("tokenizerUpdate", this.$onTokenizerUpdate); + + this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer); + session.on("changeTabSize", this.$onChangeTabSize); + + this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this); + session.on("changeWrapLimit", this.$onChangeWrapLimit); + + this.$onChangeWrapMode = this.onChangeWrapMode.bind(this); + session.on("changeWrapMode", this.$onChangeWrapMode); + + this.$onChangeFold = this.onChangeFold.bind(this); + session.on("changeFold", this.$onChangeFold); + + this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this); + this.session.on("changeFrontMarker", this.$onChangeFrontMarker); + + this.$onChangeBackMarker = this.onChangeBackMarker.bind(this); + this.session.on("changeBackMarker", this.$onChangeBackMarker); + + this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this); + this.session.on("changeBreakpoint", this.$onChangeBreakpoint); + + this.$onChangeAnnotation = this.onChangeAnnotation.bind(this); + this.session.on("changeAnnotation", this.$onChangeAnnotation); + + this.$onCursorChange = this.onCursorChange.bind(this); + this.session.on("changeOverwrite", this.$onCursorChange); + + this.$onScrollTopChange = this.onScrollTopChange.bind(this); + this.session.on("changeScrollTop", this.$onScrollTopChange); + + this.$onScrollLeftChange = this.onScrollLeftChange.bind(this); + this.session.on("changeScrollLeft", this.$onScrollLeftChange); + + this.selection = session.getSelection(); + this.selection.on("changeCursor", this.$onCursorChange); + + this.$onSelectionChange = this.onSelectionChange.bind(this); + this.selection.on("changeSelection", this.$onSelectionChange); + + this.onChangeMode(); + + this.$blockScrolling += 1; + this.onCursorChange(); + this.$blockScrolling -= 1; + + this.onScrollTopChange(); + this.onScrollLeftChange(); + this.onSelectionChange(); + this.onChangeFrontMarker(); + this.onChangeBackMarker(); + this.onChangeBreakpoint(); + this.onChangeAnnotation(); + this.session.getUseWrapMode() && this.renderer.adjustWrapLimit(); + this.renderer.updateFull(); + } else { + this.selection = null; + this.renderer.setSession(session); + } + + this._signal("changeSession", { + session: session, + oldSession: oldSession + }); + + this.curOp = null; + + oldSession && oldSession._signal("changeEditor", {oldEditor: this}); + session && session._signal("changeEditor", {editor: this}); + }; + this.getSession = function() { + return this.session; + }; + this.setValue = function(val, cursorPos) { + this.session.doc.setValue(val); + + if (!cursorPos) + this.selectAll(); + else if (cursorPos == 1) + this.navigateFileEnd(); + else if (cursorPos == -1) + this.navigateFileStart(); + + return val; + }; + this.getValue = function() { + return this.session.getValue(); + }; + this.getSelection = function() { + return this.selection; + }; + this.resize = function(force) { + this.renderer.onResize(force); + }; + this.setTheme = function(theme, cb) { + this.renderer.setTheme(theme, cb); + }; + this.getTheme = function() { + return this.renderer.getTheme(); + }; + this.setStyle = function(style) { + this.renderer.setStyle(style); + }; + this.unsetStyle = function(style) { + this.renderer.unsetStyle(style); + }; + this.getFontSize = function () { + return this.getOption("fontSize") || + dom.computedStyle(this.container, "fontSize"); + }; + this.setFontSize = function(size) { + this.setOption("fontSize", size); + }; + + this.$highlightBrackets = function() { + if (this.session.$bracketHighlight) { + this.session.removeMarker(this.session.$bracketHighlight); + this.session.$bracketHighlight = null; + } + + if (this.$highlightPending) { + return; + } + var self = this; + this.$highlightPending = true; + setTimeout(function() { + self.$highlightPending = false; + var session = self.session; + if (!session || !session.bgTokenizer) return; + var pos = session.findMatchingBracket(self.getCursorPosition()); + if (pos) { + var range = new Range(pos.row, pos.column, pos.row, pos.column + 1); + } else if (session.$mode.getMatching) { + var range = session.$mode.getMatching(self.session); + } + if (range) + session.$bracketHighlight = session.addMarker(range, "ace_bracket", "text"); + }, 50); + }; + this.$highlightTags = function() { + if (this.$highlightTagPending) + return; + var self = this; + this.$highlightTagPending = true; + setTimeout(function() { + self.$highlightTagPending = false; + + var session = self.session; + if (!session || !session.bgTokenizer) return; + + var pos = self.getCursorPosition(); + var iterator = new TokenIterator(self.session, pos.row, pos.column); + var token = iterator.getCurrentToken(); + + if (!token || !/\b(?:tag-open|tag-name)/.test(token.type)) { + session.removeMarker(session.$tagHighlight); + session.$tagHighlight = null; + return; + } + + if (token.type.indexOf("tag-open") != -1) { + token = iterator.stepForward(); + if (!token) + return; + } + + var tag = token.value; + var depth = 0; + var prevToken = iterator.stepBackward(); + + if (prevToken.value == '<'){ + do { + prevToken = token; + token = iterator.stepForward(); + + if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) { + if (prevToken.value === '<'){ + depth++; + } else if (prevToken.value === '= 0); + } else { + do { + token = prevToken; + prevToken = iterator.stepBackward(); + + if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) { + if (prevToken.value === '<') { + depth++; + } else if (prevToken.value === ' 1)) + highlight = false; + } + + if (session.$highlightLineMarker && !highlight) { + session.removeMarker(session.$highlightLineMarker.id); + session.$highlightLineMarker = null; + } else if (!session.$highlightLineMarker && highlight) { + var range = new Range(highlight.row, highlight.column, highlight.row, Infinity); + range.id = session.addMarker(range, "ace_active-line", "screenLine"); + session.$highlightLineMarker = range; + } else if (highlight) { + session.$highlightLineMarker.start.row = highlight.row; + session.$highlightLineMarker.end.row = highlight.row; + session.$highlightLineMarker.start.column = highlight.column; + session._signal("changeBackMarker"); + } + }; + + this.onSelectionChange = function(e) { + var session = this.session; + + if (session.$selectionMarker) { + session.removeMarker(session.$selectionMarker); + } + session.$selectionMarker = null; + + if (!this.selection.isEmpty()) { + var range = this.selection.getRange(); + var style = this.getSelectionStyle(); + session.$selectionMarker = session.addMarker(range, "ace_selection", style); + } else { + this.$updateHighlightActiveLine(); + } + + var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp(); + this.session.highlight(re); + + this._signal("changeSelection"); + }; + + this.$getSelectionHighLightRegexp = function() { + var session = this.session; + + var selection = this.getSelectionRange(); + if (selection.isEmpty() || selection.isMultiLine()) + return; + + var startOuter = selection.start.column - 1; + var endOuter = selection.end.column + 1; + var line = session.getLine(selection.start.row); + var lineCols = line.length; + var needle = line.substring(Math.max(startOuter, 0), + Math.min(endOuter, lineCols)); + if ((startOuter >= 0 && /^[\w\d]/.test(needle)) || + (endOuter <= lineCols && /[\w\d]$/.test(needle))) + return; + + needle = line.substring(selection.start.column, selection.end.column); + if (!/^[\w\d]+$/.test(needle)) + return; + + var re = this.$search.$assembleRegExp({ + wholeWord: true, + caseSensitive: true, + needle: needle + }); + + return re; + }; + + + this.onChangeFrontMarker = function() { + this.renderer.updateFrontMarkers(); + }; + + this.onChangeBackMarker = function() { + this.renderer.updateBackMarkers(); + }; + + + this.onChangeBreakpoint = function() { + this.renderer.updateBreakpoints(); + }; + + this.onChangeAnnotation = function() { + this.renderer.setAnnotations(this.session.getAnnotations()); + }; + + + this.onChangeMode = function(e) { + this.renderer.updateText(); + this._emit("changeMode", e); + }; + + + this.onChangeWrapLimit = function() { + this.renderer.updateFull(); + }; + + this.onChangeWrapMode = function() { + this.renderer.onResize(true); + }; + + + this.onChangeFold = function() { + this.$updateHighlightActiveLine(); + this.renderer.updateFull(); + }; + this.getSelectedText = function() { + return this.session.getTextRange(this.getSelectionRange()); + }; + this.getCopyText = function() { + var text = this.getSelectedText(); + this._signal("copy", text); + return text; + }; + this.onCopy = function() { + this.commands.exec("copy", this); + }; + this.onCut = function() { + this.commands.exec("cut", this); + }; + this.onPaste = function(text, event) { + var e = {text: text, event: event}; + this.commands.exec("paste", this, e); + }; + + this.$handlePaste = function(e) { + if (typeof e == "string") + e = {text: e}; + this._signal("paste", e); + var text = e.text; + if (!this.inMultiSelectMode || this.inVirtualSelectionMode) { + this.insert(text); + } else { + var lines = text.split(/\r\n|\r|\n/); + var ranges = this.selection.rangeList.ranges; + + if (lines.length > ranges.length || lines.length < 2 || !lines[1]) + return this.commands.exec("insertstring", this, text); + + for (var i = ranges.length; i--;) { + var range = ranges[i]; + if (!range.isEmpty()) + this.session.remove(range); + + this.session.insert(range.start, lines[i]); + } + } + }; + + this.execCommand = function(command, args) { + return this.commands.exec(command, this, args); + }; + this.insert = function(text, pasted) { + var session = this.session; + var mode = session.getMode(); + var cursor = this.getCursorPosition(); + + if (this.getBehavioursEnabled() && !pasted) { + var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text); + if (transform) { + if (text !== transform.text) { + this.session.mergeUndoDeltas = false; + this.$mergeNextCommand = false; + } + text = transform.text; + + } + } + + if (text == "\t") + text = this.session.getTabString(); + if (!this.selection.isEmpty()) { + var range = this.getSelectionRange(); + cursor = this.session.remove(range); + this.clearSelection(); + } + else if (this.session.getOverwrite()) { + var range = new Range.fromPoints(cursor, cursor); + range.end.column += text.length; + this.session.remove(range); + } + + if (text == "\n" || text == "\r\n") { + var line = session.getLine(cursor.row); + if (cursor.column > line.search(/\S|$/)) { + var d = line.substr(cursor.column).search(/\S|$/); + session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d); + } + } + this.clearSelection(); + + var start = cursor.column; + var lineState = session.getState(cursor.row); + var line = session.getLine(cursor.row); + var shouldOutdent = mode.checkOutdent(lineState, line, text); + var end = session.insert(cursor, text); + + if (transform && transform.selection) { + if (transform.selection.length == 2) { // Transform relative to the current column + this.selection.setSelectionRange( + new Range(cursor.row, start + transform.selection[0], + cursor.row, start + transform.selection[1])); + } else { // Transform relative to the current row. + this.selection.setSelectionRange( + new Range(cursor.row + transform.selection[0], + transform.selection[1], + cursor.row + transform.selection[2], + transform.selection[3])); + } + } + + if (session.getDocument().isNewLine(text)) { + var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString()); + + session.insert({row: cursor.row+1, column: 0}, lineIndent); + } + if (shouldOutdent) + mode.autoOutdent(lineState, session, cursor.row); + }; + + this.onTextInput = function(text) { + this.keyBinding.onTextInput(text); + }; + + this.onCommandKey = function(e, hashId, keyCode) { + this.keyBinding.onCommandKey(e, hashId, keyCode); + }; + this.setOverwrite = function(overwrite) { + this.session.setOverwrite(overwrite); + }; + this.getOverwrite = function() { + return this.session.getOverwrite(); + }; + this.toggleOverwrite = function() { + this.session.toggleOverwrite(); + }; + this.setScrollSpeed = function(speed) { + this.setOption("scrollSpeed", speed); + }; + this.getScrollSpeed = function() { + return this.getOption("scrollSpeed"); + }; + this.setDragDelay = function(dragDelay) { + this.setOption("dragDelay", dragDelay); + }; + this.getDragDelay = function() { + return this.getOption("dragDelay"); + }; + this.setSelectionStyle = function(val) { + this.setOption("selectionStyle", val); + }; + this.getSelectionStyle = function() { + return this.getOption("selectionStyle"); + }; + this.setHighlightActiveLine = function(shouldHighlight) { + this.setOption("highlightActiveLine", shouldHighlight); + }; + this.getHighlightActiveLine = function() { + return this.getOption("highlightActiveLine"); + }; + this.setHighlightGutterLine = function(shouldHighlight) { + this.setOption("highlightGutterLine", shouldHighlight); + }; + + this.getHighlightGutterLine = function() { + return this.getOption("highlightGutterLine"); + }; + this.setHighlightSelectedWord = function(shouldHighlight) { + this.setOption("highlightSelectedWord", shouldHighlight); + }; + this.getHighlightSelectedWord = function() { + return this.$highlightSelectedWord; + }; + + this.setAnimatedScroll = function(shouldAnimate){ + this.renderer.setAnimatedScroll(shouldAnimate); + }; + + this.getAnimatedScroll = function(){ + return this.renderer.getAnimatedScroll(); + }; + this.setShowInvisibles = function(showInvisibles) { + this.renderer.setShowInvisibles(showInvisibles); + }; + this.getShowInvisibles = function() { + return this.renderer.getShowInvisibles(); + }; + + this.setDisplayIndentGuides = function(display) { + this.renderer.setDisplayIndentGuides(display); + }; + + this.getDisplayIndentGuides = function() { + return this.renderer.getDisplayIndentGuides(); + }; + this.setShowPrintMargin = function(showPrintMargin) { + this.renderer.setShowPrintMargin(showPrintMargin); + }; + this.getShowPrintMargin = function() { + return this.renderer.getShowPrintMargin(); + }; + this.setPrintMarginColumn = function(showPrintMargin) { + this.renderer.setPrintMarginColumn(showPrintMargin); + }; + this.getPrintMarginColumn = function() { + return this.renderer.getPrintMarginColumn(); + }; + this.setReadOnly = function(readOnly) { + this.setOption("readOnly", readOnly); + }; + this.getReadOnly = function() { + return this.getOption("readOnly"); + }; + this.setBehavioursEnabled = function (enabled) { + this.setOption("behavioursEnabled", enabled); + }; + this.getBehavioursEnabled = function () { + return this.getOption("behavioursEnabled"); + }; + this.setWrapBehavioursEnabled = function (enabled) { + this.setOption("wrapBehavioursEnabled", enabled); + }; + this.getWrapBehavioursEnabled = function () { + return this.getOption("wrapBehavioursEnabled"); + }; + this.setShowFoldWidgets = function(show) { + this.setOption("showFoldWidgets", show); + + }; + this.getShowFoldWidgets = function() { + return this.getOption("showFoldWidgets"); + }; + + this.setFadeFoldWidgets = function(fade) { + this.setOption("fadeFoldWidgets", fade); + }; + + this.getFadeFoldWidgets = function() { + return this.getOption("fadeFoldWidgets"); + }; + this.remove = function(dir) { + if (this.selection.isEmpty()){ + if (dir == "left") + this.selection.selectLeft(); + else + this.selection.selectRight(); + } + + var range = this.getSelectionRange(); + if (this.getBehavioursEnabled()) { + var session = this.session; + var state = session.getState(range.start.row); + var new_range = session.getMode().transformAction(state, 'deletion', this, session, range); + + if (range.end.column === 0) { + var text = session.getTextRange(range); + if (text[text.length - 1] == "\n") { + var line = session.getLine(range.end.row); + if (/^\s+$/.test(line)) { + range.end.column = line.length; + } + } + } + if (new_range) + range = new_range; + } + + this.session.remove(range); + this.clearSelection(); + }; + this.removeWordRight = function() { + if (this.selection.isEmpty()) + this.selection.selectWordRight(); + + this.session.remove(this.getSelectionRange()); + this.clearSelection(); + }; + this.removeWordLeft = function() { + if (this.selection.isEmpty()) + this.selection.selectWordLeft(); + + this.session.remove(this.getSelectionRange()); + this.clearSelection(); + }; + this.removeToLineStart = function() { + if (this.selection.isEmpty()) + this.selection.selectLineStart(); + + this.session.remove(this.getSelectionRange()); + this.clearSelection(); + }; + this.removeToLineEnd = function() { + if (this.selection.isEmpty()) + this.selection.selectLineEnd(); + + var range = this.getSelectionRange(); + if (range.start.column == range.end.column && range.start.row == range.end.row) { + range.end.column = 0; + range.end.row++; + } + + this.session.remove(range); + this.clearSelection(); + }; + this.splitLine = function() { + if (!this.selection.isEmpty()) { + this.session.remove(this.getSelectionRange()); + this.clearSelection(); + } + + var cursor = this.getCursorPosition(); + this.insert("\n"); + this.moveCursorToPosition(cursor); + }; + this.transposeLetters = function() { + if (!this.selection.isEmpty()) { + return; + } + + var cursor = this.getCursorPosition(); + var column = cursor.column; + if (column === 0) + return; + + var line = this.session.getLine(cursor.row); + var swap, range; + if (column < line.length) { + swap = line.charAt(column) + line.charAt(column-1); + range = new Range(cursor.row, column-1, cursor.row, column+1); + } + else { + swap = line.charAt(column-1) + line.charAt(column-2); + range = new Range(cursor.row, column-2, cursor.row, column); + } + this.session.replace(range, swap); + }; + this.toLowerCase = function() { + var originalRange = this.getSelectionRange(); + if (this.selection.isEmpty()) { + this.selection.selectWord(); + } + + var range = this.getSelectionRange(); + var text = this.session.getTextRange(range); + this.session.replace(range, text.toLowerCase()); + this.selection.setSelectionRange(originalRange); + }; + this.toUpperCase = function() { + var originalRange = this.getSelectionRange(); + if (this.selection.isEmpty()) { + this.selection.selectWord(); + } + + var range = this.getSelectionRange(); + var text = this.session.getTextRange(range); + this.session.replace(range, text.toUpperCase()); + this.selection.setSelectionRange(originalRange); + }; + this.indent = function() { + var session = this.session; + var range = this.getSelectionRange(); + + if (range.start.row < range.end.row) { + var rows = this.$getSelectedRows(); + session.indentRows(rows.first, rows.last, "\t"); + return; + } else if (range.start.column < range.end.column) { + var text = session.getTextRange(range); + if (!/^\s+$/.test(text)) { + var rows = this.$getSelectedRows(); + session.indentRows(rows.first, rows.last, "\t"); + return; + } + } + + var line = session.getLine(range.start.row); + var position = range.start; + var size = session.getTabSize(); + var column = session.documentToScreenColumn(position.row, position.column); + + if (this.session.getUseSoftTabs()) { + var count = (size - column % size); + var indentString = lang.stringRepeat(" ", count); + } else { + var count = column % size; + while (line[range.start.column] == " " && count) { + range.start.column--; + count--; + } + this.selection.setSelectionRange(range); + indentString = "\t"; + } + return this.insert(indentString); + }; + this.blockIndent = function() { + var rows = this.$getSelectedRows(); + this.session.indentRows(rows.first, rows.last, "\t"); + }; + this.blockOutdent = function() { + var selection = this.session.getSelection(); + this.session.outdentRows(selection.getRange()); + }; + this.sortLines = function() { + var rows = this.$getSelectedRows(); + var session = this.session; + + var lines = []; + for (i = rows.first; i <= rows.last; i++) + lines.push(session.getLine(i)); + + lines.sort(function(a, b) { + if (a.toLowerCase() < b.toLowerCase()) return -1; + if (a.toLowerCase() > b.toLowerCase()) return 1; + return 0; + }); + + var deleteRange = new Range(0, 0, 0, 0); + for (var i = rows.first; i <= rows.last; i++) { + var line = session.getLine(i); + deleteRange.start.row = i; + deleteRange.end.row = i; + deleteRange.end.column = line.length; + session.replace(deleteRange, lines[i-rows.first]); + } + }; + this.toggleCommentLines = function() { + var state = this.session.getState(this.getCursorPosition().row); + var rows = this.$getSelectedRows(); + this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last); + }; + + this.toggleBlockComment = function() { + var cursor = this.getCursorPosition(); + var state = this.session.getState(cursor.row); + var range = this.getSelectionRange(); + this.session.getMode().toggleBlockComment(state, this.session, range, cursor); + }; + this.getNumberAt = function(row, column) { + var _numberRx = /[\-]?[0-9]+(?:\.[0-9]+)?/g; + _numberRx.lastIndex = 0; + + var s = this.session.getLine(row); + while (_numberRx.lastIndex < column) { + var m = _numberRx.exec(s); + if(m.index <= column && m.index+m[0].length >= column){ + var number = { + value: m[0], + start: m.index, + end: m.index+m[0].length + }; + return number; + } + } + return null; + }; + this.modifyNumber = function(amount) { + var row = this.selection.getCursor().row; + var column = this.selection.getCursor().column; + var charRange = new Range(row, column-1, row, column); + + var c = this.session.getTextRange(charRange); + if (!isNaN(parseFloat(c)) && isFinite(c)) { + var nr = this.getNumberAt(row, column); + if (nr) { + var fp = nr.value.indexOf(".") >= 0 ? nr.start + nr.value.indexOf(".") + 1 : nr.end; + var decimals = nr.start + nr.value.length - fp; + + var t = parseFloat(nr.value); + t *= Math.pow(10, decimals); + + + if(fp !== nr.end && column < fp){ + amount *= Math.pow(10, nr.end - column - 1); + } else { + amount *= Math.pow(10, nr.end - column); + } + + t += amount; + t /= Math.pow(10, decimals); + var nnr = t.toFixed(decimals); + var replaceRange = new Range(row, nr.start, row, nr.end); + this.session.replace(replaceRange, nnr); + this.moveCursorTo(row, Math.max(nr.start +1, column + nnr.length - nr.value.length)); + + } + } + }; + this.removeLines = function() { + var rows = this.$getSelectedRows(); + this.session.removeFullLines(rows.first, rows.last); + this.clearSelection(); + }; + + this.duplicateSelection = function() { + var sel = this.selection; + var doc = this.session; + var range = sel.getRange(); + var reverse = sel.isBackwards(); + if (range.isEmpty()) { + var row = range.start.row; + doc.duplicateLines(row, row); + } else { + var point = reverse ? range.start : range.end; + var endPoint = doc.insert(point, doc.getTextRange(range), false); + range.start = point; + range.end = endPoint; + + sel.setSelectionRange(range, reverse); + } + }; + this.moveLinesDown = function() { + this.$moveLines(1, false); + }; + this.moveLinesUp = function() { + this.$moveLines(-1, false); + }; + this.moveText = function(range, toPosition, copy) { + return this.session.moveText(range, toPosition, copy); + }; + this.copyLinesUp = function() { + this.$moveLines(-1, true); + }; + this.copyLinesDown = function() { + this.$moveLines(1, true); + }; + this.$moveLines = function(dir, copy) { + var rows, moved; + var selection = this.selection; + if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) { + var range = selection.toOrientedRange(); + rows = this.$getSelectedRows(range); + moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir); + if (copy && dir == -1) moved = 0; + range.moveBy(moved, 0); + selection.fromOrientedRange(range); + } else { + var ranges = selection.rangeList.ranges; + selection.rangeList.detach(this.session); + this.inVirtualSelectionMode = true; + + var diff = 0; + var totalDiff = 0; + var l = ranges.length; + for (var i = 0; i < l; i++) { + var rangeIndex = i; + ranges[i].moveBy(diff, 0); + rows = this.$getSelectedRows(ranges[i]); + var first = rows.first; + var last = rows.last; + while (++i < l) { + if (totalDiff) ranges[i].moveBy(totalDiff, 0); + var subRows = this.$getSelectedRows(ranges[i]); + if (copy && subRows.first != last) + break; + else if (!copy && subRows.first > last + 1) + break; + last = subRows.last; + } + i--; + diff = this.session.$moveLines(first, last, copy ? 0 : dir); + if (copy && dir == -1) rangeIndex = i + 1; + while (rangeIndex <= i) { + ranges[rangeIndex].moveBy(diff, 0); + rangeIndex++; + } + if (!copy) diff = 0; + totalDiff += diff; + } + + selection.fromOrientedRange(selection.ranges[0]); + selection.rangeList.attach(this.session); + this.inVirtualSelectionMode = false; + } + }; + this.$getSelectedRows = function(range) { + range = (range || this.getSelectionRange()).collapseRows(); + + return { + first: this.session.getRowFoldStart(range.start.row), + last: this.session.getRowFoldEnd(range.end.row) + }; + }; + + this.onCompositionStart = function(text) { + this.renderer.showComposition(this.getCursorPosition()); + }; + + this.onCompositionUpdate = function(text) { + this.renderer.setCompositionText(text); + }; + + this.onCompositionEnd = function() { + this.renderer.hideComposition(); + }; + this.getFirstVisibleRow = function() { + return this.renderer.getFirstVisibleRow(); + }; + this.getLastVisibleRow = function() { + return this.renderer.getLastVisibleRow(); + }; + this.isRowVisible = function(row) { + return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow()); + }; + this.isRowFullyVisible = function(row) { + return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow()); + }; + this.$getVisibleRowCount = function() { + return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1; + }; + + this.$moveByPage = function(dir, select) { + var renderer = this.renderer; + var config = this.renderer.layerConfig; + var rows = dir * Math.floor(config.height / config.lineHeight); + + this.$blockScrolling++; + if (select === true) { + this.selection.$moveSelection(function(){ + this.moveCursorBy(rows, 0); + }); + } else if (select === false) { + this.selection.moveCursorBy(rows, 0); + this.selection.clearSelection(); + } + this.$blockScrolling--; + + var scrollTop = renderer.scrollTop; + + renderer.scrollBy(0, rows * config.lineHeight); + if (select != null) + renderer.scrollCursorIntoView(null, 0.5); + + renderer.animateScrolling(scrollTop); + }; + this.selectPageDown = function() { + this.$moveByPage(1, true); + }; + this.selectPageUp = function() { + this.$moveByPage(-1, true); + }; + this.gotoPageDown = function() { + this.$moveByPage(1, false); + }; + this.gotoPageUp = function() { + this.$moveByPage(-1, false); + }; + this.scrollPageDown = function() { + this.$moveByPage(1); + }; + this.scrollPageUp = function() { + this.$moveByPage(-1); + }; + this.scrollToRow = function(row) { + this.renderer.scrollToRow(row); + }; + this.scrollToLine = function(line, center, animate, callback) { + this.renderer.scrollToLine(line, center, animate, callback); + }; + this.centerSelection = function() { + var range = this.getSelectionRange(); + var pos = { + row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2), + column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2) + }; + this.renderer.alignCursor(pos, 0.5); + }; + this.getCursorPosition = function() { + return this.selection.getCursor(); + }; + this.getCursorPositionScreen = function() { + return this.session.documentToScreenPosition(this.getCursorPosition()); + }; + this.getSelectionRange = function() { + return this.selection.getRange(); + }; + this.selectAll = function() { + this.$blockScrolling += 1; + this.selection.selectAll(); + this.$blockScrolling -= 1; + }; + this.clearSelection = function() { + this.selection.clearSelection(); + }; + this.moveCursorTo = function(row, column) { + this.selection.moveCursorTo(row, column); + }; + this.moveCursorToPosition = function(pos) { + this.selection.moveCursorToPosition(pos); + }; + this.jumpToMatching = function(select, expand) { + var cursor = this.getCursorPosition(); + var iterator = new TokenIterator(this.session, cursor.row, cursor.column); + var prevToken = iterator.getCurrentToken(); + var token = prevToken || iterator.stepForward(); + + if (!token) return; + var matchType; + var found = false; + var depth = {}; + var i = cursor.column - token.start; + var bracketType; + var brackets = { + ")": "(", + "(": "(", + "]": "[", + "[": "[", + "{": "{", + "}": "{" + }; + + do { + if (token.value.match(/[{}()\[\]]/g)) { + for (; i < token.value.length && !found; i++) { + if (!brackets[token.value[i]]) { + continue; + } + + bracketType = brackets[token.value[i]] + '.' + token.type.replace("rparen", "lparen"); + + if (isNaN(depth[bracketType])) { + depth[bracketType] = 0; + } + + switch (token.value[i]) { + case '(': + case '[': + case '{': + depth[bracketType]++; + break; + case ')': + case ']': + case '}': + depth[bracketType]--; + + if (depth[bracketType] === -1) { + matchType = 'bracket'; + found = true; + } + break; + } + } + } + else if (token && token.type.indexOf('tag-name') !== -1) { + if (isNaN(depth[token.value])) { + depth[token.value] = 0; + } + + if (prevToken.value === '<') { + depth[token.value]++; + } + else if (prevToken.value === '= 0; --i) { + if(this.$tryReplace(ranges[i], replacement)) { + replaced++; + } + } + + this.selection.setSelectionRange(selection); + this.$blockScrolling -= 1; + + return replaced; + }; + + this.$tryReplace = function(range, replacement) { + var input = this.session.getTextRange(range); + replacement = this.$search.replace(input, replacement); + if (replacement !== null) { + range.end = this.session.replace(range, replacement); + return range; + } else { + return null; + } + }; + this.getLastSearchOptions = function() { + return this.$search.getOptions(); + }; + this.find = function(needle, options, animate) { + if (!options) + options = {}; + + if (typeof needle == "string" || needle instanceof RegExp) + options.needle = needle; + else if (typeof needle == "object") + oop.mixin(options, needle); + + var range = this.selection.getRange(); + if (options.needle == null) { + needle = this.session.getTextRange(range) + || this.$search.$options.needle; + if (!needle) { + range = this.session.getWordRange(range.start.row, range.start.column); + needle = this.session.getTextRange(range); + } + this.$search.set({needle: needle}); + } + + this.$search.set(options); + if (!options.start) + this.$search.set({start: range}); + + var newRange = this.$search.find(this.session); + if (options.preventScroll) + return newRange; + if (newRange) { + this.revealRange(newRange, animate); + return newRange; + } + if (options.backwards) + range.start = range.end; + else + range.end = range.start; + this.selection.setRange(range); + }; + this.findNext = function(options, animate) { + this.find({skipCurrent: true, backwards: false}, options, animate); + }; + this.findPrevious = function(options, animate) { + this.find(options, {skipCurrent: true, backwards: true}, animate); + }; + + this.revealRange = function(range, animate) { + this.$blockScrolling += 1; + this.session.unfold(range); + this.selection.setSelectionRange(range); + this.$blockScrolling -= 1; + + var scrollTop = this.renderer.scrollTop; + this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5); + if (animate !== false) + this.renderer.animateScrolling(scrollTop); + }; + this.undo = function() { + this.$blockScrolling++; + this.session.getUndoManager().undo(); + this.$blockScrolling--; + this.renderer.scrollCursorIntoView(null, 0.5); + }; + this.redo = function() { + this.$blockScrolling++; + this.session.getUndoManager().redo(); + this.$blockScrolling--; + this.renderer.scrollCursorIntoView(null, 0.5); + }; + this.destroy = function() { + this.renderer.destroy(); + this._signal("destroy", this); + if (this.session) { + this.session.destroy(); + } + }; + this.setAutoScrollEditorIntoView = function(enable) { + if (!enable) + return; + var rect; + var self = this; + var shouldScroll = false; + if (!this.$scrollAnchor) + this.$scrollAnchor = document.createElement("div"); + var scrollAnchor = this.$scrollAnchor; + scrollAnchor.style.cssText = "position:absolute"; + this.container.insertBefore(scrollAnchor, this.container.firstChild); + var onChangeSelection = this.on("changeSelection", function() { + shouldScroll = true; + }); + var onBeforeRender = this.renderer.on("beforeRender", function() { + if (shouldScroll) + rect = self.renderer.container.getBoundingClientRect(); + }); + var onAfterRender = this.renderer.on("afterRender", function() { + if (shouldScroll && rect && (self.isFocused() + || self.searchBox && self.searchBox.isFocused()) + ) { + var renderer = self.renderer; + var pos = renderer.$cursorLayer.$pixelPos; + var config = renderer.layerConfig; + var top = pos.top - config.offset; + if (pos.top >= 0 && top + rect.top < 0) { + shouldScroll = true; + } else if (pos.top < config.height && + pos.top + rect.top + config.lineHeight > window.innerHeight) { + shouldScroll = false; + } else { + shouldScroll = null; + } + if (shouldScroll != null) { + scrollAnchor.style.top = top + "px"; + scrollAnchor.style.left = pos.left + "px"; + scrollAnchor.style.height = config.lineHeight + "px"; + scrollAnchor.scrollIntoView(shouldScroll); + } + shouldScroll = rect = null; + } + }); + this.setAutoScrollEditorIntoView = function(enable) { + if (enable) + return; + delete this.setAutoScrollEditorIntoView; + this.off("changeSelection", onChangeSelection); + this.renderer.off("afterRender", onAfterRender); + this.renderer.off("beforeRender", onBeforeRender); + }; + }; + + + this.$resetCursorStyle = function() { + var style = this.$cursorStyle || "ace"; + var cursorLayer = this.renderer.$cursorLayer; + if (!cursorLayer) + return; + cursorLayer.setSmoothBlinking(/smooth/.test(style)); + cursorLayer.isBlinking = !this.$readOnly && style != "wide"; + dom.setCssClass(cursorLayer.element, "ace_slim-cursors", /slim/.test(style)); + }; + +}).call(Editor.prototype); + + + +config.defineOptions(Editor.prototype, "editor", { + selectionStyle: { + set: function(style) { + this.onSelectionChange(); + this._signal("changeSelectionStyle", {data: style}); + }, + initialValue: "line" + }, + highlightActiveLine: { + set: function() {this.$updateHighlightActiveLine();}, + initialValue: true + }, + highlightSelectedWord: { + set: function(shouldHighlight) {this.$onSelectionChange();}, + initialValue: true + }, + readOnly: { + set: function(readOnly) { + this.$resetCursorStyle(); + }, + initialValue: false + }, + cursorStyle: { + set: function(val) { this.$resetCursorStyle(); }, + values: ["ace", "slim", "smooth", "wide"], + initialValue: "ace" + }, + mergeUndoDeltas: { + values: [false, true, "always"], + initialValue: true + }, + behavioursEnabled: {initialValue: true}, + wrapBehavioursEnabled: {initialValue: true}, + autoScrollEditorIntoView: { + set: function(val) {this.setAutoScrollEditorIntoView(val)} + }, + keyboardHandler: { + set: function(val) { this.setKeyboardHandler(val); }, + get: function() { return this.keybindingId; }, + handlesSet: true + }, + + hScrollBarAlwaysVisible: "renderer", + vScrollBarAlwaysVisible: "renderer", + highlightGutterLine: "renderer", + animatedScroll: "renderer", + showInvisibles: "renderer", + showPrintMargin: "renderer", + printMarginColumn: "renderer", + printMargin: "renderer", + fadeFoldWidgets: "renderer", + showFoldWidgets: "renderer", + showLineNumbers: "renderer", + showGutter: "renderer", + displayIndentGuides: "renderer", + fontSize: "renderer", + fontFamily: "renderer", + maxLines: "renderer", + minLines: "renderer", + scrollPastEnd: "renderer", + fixedWidthGutter: "renderer", + theme: "renderer", + + scrollSpeed: "$mouseHandler", + dragDelay: "$mouseHandler", + dragEnabled: "$mouseHandler", + focusTimout: "$mouseHandler", + tooltipFollowsMouse: "$mouseHandler", + + firstLineNumber: "session", + overwrite: "session", + newLineMode: "session", + useWorker: "session", + useSoftTabs: "session", + tabSize: "session", + wrap: "session", + indentedSoftWrap: "session", + foldStyle: "session", + mode: "session" +}); + +exports.Editor = Editor; +}); + +ace.define("ace/undomanager",["require","exports","module"], function(acequire, exports, module) { +"use strict"; +var UndoManager = function() { + this.reset(); +}; + +(function() { + this.execute = function(options) { + var deltaSets = options.args[0]; + this.$doc = options.args[1]; + if (options.merge && this.hasUndo()){ + this.dirtyCounter--; + deltaSets = this.$undoStack.pop().concat(deltaSets); + } + this.$undoStack.push(deltaSets); + this.$redoStack = []; + if (this.dirtyCounter < 0) { + this.dirtyCounter = NaN; + } + this.dirtyCounter++; + }; + this.undo = function(dontSelect) { + var deltaSets = this.$undoStack.pop(); + var undoSelectionRange = null; + if (deltaSets) { + undoSelectionRange = this.$doc.undoChanges(deltaSets, dontSelect); + this.$redoStack.push(deltaSets); + this.dirtyCounter--; + } + + return undoSelectionRange; + }; + this.redo = function(dontSelect) { + var deltaSets = this.$redoStack.pop(); + var redoSelectionRange = null; + if (deltaSets) { + redoSelectionRange = + this.$doc.redoChanges(this.$deserializeDeltas(deltaSets), dontSelect); + this.$undoStack.push(deltaSets); + this.dirtyCounter++; + } + return redoSelectionRange; + }; + this.reset = function() { + this.$undoStack = []; + this.$redoStack = []; + this.dirtyCounter = 0; + }; + this.hasUndo = function() { + return this.$undoStack.length > 0; + }; + this.hasRedo = function() { + return this.$redoStack.length > 0; + }; + this.markClean = function() { + this.dirtyCounter = 0; + }; + this.isClean = function() { + return this.dirtyCounter === 0; + }; + this.$serializeDeltas = function(deltaSets) { + return cloneDeltaSetsObj(deltaSets, $serializeDelta); + }; + this.$deserializeDeltas = function(deltaSets) { + return cloneDeltaSetsObj(deltaSets, $deserializeDelta); + }; + + function $serializeDelta(delta){ + return { + action: delta.action, + start: delta.start, + end: delta.end, + lines: delta.lines.length == 1 ? null : delta.lines, + text: delta.lines.length == 1 ? delta.lines[0] : null + }; + } + + function $deserializeDelta(delta) { + return { + action: delta.action, + start: delta.start, + end: delta.end, + lines: delta.lines || [delta.text] + }; + } + + function cloneDeltaSetsObj(deltaSets_old, fnGetModifiedDelta) { + var deltaSets_new = new Array(deltaSets_old.length); + for (var i = 0; i < deltaSets_old.length; i++) { + var deltaSet_old = deltaSets_old[i]; + var deltaSet_new = { group: deltaSet_old.group, deltas: new Array(deltaSet_old.length)}; + + for (var j = 0; j < deltaSet_old.deltas.length; j++) { + var delta_old = deltaSet_old.deltas[j]; + deltaSet_new.deltas[j] = fnGetModifiedDelta(delta_old); + } + + deltaSets_new[i] = deltaSet_new; + } + return deltaSets_new; + } + +}).call(UndoManager.prototype); + +exports.UndoManager = UndoManager; +}); + +ace.define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter"], function(acequire, exports, module) { +"use strict"; + +var dom = acequire("../lib/dom"); +var oop = acequire("../lib/oop"); +var lang = acequire("../lib/lang"); +var EventEmitter = acequire("../lib/event_emitter").EventEmitter; + +var Gutter = function(parentEl) { + this.element = dom.createElement("div"); + this.element.className = "ace_layer ace_gutter-layer"; + parentEl.appendChild(this.element); + this.setShowFoldWidgets(this.$showFoldWidgets); + + this.gutterWidth = 0; + + this.$annotations = []; + this.$updateAnnotations = this.$updateAnnotations.bind(this); + + this.$cells = []; +}; + +(function() { + + oop.implement(this, EventEmitter); + + this.setSession = function(session) { + if (this.session) + this.session.removeEventListener("change", this.$updateAnnotations); + this.session = session; + if (session) + session.on("change", this.$updateAnnotations); + }; + + this.addGutterDecoration = function(row, className){ + if (window.console) + console.warn && console.warn("deprecated use session.addGutterDecoration"); + this.session.addGutterDecoration(row, className); + }; + + this.removeGutterDecoration = function(row, className){ + if (window.console) + console.warn && console.warn("deprecated use session.removeGutterDecoration"); + this.session.removeGutterDecoration(row, className); + }; + + this.setAnnotations = function(annotations) { + this.$annotations = []; + for (var i = 0; i < annotations.length; i++) { + var annotation = annotations[i]; + var row = annotation.row; + var rowInfo = this.$annotations[row]; + if (!rowInfo) + rowInfo = this.$annotations[row] = {text: []}; + + var annoText = annotation.text; + annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || ""; + + if (rowInfo.text.indexOf(annoText) === -1) + rowInfo.text.push(annoText); + + var type = annotation.type; + if (type == "error") + rowInfo.className = " ace_error"; + else if (type == "warning" && rowInfo.className != " ace_error") + rowInfo.className = " ace_warning"; + else if (type == "info" && (!rowInfo.className)) + rowInfo.className = " ace_info"; + } + }; + + this.$updateAnnotations = function (delta) { + if (!this.$annotations.length) + return; + var firstRow = delta.start.row; + var len = delta.end.row - firstRow; + if (len === 0) { + } else if (delta.action == 'remove') { + this.$annotations.splice(firstRow, len + 1, null); + } else { + var args = new Array(len + 1); + args.unshift(firstRow, 1); + this.$annotations.splice.apply(this.$annotations, args); + } + }; + + this.update = function(config) { + var session = this.session; + var firstRow = config.firstRow; + var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar + session.getLength() - 1); + var fold = session.getNextFoldLine(firstRow); + var foldStart = fold ? fold.start.row : Infinity; + var foldWidgets = this.$showFoldWidgets && session.foldWidgets; + var breakpoints = session.$breakpoints; + var decorations = session.$decorations; + var firstLineNumber = session.$firstLineNumber; + var lastLineNumber = 0; + + var gutterRenderer = session.gutterRenderer || this.$renderer; + + var cell = null; + var index = -1; + var row = firstRow; + while (true) { + if (row > foldStart) { + row = fold.end.row + 1; + fold = session.getNextFoldLine(row, fold); + foldStart = fold ? fold.start.row : Infinity; + } + if (row > lastRow) { + while (this.$cells.length > index + 1) { + cell = this.$cells.pop(); + this.element.removeChild(cell.element); + } + break; + } + + cell = this.$cells[++index]; + if (!cell) { + cell = {element: null, textNode: null, foldWidget: null}; + cell.element = dom.createElement("div"); + cell.textNode = document.createTextNode(''); + cell.element.appendChild(cell.textNode); + this.element.appendChild(cell.element); + this.$cells[index] = cell; + } + + var className = "ace_gutter-cell "; + if (breakpoints[row]) + className += breakpoints[row]; + if (decorations[row]) + className += decorations[row]; + if (this.$annotations[row]) + className += this.$annotations[row].className; + if (cell.element.className != className) + cell.element.className = className; + + var height = session.getRowLength(row) * config.lineHeight + "px"; + if (height != cell.element.style.height) + cell.element.style.height = height; + + if (foldWidgets) { + var c = foldWidgets[row]; + if (c == null) + c = foldWidgets[row] = session.getFoldWidget(row); + } + + if (c) { + if (!cell.foldWidget) { + cell.foldWidget = dom.createElement("span"); + cell.element.appendChild(cell.foldWidget); + } + var className = "ace_fold-widget ace_" + c; + if (c == "start" && row == foldStart && row < fold.end.row) + className += " ace_closed"; + else + className += " ace_open"; + if (cell.foldWidget.className != className) + cell.foldWidget.className = className; + + var height = config.lineHeight + "px"; + if (cell.foldWidget.style.height != height) + cell.foldWidget.style.height = height; + } else { + if (cell.foldWidget) { + cell.element.removeChild(cell.foldWidget); + cell.foldWidget = null; + } + } + + var text = lastLineNumber = gutterRenderer + ? gutterRenderer.getText(session, row) + : row + firstLineNumber; + if (text != cell.textNode.data) + cell.textNode.data = text; + + row++; + } + + this.element.style.height = config.minHeight + "px"; + + if (this.$fixedWidth || session.$useWrapMode) + lastLineNumber = session.getLength() + firstLineNumber; + + var gutterWidth = gutterRenderer + ? gutterRenderer.getWidth(session, lastLineNumber, config) + : lastLineNumber.toString().length * config.characterWidth; + + var padding = this.$padding || this.$computePadding(); + gutterWidth += padding.left + padding.right; + if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) { + this.gutterWidth = gutterWidth; + this.element.style.width = Math.ceil(this.gutterWidth) + "px"; + this._emit("changeGutterWidth", gutterWidth); + } + }; + + this.$fixedWidth = false; + + this.$showLineNumbers = true; + this.$renderer = ""; + this.setShowLineNumbers = function(show) { + this.$renderer = !show && { + getWidth: function() {return ""}, + getText: function() {return ""} + }; + }; + + this.getShowLineNumbers = function() { + return this.$showLineNumbers; + }; + + this.$showFoldWidgets = true; + this.setShowFoldWidgets = function(show) { + if (show) + dom.addCssClass(this.element, "ace_folding-enabled"); + else + dom.removeCssClass(this.element, "ace_folding-enabled"); + + this.$showFoldWidgets = show; + this.$padding = null; + }; + + this.getShowFoldWidgets = function() { + return this.$showFoldWidgets; + }; + + this.$computePadding = function() { + if (!this.element.firstChild) + return {left: 0, right: 0}; + var style = dom.computedStyle(this.element.firstChild); + this.$padding = {}; + this.$padding.left = parseInt(style.paddingLeft) + 1 || 0; + this.$padding.right = parseInt(style.paddingRight) || 0; + return this.$padding; + }; + + this.getRegion = function(point) { + var padding = this.$padding || this.$computePadding(); + var rect = this.element.getBoundingClientRect(); + if (point.x < padding.left + rect.left) + return "markers"; + if (this.$showFoldWidgets && point.x > rect.right - padding.right) + return "foldWidgets"; + }; + +}).call(Gutter.prototype); + +exports.Gutter = Gutter; + +}); + +ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"], function(acequire, exports, module) { +"use strict"; + +var Range = acequire("../range").Range; +var dom = acequire("../lib/dom"); + +var Marker = function(parentEl) { + this.element = dom.createElement("div"); + this.element.className = "ace_layer ace_marker-layer"; + parentEl.appendChild(this.element); +}; + +(function() { + + this.$padding = 0; + + this.setPadding = function(padding) { + this.$padding = padding; + }; + this.setSession = function(session) { + this.session = session; + }; + + this.setMarkers = function(markers) { + this.markers = markers; + }; + + this.update = function(config) { + var config = config || this.config; + if (!config) + return; + + this.config = config; + + + var html = []; + for (var key in this.markers) { + var marker = this.markers[key]; + + if (!marker.range) { + marker.update(html, this, this.session, config); + continue; + } + + var range = marker.range.clipRows(config.firstRow, config.lastRow); + if (range.isEmpty()) continue; + + range = range.toScreenRange(this.session); + if (marker.renderer) { + var top = this.$getTop(range.start.row, config); + var left = this.$padding + range.start.column * config.characterWidth; + marker.renderer(html, range, left, top, config); + } else if (marker.type == "fullLine") { + this.drawFullLineMarker(html, range, marker.clazz, config); + } else if (marker.type == "screenLine") { + this.drawScreenLineMarker(html, range, marker.clazz, config); + } else if (range.isMultiLine()) { + if (marker.type == "text") + this.drawTextMarker(html, range, marker.clazz, config); + else + this.drawMultiLineMarker(html, range, marker.clazz, config); + } else { + this.drawSingleLineMarker(html, range, marker.clazz + " ace_start" + " ace_br15", config); + } + } + this.element.innerHTML = html.join(""); + }; + + this.$getTop = function(row, layerConfig) { + return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight; + }; + + function getBorderClass(tl, tr, br, bl) { + return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0); + } + this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) { + var session = this.session; + var start = range.start.row; + var end = range.end.row; + var row = start; + var prev = 0; + var curr = 0; + var next = session.getScreenLastRowColumn(row); + var lineRange = new Range(row, range.start.column, row, curr); + for (; row <= end; row++) { + lineRange.start.row = lineRange.end.row = row; + lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row); + lineRange.end.column = next; + prev = curr; + curr = next; + next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column; + this.drawSingleLineMarker(stringBuilder, lineRange, + clazz + (row == start ? " ace_start" : "") + " ace_br" + + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end), + layerConfig, row == end ? 0 : 1, extraStyle); + } + }; + this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) { + var padding = this.$padding; + var height = config.lineHeight; + var top = this.$getTop(range.start.row, config); + var left = padding + range.start.column * config.characterWidth; + extraStyle = extraStyle || ""; + + stringBuilder.push( + "
" + ); + top = this.$getTop(range.end.row, config); + var width = range.end.column * config.characterWidth; + + stringBuilder.push( + "
" + ); + height = (range.end.row - range.start.row - 1) * config.lineHeight; + if (height <= 0) + return; + top = this.$getTop(range.start.row + 1, config); + + var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8); + + stringBuilder.push( + "
" + ); + }; + this.drawSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) { + var height = config.lineHeight; + var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth; + + var top = this.$getTop(range.start.row, config); + var left = this.$padding + range.start.column * config.characterWidth; + + stringBuilder.push( + "
" + ); + }; + + this.drawFullLineMarker = function(stringBuilder, range, clazz, config, extraStyle) { + var top = this.$getTop(range.start.row, config); + var height = config.lineHeight; + if (range.start.row != range.end.row) + height += this.$getTop(range.end.row, config) - top; + + stringBuilder.push( + "
" + ); + }; + + this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) { + var top = this.$getTop(range.start.row, config); + var height = config.lineHeight; + + stringBuilder.push( + "
" + ); + }; + +}).call(Marker.prototype); + +exports.Marker = Marker; + +}); + +ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("../lib/oop"); +var dom = acequire("../lib/dom"); +var lang = acequire("../lib/lang"); +var useragent = acequire("../lib/useragent"); +var EventEmitter = acequire("../lib/event_emitter").EventEmitter; + +var Text = function(parentEl) { + this.element = dom.createElement("div"); + this.element.className = "ace_layer ace_text-layer"; + parentEl.appendChild(this.element); + this.$updateEolChar = this.$updateEolChar.bind(this); +}; + +(function() { + + oop.implement(this, EventEmitter); + + this.EOF_CHAR = "\xB6"; + this.EOL_CHAR_LF = "\xAC"; + this.EOL_CHAR_CRLF = "\xa4"; + this.EOL_CHAR = this.EOL_CHAR_LF; + this.TAB_CHAR = "\u2014"; //"\u21E5"; + this.SPACE_CHAR = "\xB7"; + this.$padding = 0; + + this.$updateEolChar = function() { + var EOL_CHAR = this.session.doc.getNewLineCharacter() == "\n" + ? this.EOL_CHAR_LF + : this.EOL_CHAR_CRLF; + if (this.EOL_CHAR != EOL_CHAR) { + this.EOL_CHAR = EOL_CHAR; + return true; + } + } + + this.setPadding = function(padding) { + this.$padding = padding; + this.element.style.padding = "0 " + padding + "px"; + }; + + this.getLineHeight = function() { + return this.$fontMetrics.$characterSize.height || 0; + }; + + this.getCharacterWidth = function() { + return this.$fontMetrics.$characterSize.width || 0; + }; + + this.$setFontMetrics = function(measure) { + this.$fontMetrics = measure; + this.$fontMetrics.on("changeCharacterSize", function(e) { + this._signal("changeCharacterSize", e); + }.bind(this)); + this.$pollSizeChanges(); + } + + this.checkForSizeChanges = function() { + this.$fontMetrics.checkForSizeChanges(); + }; + this.$pollSizeChanges = function() { + return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges(); + }; + this.setSession = function(session) { + this.session = session; + if (session) + this.$computeTabString(); + }; + + this.showInvisibles = false; + this.setShowInvisibles = function(showInvisibles) { + if (this.showInvisibles == showInvisibles) + return false; + + this.showInvisibles = showInvisibles; + this.$computeTabString(); + return true; + }; + + this.displayIndentGuides = true; + this.setDisplayIndentGuides = function(display) { + if (this.displayIndentGuides == display) + return false; + + this.displayIndentGuides = display; + this.$computeTabString(); + return true; + }; + + this.$tabStrings = []; + this.onChangeTabSize = + this.$computeTabString = function() { + var tabSize = this.session.getTabSize(); + this.tabSize = tabSize; + var tabStr = this.$tabStrings = [0]; + for (var i = 1; i < tabSize + 1; i++) { + if (this.showInvisibles) { + tabStr.push("" + + lang.stringRepeat(this.TAB_CHAR, i) + + ""); + } else { + tabStr.push(lang.stringRepeat(" ", i)); + } + } + if (this.displayIndentGuides) { + this.$indentGuideRe = /\s\S| \t|\t |\s$/; + var className = "ace_indent-guide"; + var spaceClass = ""; + var tabClass = ""; + if (this.showInvisibles) { + className += " ace_invisible"; + spaceClass = " ace_invisible_space"; + tabClass = " ace_invisible_tab"; + var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize); + var tabContent = lang.stringRepeat(this.TAB_CHAR, this.tabSize); + } else{ + var spaceContent = lang.stringRepeat(" ", this.tabSize); + var tabContent = spaceContent; + } + + this.$tabStrings[" "] = "" + spaceContent + ""; + this.$tabStrings["\t"] = "" + tabContent + ""; + } + }; + + this.updateLines = function(config, firstRow, lastRow) { + if (this.config.lastRow != config.lastRow || + this.config.firstRow != config.firstRow) { + this.scrollLines(config); + } + this.config = config; + + var first = Math.max(firstRow, config.firstRow); + var last = Math.min(lastRow, config.lastRow); + + var lineElements = this.element.childNodes; + var lineElementsIdx = 0; + + for (var row = config.firstRow; row < first; row++) { + var foldLine = this.session.getFoldLine(row); + if (foldLine) { + if (foldLine.containsRow(first)) { + first = foldLine.start.row; + break; + } else { + row = foldLine.end.row; + } + } + lineElementsIdx ++; + } + + var row = first; + var foldLine = this.session.getNextFoldLine(row); + var foldStart = foldLine ? foldLine.start.row : Infinity; + + while (true) { + if (row > foldStart) { + row = foldLine.end.row+1; + foldLine = this.session.getNextFoldLine(row, foldLine); + foldStart = foldLine ? foldLine.start.row :Infinity; + } + if (row > last) + break; + + var lineElement = lineElements[lineElementsIdx++]; + if (lineElement) { + var html = []; + this.$renderLine( + html, row, !this.$useLineGroups(), row == foldStart ? foldLine : false + ); + lineElement.style.height = config.lineHeight * this.session.getRowLength(row) + "px"; + lineElement.innerHTML = html.join(""); + } + row++; + } + }; + + this.scrollLines = function(config) { + var oldConfig = this.config; + this.config = config; + + if (!oldConfig || oldConfig.lastRow < config.firstRow) + return this.update(config); + + if (config.lastRow < oldConfig.firstRow) + return this.update(config); + + var el = this.element; + if (oldConfig.firstRow < config.firstRow) + for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--) + el.removeChild(el.firstChild); + + if (oldConfig.lastRow > config.lastRow) + for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--) + el.removeChild(el.lastChild); + + if (config.firstRow < oldConfig.firstRow) { + var fragment = this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1); + if (el.firstChild) + el.insertBefore(fragment, el.firstChild); + else + el.appendChild(fragment); + } + + if (config.lastRow > oldConfig.lastRow) { + var fragment = this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow); + el.appendChild(fragment); + } + }; + + this.$renderLinesFragment = function(config, firstRow, lastRow) { + var fragment = this.element.ownerDocument.createDocumentFragment(); + var row = firstRow; + var foldLine = this.session.getNextFoldLine(row); + var foldStart = foldLine ? foldLine.start.row : Infinity; + + while (true) { + if (row > foldStart) { + row = foldLine.end.row+1; + foldLine = this.session.getNextFoldLine(row, foldLine); + foldStart = foldLine ? foldLine.start.row : Infinity; + } + if (row > lastRow) + break; + + var container = dom.createElement("div"); + + var html = []; + this.$renderLine(html, row, false, row == foldStart ? foldLine : false); + container.innerHTML = html.join(""); + if (this.$useLineGroups()) { + container.className = 'ace_line_group'; + fragment.appendChild(container); + container.style.height = config.lineHeight * this.session.getRowLength(row) + "px"; + + } else { + while(container.firstChild) + fragment.appendChild(container.firstChild); + } + + row++; + } + return fragment; + }; + + this.update = function(config) { + this.config = config; + + var html = []; + var firstRow = config.firstRow, lastRow = config.lastRow; + + var row = firstRow; + var foldLine = this.session.getNextFoldLine(row); + var foldStart = foldLine ? foldLine.start.row : Infinity; + + while (true) { + if (row > foldStart) { + row = foldLine.end.row+1; + foldLine = this.session.getNextFoldLine(row, foldLine); + foldStart = foldLine ? foldLine.start.row :Infinity; + } + if (row > lastRow) + break; + + if (this.$useLineGroups()) + html.push("
") + + this.$renderLine(html, row, false, row == foldStart ? foldLine : false); + + if (this.$useLineGroups()) + html.push("
"); // end the line group + + row++; + } + this.element.innerHTML = html.join(""); + }; + + this.$textToken = { + "text": true, + "rparen": true, + "lparen": true + }; + + this.$renderToken = function(stringBuilder, screenColumn, token, value) { + var self = this; + var replaceReg = /\t|&|<|>|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF\uFFF9-\uFFFC])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]/g; + var replaceFunc = function(c, a, b, tabIdx, idx4) { + if (a) { + return self.showInvisibles + ? "" + lang.stringRepeat(self.SPACE_CHAR, c.length) + "" + : c; + } else if (c == "&") { + return "&"; + } else if (c == "<") { + return "<"; + } else if (c == ">") { + return ">"; + } else if (c == "\t") { + var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx); + screenColumn += tabSize - 1; + return self.$tabStrings[tabSize]; + } else if (c == "\u3000") { + var classToUse = self.showInvisibles ? "ace_cjk ace_invisible ace_invisible_space" : "ace_cjk"; + var space = self.showInvisibles ? self.SPACE_CHAR : ""; + screenColumn += 1; + return "" + space + ""; + } else if (b) { + return "" + self.SPACE_CHAR + ""; + } else { + screenColumn += 1; + return "" + c + ""; + } + }; + + var output = value.replace(replaceReg, replaceFunc); + + if (!this.$textToken[token.type]) { + var classes = "ace_" + token.type.replace(/\./g, " ace_"); + var style = ""; + if (token.type == "fold") + style = " style='width:" + (token.value.length * this.config.characterWidth) + "px;' "; + stringBuilder.push("", output, ""); + } + else { + stringBuilder.push(output); + } + return screenColumn + value.length; + }; + + this.renderIndentGuide = function(stringBuilder, value, max) { + var cols = value.search(this.$indentGuideRe); + if (cols <= 0 || cols >= max) + return value; + if (value[0] == " ") { + cols -= cols % this.tabSize; + stringBuilder.push(lang.stringRepeat(this.$tabStrings[" "], cols/this.tabSize)); + return value.substr(cols); + } else if (value[0] == "\t") { + stringBuilder.push(lang.stringRepeat(this.$tabStrings["\t"], cols)); + return value.substr(cols); + } + return value; + }; + + this.$renderWrappedLine = function(stringBuilder, tokens, splits, onlyContents) { + var chars = 0; + var split = 0; + var splitChars = splits[0]; + var screenColumn = 0; + + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + var value = token.value; + if (i == 0 && this.displayIndentGuides) { + chars = value.length; + value = this.renderIndentGuide(stringBuilder, value, splitChars); + if (!value) + continue; + chars -= value.length; + } + + if (chars + value.length < splitChars) { + screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value); + chars += value.length; + } else { + while (chars + value.length >= splitChars) { + screenColumn = this.$renderToken( + stringBuilder, screenColumn, + token, value.substring(0, splitChars - chars) + ); + value = value.substring(splitChars - chars); + chars = splitChars; + + if (!onlyContents) { + stringBuilder.push("", + "
" + ); + } + + stringBuilder.push(lang.stringRepeat("\xa0", splits.indent)); + + split ++; + screenColumn = 0; + splitChars = splits[split] || Number.MAX_VALUE; + } + if (value.length != 0) { + chars += value.length; + screenColumn = this.$renderToken( + stringBuilder, screenColumn, token, value + ); + } + } + } + }; + + this.$renderSimpleLine = function(stringBuilder, tokens) { + var screenColumn = 0; + var token = tokens[0]; + var value = token.value; + if (this.displayIndentGuides) + value = this.renderIndentGuide(stringBuilder, value); + if (value) + screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value); + for (var i = 1; i < tokens.length; i++) { + token = tokens[i]; + value = token.value; + screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value); + } + }; + this.$renderLine = function(stringBuilder, row, onlyContents, foldLine) { + if (!foldLine && foldLine != false) + foldLine = this.session.getFoldLine(row); + + if (foldLine) + var tokens = this.$getFoldLineTokens(row, foldLine); + else + var tokens = this.session.getTokens(row); + + + if (!onlyContents) { + stringBuilder.push( + "
" + ); + } + + if (tokens.length) { + var splits = this.session.getRowSplitData(row); + if (splits && splits.length) + this.$renderWrappedLine(stringBuilder, tokens, splits, onlyContents); + else + this.$renderSimpleLine(stringBuilder, tokens); + } + + if (this.showInvisibles) { + if (foldLine) + row = foldLine.end.row + + stringBuilder.push( + "", + row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR, + "" + ); + } + if (!onlyContents) + stringBuilder.push("
"); + }; + + this.$getFoldLineTokens = function(row, foldLine) { + var session = this.session; + var renderTokens = []; + + function addTokens(tokens, from, to) { + var idx = 0, col = 0; + while ((col + tokens[idx].value.length) < from) { + col += tokens[idx].value.length; + idx++; + + if (idx == tokens.length) + return; + } + if (col != from) { + var value = tokens[idx].value.substring(from - col); + if (value.length > (to - from)) + value = value.substring(0, to - from); + + renderTokens.push({ + type: tokens[idx].type, + value: value + }); + + col = from + value.length; + idx += 1; + } + + while (col < to && idx < tokens.length) { + var value = tokens[idx].value; + if (value.length + col > to) { + renderTokens.push({ + type: tokens[idx].type, + value: value.substring(0, to - col) + }); + } else + renderTokens.push(tokens[idx]); + col += value.length; + idx += 1; + } + } + + var tokens = session.getTokens(row); + foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) { + if (placeholder != null) { + renderTokens.push({ + type: "fold", + value: placeholder + }); + } else { + if (isNewRow) + tokens = session.getTokens(row); + + if (tokens.length) + addTokens(tokens, lastColumn, column); + } + }, foldLine.end.row, this.session.getLine(foldLine.end.row).length); + + return renderTokens; + }; + + this.$useLineGroups = function() { + return this.session.getUseWrapMode(); + }; + + this.destroy = function() { + clearInterval(this.$pollSizeChangesTimer); + if (this.$measureNode) + this.$measureNode.parentNode.removeChild(this.$measureNode); + delete this.$measureNode; + }; + +}).call(Text.prototype); + +exports.Text = Text; + +}); + +ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"], function(acequire, exports, module) { +"use strict"; + +var dom = acequire("../lib/dom"); +var isIE8; + +var Cursor = function(parentEl) { + this.element = dom.createElement("div"); + this.element.className = "ace_layer ace_cursor-layer"; + parentEl.appendChild(this.element); + + if (isIE8 === undefined) + isIE8 = !("opacity" in this.element.style); + + this.isVisible = false; + this.isBlinking = true; + this.blinkInterval = 1000; + this.smoothBlinking = false; + + this.cursors = []; + this.cursor = this.addCursor(); + dom.addCssClass(this.element, "ace_hidden-cursors"); + this.$updateCursors = (isIE8 + ? this.$updateVisibility + : this.$updateOpacity).bind(this); +}; + +(function() { + + this.$updateVisibility = function(val) { + var cursors = this.cursors; + for (var i = cursors.length; i--; ) + cursors[i].style.visibility = val ? "" : "hidden"; + }; + this.$updateOpacity = function(val) { + var cursors = this.cursors; + for (var i = cursors.length; i--; ) + cursors[i].style.opacity = val ? "" : "0"; + }; + + + this.$padding = 0; + this.setPadding = function(padding) { + this.$padding = padding; + }; + + this.setSession = function(session) { + this.session = session; + }; + + this.setBlinking = function(blinking) { + if (blinking != this.isBlinking){ + this.isBlinking = blinking; + this.restartTimer(); + } + }; + + this.setBlinkInterval = function(blinkInterval) { + if (blinkInterval != this.blinkInterval){ + this.blinkInterval = blinkInterval; + this.restartTimer(); + } + }; + + this.setSmoothBlinking = function(smoothBlinking) { + if (smoothBlinking != this.smoothBlinking && !isIE8) { + this.smoothBlinking = smoothBlinking; + dom.setCssClass(this.element, "ace_smooth-blinking", smoothBlinking); + this.$updateCursors(true); + this.$updateCursors = (this.$updateOpacity).bind(this); + this.restartTimer(); + } + }; + + this.addCursor = function() { + var el = dom.createElement("div"); + el.className = "ace_cursor"; + this.element.appendChild(el); + this.cursors.push(el); + return el; + }; + + this.removeCursor = function() { + if (this.cursors.length > 1) { + var el = this.cursors.pop(); + el.parentNode.removeChild(el); + return el; + } + }; + + this.hideCursor = function() { + this.isVisible = false; + dom.addCssClass(this.element, "ace_hidden-cursors"); + this.restartTimer(); + }; + + this.showCursor = function() { + this.isVisible = true; + dom.removeCssClass(this.element, "ace_hidden-cursors"); + this.restartTimer(); + }; + + this.restartTimer = function() { + var update = this.$updateCursors; + clearInterval(this.intervalId); + clearTimeout(this.timeoutId); + if (this.smoothBlinking) { + dom.removeCssClass(this.element, "ace_smooth-blinking"); + } + + update(true); + + if (!this.isBlinking || !this.blinkInterval || !this.isVisible) + return; + + if (this.smoothBlinking) { + setTimeout(function(){ + dom.addCssClass(this.element, "ace_smooth-blinking"); + }.bind(this)); + } + + var blink = function(){ + this.timeoutId = setTimeout(function() { + update(false); + }, 0.6 * this.blinkInterval); + }.bind(this); + + this.intervalId = setInterval(function() { + update(true); + blink(); + }, this.blinkInterval); + + blink(); + }; + + this.getPixelPosition = function(position, onScreen) { + if (!this.config || !this.session) + return {left : 0, top : 0}; + + if (!position) + position = this.session.selection.getCursor(); + var pos = this.session.documentToScreenPosition(position); + var cursorLeft = this.$padding + pos.column * this.config.characterWidth; + var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) * + this.config.lineHeight; + + return {left : cursorLeft, top : cursorTop}; + }; + + this.update = function(config) { + this.config = config; + + var selections = this.session.$selectionMarkers; + var i = 0, cursorIndex = 0; + + if (selections === undefined || selections.length === 0){ + selections = [{cursor: null}]; + } + + for (var i = 0, n = selections.length; i < n; i++) { + var pixelPos = this.getPixelPosition(selections[i].cursor, true); + if ((pixelPos.top > config.height + config.offset || + pixelPos.top < 0) && i > 1) { + continue; + } + + var style = (this.cursors[cursorIndex++] || this.addCursor()).style; + + if (!this.drawCursor) { + style.left = pixelPos.left + "px"; + style.top = pixelPos.top + "px"; + style.width = config.characterWidth + "px"; + style.height = config.lineHeight + "px"; + } else { + this.drawCursor(style, pixelPos, config, selections[i], this.session); + } + } + while (this.cursors.length > cursorIndex) + this.removeCursor(); + + var overwrite = this.session.getOverwrite(); + this.$setOverwrite(overwrite); + this.$pixelPos = pixelPos; + this.restartTimer(); + }; + + this.drawCursor = null; + + this.$setOverwrite = function(overwrite) { + if (overwrite != this.overwrite) { + this.overwrite = overwrite; + if (overwrite) + dom.addCssClass(this.element, "ace_overwrite-cursors"); + else + dom.removeCssClass(this.element, "ace_overwrite-cursors"); + } + }; + + this.destroy = function() { + clearInterval(this.intervalId); + clearTimeout(this.timeoutId); + }; + +}).call(Cursor.prototype); + +exports.Cursor = Cursor; + +}); + +ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("./lib/oop"); +var dom = acequire("./lib/dom"); +var event = acequire("./lib/event"); +var EventEmitter = acequire("./lib/event_emitter").EventEmitter; +var ScrollBar = function(parent) { + this.element = dom.createElement("div"); + this.element.className = "ace_scrollbar ace_scrollbar" + this.classSuffix; + + this.inner = dom.createElement("div"); + this.inner.className = "ace_scrollbar-inner"; + this.element.appendChild(this.inner); + + parent.appendChild(this.element); + + this.setVisible(false); + this.skipEvent = false; + + event.addListener(this.element, "scroll", this.onScroll.bind(this)); + event.addListener(this.element, "mousedown", event.preventDefault); +}; + +(function() { + oop.implement(this, EventEmitter); + + this.setVisible = function(isVisible) { + this.element.style.display = isVisible ? "" : "none"; + this.isVisible = isVisible; + }; +}).call(ScrollBar.prototype); +var VScrollBar = function(parent, renderer) { + ScrollBar.call(this, parent); + this.scrollTop = 0; + renderer.$scrollbarWidth = + this.width = dom.scrollbarWidth(parent.ownerDocument); + this.inner.style.width = + this.element.style.width = (this.width || 15) + 5 + "px"; +}; + +oop.inherits(VScrollBar, ScrollBar); + +(function() { + + this.classSuffix = '-v'; + this.onScroll = function() { + if (!this.skipEvent) { + this.scrollTop = this.element.scrollTop; + this._emit("scroll", {data: this.scrollTop}); + } + this.skipEvent = false; + }; + this.getWidth = function() { + return this.isVisible ? this.width : 0; + }; + this.setHeight = function(height) { + this.element.style.height = height + "px"; + }; + this.setInnerHeight = function(height) { + this.inner.style.height = height + "px"; + }; + this.setScrollHeight = function(height) { + this.inner.style.height = height + "px"; + }; + this.setScrollTop = function(scrollTop) { + if (this.scrollTop != scrollTop) { + this.skipEvent = true; + this.scrollTop = this.element.scrollTop = scrollTop; + } + }; + +}).call(VScrollBar.prototype); +var HScrollBar = function(parent, renderer) { + ScrollBar.call(this, parent); + this.scrollLeft = 0; + this.height = renderer.$scrollbarWidth; + this.inner.style.height = + this.element.style.height = (this.height || 15) + 5 + "px"; +}; + +oop.inherits(HScrollBar, ScrollBar); + +(function() { + + this.classSuffix = '-h'; + this.onScroll = function() { + if (!this.skipEvent) { + this.scrollLeft = this.element.scrollLeft; + this._emit("scroll", {data: this.scrollLeft}); + } + this.skipEvent = false; + }; + this.getHeight = function() { + return this.isVisible ? this.height : 0; + }; + this.setWidth = function(width) { + this.element.style.width = width + "px"; + }; + this.setInnerWidth = function(width) { + this.inner.style.width = width + "px"; + }; + this.setScrollWidth = function(width) { + this.inner.style.width = width + "px"; + }; + this.setScrollLeft = function(scrollLeft) { + if (this.scrollLeft != scrollLeft) { + this.skipEvent = true; + this.scrollLeft = this.element.scrollLeft = scrollLeft; + } + }; + +}).call(HScrollBar.prototype); + + +exports.ScrollBar = VScrollBar; // backward compatibility +exports.ScrollBarV = VScrollBar; // backward compatibility +exports.ScrollBarH = HScrollBar; // backward compatibility + +exports.VScrollBar = VScrollBar; +exports.HScrollBar = HScrollBar; +}); + +ace.define("ace/renderloop",["require","exports","module","ace/lib/event"], function(acequire, exports, module) { +"use strict"; + +var event = acequire("./lib/event"); + + +var RenderLoop = function(onRender, win) { + this.onRender = onRender; + this.pending = false; + this.changes = 0; + this.window = win || window; +}; + +(function() { + + + this.schedule = function(change) { + this.changes = this.changes | change; + if (!this.pending && this.changes) { + this.pending = true; + var _self = this; + event.nextFrame(function() { + _self.pending = false; + var changes; + while (changes = _self.changes) { + _self.changes = 0; + _self.onRender(changes); + } + }, this.window); + } + }; + +}).call(RenderLoop.prototype); + +exports.RenderLoop = RenderLoop; +}); + +ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"], function(acequire, exports, module) { + +var oop = acequire("../lib/oop"); +var dom = acequire("../lib/dom"); +var lang = acequire("../lib/lang"); +var useragent = acequire("../lib/useragent"); +var EventEmitter = acequire("../lib/event_emitter").EventEmitter; + +var CHAR_COUNT = 0; + +var FontMetrics = exports.FontMetrics = function(parentEl) { + this.el = dom.createElement("div"); + this.$setMeasureNodeStyles(this.el.style, true); + + this.$main = dom.createElement("div"); + this.$setMeasureNodeStyles(this.$main.style); + + this.$measureNode = dom.createElement("div"); + this.$setMeasureNodeStyles(this.$measureNode.style); + + + this.el.appendChild(this.$main); + this.el.appendChild(this.$measureNode); + parentEl.appendChild(this.el); + + if (!CHAR_COUNT) + this.$testFractionalRect(); + this.$measureNode.innerHTML = lang.stringRepeat("X", CHAR_COUNT); + + this.$characterSize = {width: 0, height: 0}; + this.checkForSizeChanges(); +}; + +(function() { + + oop.implement(this, EventEmitter); + + this.$characterSize = {width: 0, height: 0}; + + this.$testFractionalRect = function() { + var el = dom.createElement("div"); + this.$setMeasureNodeStyles(el.style); + el.style.width = "0.2px"; + document.documentElement.appendChild(el); + var w = el.getBoundingClientRect().width; + if (w > 0 && w < 1) + CHAR_COUNT = 50; + else + CHAR_COUNT = 100; + el.parentNode.removeChild(el); + }; + + this.$setMeasureNodeStyles = function(style, isRoot) { + style.width = style.height = "auto"; + style.left = style.top = "0px"; + style.visibility = "hidden"; + style.position = "absolute"; + style.whiteSpace = "pre"; + + if (useragent.isIE < 8) { + style["font-family"] = "inherit"; + } else { + style.font = "inherit"; + } + style.overflow = isRoot ? "hidden" : "visible"; + }; + + this.checkForSizeChanges = function() { + var size = this.$measureSizes(); + if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) { + this.$measureNode.style.fontWeight = "bold"; + var boldSize = this.$measureSizes(); + this.$measureNode.style.fontWeight = ""; + this.$characterSize = size; + this.charSizes = Object.create(null); + this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height; + this._emit("changeCharacterSize", {data: size}); + } + }; + + this.$pollSizeChanges = function() { + if (this.$pollSizeChangesTimer) + return this.$pollSizeChangesTimer; + var self = this; + return this.$pollSizeChangesTimer = setInterval(function() { + self.checkForSizeChanges(); + }, 500); + }; + + this.setPolling = function(val) { + if (val) { + this.$pollSizeChanges(); + } else if (this.$pollSizeChangesTimer) { + clearInterval(this.$pollSizeChangesTimer); + this.$pollSizeChangesTimer = 0; + } + }; + + this.$measureSizes = function() { + if (CHAR_COUNT === 50) { + var rect = null; + try { + rect = this.$measureNode.getBoundingClientRect(); + } catch(e) { + rect = {width: 0, height:0 }; + } + var size = { + height: rect.height, + width: rect.width / CHAR_COUNT + }; + } else { + var size = { + height: this.$measureNode.clientHeight, + width: this.$measureNode.clientWidth / CHAR_COUNT + }; + } + if (size.width === 0 || size.height === 0) + return null; + return size; + }; + + this.$measureCharWidth = function(ch) { + this.$main.innerHTML = lang.stringRepeat(ch, CHAR_COUNT); + var rect = this.$main.getBoundingClientRect(); + return rect.width / CHAR_COUNT; + }; + + this.getCharacterWidth = function(ch) { + var w = this.charSizes[ch]; + if (w === undefined) { + w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width; + } + return w; + }; + + this.destroy = function() { + clearInterval(this.$pollSizeChangesTimer); + if (this.el && this.el.parentNode) + this.el.parentNode.removeChild(this.el); + }; + +}).call(FontMetrics.prototype); + +}); + +ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/lib/useragent","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("./lib/oop"); +var dom = acequire("./lib/dom"); +var config = acequire("./config"); +var useragent = acequire("./lib/useragent"); +var GutterLayer = acequire("./layer/gutter").Gutter; +var MarkerLayer = acequire("./layer/marker").Marker; +var TextLayer = acequire("./layer/text").Text; +var CursorLayer = acequire("./layer/cursor").Cursor; +var HScrollBar = acequire("./scrollbar").HScrollBar; +var VScrollBar = acequire("./scrollbar").VScrollBar; +var RenderLoop = acequire("./renderloop").RenderLoop; +var FontMetrics = acequire("./layer/font_metrics").FontMetrics; +var EventEmitter = acequire("./lib/event_emitter").EventEmitter; +var editorCss = ".ace_editor {\ +position: relative;\ +overflow: hidden;\ +font: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\ +direction: ltr;\ +}\ +.ace_scroller {\ +position: absolute;\ +overflow: hidden;\ +top: 0;\ +bottom: 0;\ +background-color: inherit;\ +-ms-user-select: none;\ +-moz-user-select: none;\ +-webkit-user-select: none;\ +user-select: none;\ +cursor: text;\ +}\ +.ace_content {\ +position: absolute;\ +-moz-box-sizing: border-box;\ +-webkit-box-sizing: border-box;\ +box-sizing: border-box;\ +min-width: 100%;\ +}\ +.ace_dragging .ace_scroller:before{\ +position: absolute;\ +top: 0;\ +left: 0;\ +right: 0;\ +bottom: 0;\ +content: '';\ +background: rgba(250, 250, 250, 0.01);\ +z-index: 1000;\ +}\ +.ace_dragging.ace_dark .ace_scroller:before{\ +background: rgba(0, 0, 0, 0.01);\ +}\ +.ace_selecting, .ace_selecting * {\ +cursor: text !important;\ +}\ +.ace_gutter {\ +position: absolute;\ +overflow : hidden;\ +width: auto;\ +top: 0;\ +bottom: 0;\ +left: 0;\ +cursor: default;\ +z-index: 4;\ +-ms-user-select: none;\ +-moz-user-select: none;\ +-webkit-user-select: none;\ +user-select: none;\ +}\ +.ace_gutter-active-line {\ +position: absolute;\ +left: 0;\ +right: 0;\ +}\ +.ace_scroller.ace_scroll-left {\ +box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\ +}\ +.ace_gutter-cell {\ +padding-left: 19px;\ +padding-right: 6px;\ +background-repeat: no-repeat;\ +}\ +.ace_gutter-cell.ace_error {\ +background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\");\ +background-repeat: no-repeat;\ +background-position: 2px center;\ +}\ +.ace_gutter-cell.ace_warning {\ +background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\");\ +background-position: 2px center;\ +}\ +.ace_gutter-cell.ace_info {\ +background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\");\ +background-position: 2px center;\ +}\ +.ace_dark .ace_gutter-cell.ace_info {\ +background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\");\ +}\ +.ace_scrollbar {\ +position: absolute;\ +right: 0;\ +bottom: 0;\ +z-index: 6;\ +}\ +.ace_scrollbar-inner {\ +position: absolute;\ +cursor: text;\ +left: 0;\ +top: 0;\ +}\ +.ace_scrollbar-v{\ +overflow-x: hidden;\ +overflow-y: scroll;\ +top: 0;\ +}\ +.ace_scrollbar-h {\ +overflow-x: scroll;\ +overflow-y: hidden;\ +left: 0;\ +}\ +.ace_print-margin {\ +position: absolute;\ +height: 100%;\ +}\ +.ace_text-input {\ +position: absolute;\ +z-index: 0;\ +width: 0.5em;\ +height: 1em;\ +opacity: 0;\ +background: transparent;\ +-moz-appearance: none;\ +appearance: none;\ +border: none;\ +resize: none;\ +outline: none;\ +overflow: hidden;\ +font: inherit;\ +padding: 0 1px;\ +margin: 0 -1px;\ +text-indent: -1em;\ +-ms-user-select: text;\ +-moz-user-select: text;\ +-webkit-user-select: text;\ +user-select: text;\ +white-space: pre!important;\ +}\ +.ace_text-input.ace_composition {\ +background: inherit;\ +color: inherit;\ +z-index: 1000;\ +opacity: 1;\ +text-indent: 0;\ +}\ +.ace_layer {\ +z-index: 1;\ +position: absolute;\ +overflow: hidden;\ +word-wrap: normal;\ +white-space: pre;\ +height: 100%;\ +width: 100%;\ +-moz-box-sizing: border-box;\ +-webkit-box-sizing: border-box;\ +box-sizing: border-box;\ +pointer-events: none;\ +}\ +.ace_gutter-layer {\ +position: relative;\ +width: auto;\ +text-align: right;\ +pointer-events: auto;\ +}\ +.ace_text-layer {\ +font: inherit !important;\ +}\ +.ace_cjk {\ +display: inline-block;\ +text-align: center;\ +}\ +.ace_cursor-layer {\ +z-index: 4;\ +}\ +.ace_cursor {\ +z-index: 4;\ +position: absolute;\ +-moz-box-sizing: border-box;\ +-webkit-box-sizing: border-box;\ +box-sizing: border-box;\ +border-left: 2px solid;\ +transform: translatez(0);\ +}\ +.ace_slim-cursors .ace_cursor {\ +border-left-width: 1px;\ +}\ +.ace_overwrite-cursors .ace_cursor {\ +border-left-width: 0;\ +border-bottom: 1px solid;\ +}\ +.ace_hidden-cursors .ace_cursor {\ +opacity: 0.2;\ +}\ +.ace_smooth-blinking .ace_cursor {\ +-webkit-transition: opacity 0.18s;\ +transition: opacity 0.18s;\ +}\ +.ace_editor.ace_multiselect .ace_cursor {\ +border-left-width: 1px;\ +}\ +.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\ +position: absolute;\ +z-index: 3;\ +}\ +.ace_marker-layer .ace_selection {\ +position: absolute;\ +z-index: 5;\ +}\ +.ace_marker-layer .ace_bracket {\ +position: absolute;\ +z-index: 6;\ +}\ +.ace_marker-layer .ace_active-line {\ +position: absolute;\ +z-index: 2;\ +}\ +.ace_marker-layer .ace_selected-word {\ +position: absolute;\ +z-index: 4;\ +-moz-box-sizing: border-box;\ +-webkit-box-sizing: border-box;\ +box-sizing: border-box;\ +}\ +.ace_line .ace_fold {\ +-moz-box-sizing: border-box;\ +-webkit-box-sizing: border-box;\ +box-sizing: border-box;\ +display: inline-block;\ +height: 11px;\ +margin-top: -2px;\ +vertical-align: middle;\ +background-image:\ +url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),\ +url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\");\ +background-repeat: no-repeat, repeat-x;\ +background-position: center center, top left;\ +color: transparent;\ +border: 1px solid black;\ +border-radius: 2px;\ +cursor: pointer;\ +pointer-events: auto;\ +}\ +.ace_dark .ace_fold {\ +}\ +.ace_fold:hover{\ +background-image:\ +url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),\ +url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\");\ +}\ +.ace_tooltip {\ +background-color: #FFF;\ +background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));\ +background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\ +border: 1px solid gray;\ +border-radius: 1px;\ +box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\ +color: black;\ +max-width: 100%;\ +padding: 3px 4px;\ +position: fixed;\ +z-index: 999999;\ +-moz-box-sizing: border-box;\ +-webkit-box-sizing: border-box;\ +box-sizing: border-box;\ +cursor: default;\ +white-space: pre;\ +word-wrap: break-word;\ +line-height: normal;\ +font-style: normal;\ +font-weight: normal;\ +letter-spacing: normal;\ +pointer-events: none;\ +}\ +.ace_folding-enabled > .ace_gutter-cell {\ +padding-right: 13px;\ +}\ +.ace_fold-widget {\ +-moz-box-sizing: border-box;\ +-webkit-box-sizing: border-box;\ +box-sizing: border-box;\ +margin: 0 -12px 0 1px;\ +display: none;\ +width: 11px;\ +vertical-align: top;\ +background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\");\ +background-repeat: no-repeat;\ +background-position: center;\ +border-radius: 3px;\ +border: 1px solid transparent;\ +cursor: pointer;\ +}\ +.ace_folding-enabled .ace_fold-widget {\ +display: inline-block; \ +}\ +.ace_fold-widget.ace_end {\ +background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\");\ +}\ +.ace_fold-widget.ace_closed {\ +background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\");\ +}\ +.ace_fold-widget:hover {\ +border: 1px solid rgba(0, 0, 0, 0.3);\ +background-color: rgba(255, 255, 255, 0.2);\ +box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\ +}\ +.ace_fold-widget:active {\ +border: 1px solid rgba(0, 0, 0, 0.4);\ +background-color: rgba(0, 0, 0, 0.05);\ +box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\ +}\ +.ace_dark .ace_fold-widget {\ +background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\");\ +}\ +.ace_dark .ace_fold-widget.ace_end {\ +background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\");\ +}\ +.ace_dark .ace_fold-widget.ace_closed {\ +background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\");\ +}\ +.ace_dark .ace_fold-widget:hover {\ +box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\ +background-color: rgba(255, 255, 255, 0.1);\ +}\ +.ace_dark .ace_fold-widget:active {\ +box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\ +}\ +.ace_fold-widget.ace_invalid {\ +background-color: #FFB4B4;\ +border-color: #DE5555;\ +}\ +.ace_fade-fold-widgets .ace_fold-widget {\ +-webkit-transition: opacity 0.4s ease 0.05s;\ +transition: opacity 0.4s ease 0.05s;\ +opacity: 0;\ +}\ +.ace_fade-fold-widgets:hover .ace_fold-widget {\ +-webkit-transition: opacity 0.05s ease 0.05s;\ +transition: opacity 0.05s ease 0.05s;\ +opacity:1;\ +}\ +.ace_underline {\ +text-decoration: underline;\ +}\ +.ace_bold {\ +font-weight: bold;\ +}\ +.ace_nobold .ace_bold {\ +font-weight: normal;\ +}\ +.ace_italic {\ +font-style: italic;\ +}\ +.ace_error-marker {\ +background-color: rgba(255, 0, 0,0.2);\ +position: absolute;\ +z-index: 9;\ +}\ +.ace_highlight-marker {\ +background-color: rgba(255, 255, 0,0.2);\ +position: absolute;\ +z-index: 8;\ +}\ +.ace_br1 {border-top-left-radius : 3px;}\ +.ace_br2 {border-top-right-radius : 3px;}\ +.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\ +.ace_br4 {border-bottom-right-radius: 3px;}\ +.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\ +.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\ +.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\ +.ace_br8 {border-bottom-left-radius : 3px;}\ +.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\ +.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\ +.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\ +.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\ +.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\ +.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\ +.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\ +"; + +dom.importCssString(editorCss, "ace_editor.css"); + +var VirtualRenderer = function(container, theme) { + var _self = this; + + this.container = container || dom.createElement("div"); + this.$keepTextAreaAtCursor = !useragent.isOldIE; + + dom.addCssClass(this.container, "ace_editor"); + + this.setTheme(theme); + + this.$gutter = dom.createElement("div"); + this.$gutter.className = "ace_gutter"; + this.container.appendChild(this.$gutter); + + this.scroller = dom.createElement("div"); + this.scroller.className = "ace_scroller"; + this.container.appendChild(this.scroller); + + this.content = dom.createElement("div"); + this.content.className = "ace_content"; + this.scroller.appendChild(this.content); + + this.$gutterLayer = new GutterLayer(this.$gutter); + this.$gutterLayer.on("changeGutterWidth", this.onGutterResize.bind(this)); + + this.$markerBack = new MarkerLayer(this.content); + + var textLayer = this.$textLayer = new TextLayer(this.content); + this.canvas = textLayer.element; + + this.$markerFront = new MarkerLayer(this.content); + + this.$cursorLayer = new CursorLayer(this.content); + this.$horizScroll = false; + this.$vScroll = false; + + this.scrollBar = + this.scrollBarV = new VScrollBar(this.container, this); + this.scrollBarH = new HScrollBar(this.container, this); + this.scrollBarV.addEventListener("scroll", function(e) { + if (!_self.$scrollAnimation) + _self.session.setScrollTop(e.data - _self.scrollMargin.top); + }); + this.scrollBarH.addEventListener("scroll", function(e) { + if (!_self.$scrollAnimation) + _self.session.setScrollLeft(e.data - _self.scrollMargin.left); + }); + + this.scrollTop = 0; + this.scrollLeft = 0; + + this.cursorPos = { + row : 0, + column : 0 + }; + + this.$fontMetrics = new FontMetrics(this.container); + this.$textLayer.$setFontMetrics(this.$fontMetrics); + this.$textLayer.addEventListener("changeCharacterSize", function(e) { + _self.updateCharacterSize(); + _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height); + _self._signal("changeCharacterSize", e); + }); + + this.$size = { + width: 0, + height: 0, + scrollerHeight: 0, + scrollerWidth: 0, + $dirty: true + }; + + this.layerConfig = { + width : 1, + padding : 0, + firstRow : 0, + firstRowScreen: 0, + lastRow : 0, + lineHeight : 0, + characterWidth : 0, + minHeight : 1, + maxHeight : 1, + offset : 0, + height : 1, + gutterOffset: 1 + }; + + this.scrollMargin = { + left: 0, + right: 0, + top: 0, + bottom: 0, + v: 0, + h: 0 + }; + + this.$loop = new RenderLoop( + this.$renderChanges.bind(this), + this.container.ownerDocument.defaultView + ); + this.$loop.schedule(this.CHANGE_FULL); + + this.updateCharacterSize(); + this.setPadding(4); + config.resetOptions(this); + config._emit("renderer", this); +}; + +(function() { + + this.CHANGE_CURSOR = 1; + this.CHANGE_MARKER = 2; + this.CHANGE_GUTTER = 4; + this.CHANGE_SCROLL = 8; + this.CHANGE_LINES = 16; + this.CHANGE_TEXT = 32; + this.CHANGE_SIZE = 64; + this.CHANGE_MARKER_BACK = 128; + this.CHANGE_MARKER_FRONT = 256; + this.CHANGE_FULL = 512; + this.CHANGE_H_SCROLL = 1024; + + oop.implement(this, EventEmitter); + + this.updateCharacterSize = function() { + if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) { + this.$allowBoldFonts = this.$textLayer.allowBoldFonts; + this.setStyle("ace_nobold", !this.$allowBoldFonts); + } + + this.layerConfig.characterWidth = + this.characterWidth = this.$textLayer.getCharacterWidth(); + this.layerConfig.lineHeight = + this.lineHeight = this.$textLayer.getLineHeight(); + this.$updatePrintMargin(); + }; + this.setSession = function(session) { + if (this.session) + this.session.doc.off("changeNewLineMode", this.onChangeNewLineMode); + + this.session = session; + if (session && this.scrollMargin.top && session.getScrollTop() <= 0) + session.setScrollTop(-this.scrollMargin.top); + + this.$cursorLayer.setSession(session); + this.$markerBack.setSession(session); + this.$markerFront.setSession(session); + this.$gutterLayer.setSession(session); + this.$textLayer.setSession(session); + if (!session) + return; + + this.$loop.schedule(this.CHANGE_FULL); + this.session.$setFontMetrics(this.$fontMetrics); + + this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this); + this.onChangeNewLineMode() + this.session.doc.on("changeNewLineMode", this.onChangeNewLineMode); + }; + this.updateLines = function(firstRow, lastRow, force) { + if (lastRow === undefined) + lastRow = Infinity; + + if (!this.$changedLines) { + this.$changedLines = { + firstRow: firstRow, + lastRow: lastRow + }; + } + else { + if (this.$changedLines.firstRow > firstRow) + this.$changedLines.firstRow = firstRow; + + if (this.$changedLines.lastRow < lastRow) + this.$changedLines.lastRow = lastRow; + } + if (this.$changedLines.lastRow < this.layerConfig.firstRow) { + if (force) + this.$changedLines.lastRow = this.layerConfig.lastRow; + else + return; + } + if (this.$changedLines.firstRow > this.layerConfig.lastRow) + return; + this.$loop.schedule(this.CHANGE_LINES); + }; + + this.onChangeNewLineMode = function() { + this.$loop.schedule(this.CHANGE_TEXT); + this.$textLayer.$updateEolChar(); + }; + + this.onChangeTabSize = function() { + this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER); + this.$textLayer.onChangeTabSize(); + }; + this.updateText = function() { + this.$loop.schedule(this.CHANGE_TEXT); + }; + this.updateFull = function(force) { + if (force) + this.$renderChanges(this.CHANGE_FULL, true); + else + this.$loop.schedule(this.CHANGE_FULL); + }; + this.updateFontSize = function() { + this.$textLayer.checkForSizeChanges(); + }; + + this.$changes = 0; + this.$updateSizeAsync = function() { + if (this.$loop.pending) + this.$size.$dirty = true; + else + this.onResize(); + }; + this.onResize = function(force, gutterWidth, width, height) { + if (this.resizing > 2) + return; + else if (this.resizing > 0) + this.resizing++; + else + this.resizing = force ? 1 : 0; + var el = this.container; + if (!height) + height = el.clientHeight || el.scrollHeight; + if (!width) + width = el.clientWidth || el.scrollWidth; + var changes = this.$updateCachedSize(force, gutterWidth, width, height); + + + if (!this.$size.scrollerHeight || (!width && !height)) + return this.resizing = 0; + + if (force) + this.$gutterLayer.$padding = null; + + if (force) + this.$renderChanges(changes | this.$changes, true); + else + this.$loop.schedule(changes | this.$changes); + + if (this.resizing) + this.resizing = 0; + this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null; + }; + + this.$updateCachedSize = function(force, gutterWidth, width, height) { + height -= (this.$extraHeight || 0); + var changes = 0; + var size = this.$size; + var oldSize = { + width: size.width, + height: size.height, + scrollerHeight: size.scrollerHeight, + scrollerWidth: size.scrollerWidth + }; + if (height && (force || size.height != height)) { + size.height = height; + changes |= this.CHANGE_SIZE; + + size.scrollerHeight = size.height; + if (this.$horizScroll) + size.scrollerHeight -= this.scrollBarH.getHeight(); + this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + "px"; + + changes = changes | this.CHANGE_SCROLL; + } + + if (width && (force || size.width != width)) { + changes |= this.CHANGE_SIZE; + size.width = width; + + if (gutterWidth == null) + gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0; + + this.gutterWidth = gutterWidth; + + this.scrollBarH.element.style.left = + this.scroller.style.left = gutterWidth + "px"; + size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth()); + + this.scrollBarH.element.style.right = + this.scroller.style.right = this.scrollBarV.getWidth() + "px"; + this.scroller.style.bottom = this.scrollBarH.getHeight() + "px"; + + if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) + changes |= this.CHANGE_FULL; + } + + size.$dirty = !width || !height; + + if (changes) + this._signal("resize", oldSize); + + return changes; + }; + + this.onGutterResize = function() { + var gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0; + if (gutterWidth != this.gutterWidth) + this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height); + + if (this.session.getUseWrapMode() && this.adjustWrapLimit()) { + this.$loop.schedule(this.CHANGE_FULL); + } else if (this.$size.$dirty) { + this.$loop.schedule(this.CHANGE_FULL); + } else { + this.$computeLayerConfig(); + this.$loop.schedule(this.CHANGE_MARKER); + } + }; + this.adjustWrapLimit = function() { + var availableWidth = this.$size.scrollerWidth - this.$padding * 2; + var limit = Math.floor(availableWidth / this.characterWidth); + return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn); + }; + this.setAnimatedScroll = function(shouldAnimate){ + this.setOption("animatedScroll", shouldAnimate); + }; + this.getAnimatedScroll = function() { + return this.$animatedScroll; + }; + this.setShowInvisibles = function(showInvisibles) { + this.setOption("showInvisibles", showInvisibles); + }; + this.getShowInvisibles = function() { + return this.getOption("showInvisibles"); + }; + this.getDisplayIndentGuides = function() { + return this.getOption("displayIndentGuides"); + }; + + this.setDisplayIndentGuides = function(display) { + this.setOption("displayIndentGuides", display); + }; + this.setShowPrintMargin = function(showPrintMargin) { + this.setOption("showPrintMargin", showPrintMargin); + }; + this.getShowPrintMargin = function() { + return this.getOption("showPrintMargin"); + }; + this.setPrintMarginColumn = function(showPrintMargin) { + this.setOption("printMarginColumn", showPrintMargin); + }; + this.getPrintMarginColumn = function() { + return this.getOption("printMarginColumn"); + }; + this.getShowGutter = function(){ + return this.getOption("showGutter"); + }; + this.setShowGutter = function(show){ + return this.setOption("showGutter", show); + }; + + this.getFadeFoldWidgets = function(){ + return this.getOption("fadeFoldWidgets") + }; + + this.setFadeFoldWidgets = function(show) { + this.setOption("fadeFoldWidgets", show); + }; + + this.setHighlightGutterLine = function(shouldHighlight) { + this.setOption("highlightGutterLine", shouldHighlight); + }; + + this.getHighlightGutterLine = function() { + return this.getOption("highlightGutterLine"); + }; + + this.$updateGutterLineHighlight = function() { + var pos = this.$cursorLayer.$pixelPos; + var height = this.layerConfig.lineHeight; + if (this.session.getUseWrapMode()) { + var cursor = this.session.selection.getCursor(); + cursor.column = 0; + pos = this.$cursorLayer.getPixelPosition(cursor, true); + height *= this.session.getRowLength(cursor.row); + } + this.$gutterLineHighlight.style.top = pos.top - this.layerConfig.offset + "px"; + this.$gutterLineHighlight.style.height = height + "px"; + }; + + this.$updatePrintMargin = function() { + if (!this.$showPrintMargin && !this.$printMarginEl) + return; + + if (!this.$printMarginEl) { + var containerEl = dom.createElement("div"); + containerEl.className = "ace_layer ace_print-margin-layer"; + this.$printMarginEl = dom.createElement("div"); + this.$printMarginEl.className = "ace_print-margin"; + containerEl.appendChild(this.$printMarginEl); + this.content.insertBefore(containerEl, this.content.firstChild); + } + + var style = this.$printMarginEl.style; + style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + "px"; + style.visibility = this.$showPrintMargin ? "visible" : "hidden"; + + if (this.session && this.session.$wrap == -1) + this.adjustWrapLimit(); + }; + this.getContainerElement = function() { + return this.container; + }; + this.getMouseEventTarget = function() { + return this.scroller; + }; + this.getTextAreaContainer = function() { + return this.container; + }; + this.$moveTextAreaToCursor = function() { + if (!this.$keepTextAreaAtCursor) + return; + var config = this.layerConfig; + var posTop = this.$cursorLayer.$pixelPos.top; + var posLeft = this.$cursorLayer.$pixelPos.left; + posTop -= config.offset; + + var style = this.textarea.style; + var h = this.lineHeight; + if (posTop < 0 || posTop > config.height - h) { + style.top = style.left = "0"; + return; + } + + var w = this.characterWidth; + if (this.$composition) { + var val = this.textarea.value.replace(/^\x01+/, ""); + w *= (this.session.$getStringScreenWidth(val)[0]+2); + h += 2; + } + posLeft -= this.scrollLeft; + if (posLeft > this.$size.scrollerWidth - w) + posLeft = this.$size.scrollerWidth - w; + + posLeft += this.gutterWidth; + style.height = h + "px"; + style.width = w + "px"; + style.left = Math.min(posLeft, this.$size.scrollerWidth - w) + "px"; + style.top = Math.min(posTop, this.$size.height - h) + "px"; + }; + this.getFirstVisibleRow = function() { + return this.layerConfig.firstRow; + }; + this.getFirstFullyVisibleRow = function() { + return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1); + }; + this.getLastFullyVisibleRow = function() { + var config = this.layerConfig; + var lastRow = config.lastRow + var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight; + if (top - this.session.getScrollTop() > config.height - config.lineHeight) + return lastRow - 1; + return lastRow; + }; + this.getLastVisibleRow = function() { + return this.layerConfig.lastRow; + }; + + this.$padding = null; + this.setPadding = function(padding) { + this.$padding = padding; + this.$textLayer.setPadding(padding); + this.$cursorLayer.setPadding(padding); + this.$markerFront.setPadding(padding); + this.$markerBack.setPadding(padding); + this.$loop.schedule(this.CHANGE_FULL); + this.$updatePrintMargin(); + }; + + this.setScrollMargin = function(top, bottom, left, right) { + var sm = this.scrollMargin; + sm.top = top|0; + sm.bottom = bottom|0; + sm.right = right|0; + sm.left = left|0; + sm.v = sm.top + sm.bottom; + sm.h = sm.left + sm.right; + if (sm.top && this.scrollTop <= 0 && this.session) + this.session.setScrollTop(-sm.top); + this.updateFull(); + }; + this.getHScrollBarAlwaysVisible = function() { + return this.$hScrollBarAlwaysVisible; + }; + this.setHScrollBarAlwaysVisible = function(alwaysVisible) { + this.setOption("hScrollBarAlwaysVisible", alwaysVisible); + }; + this.getVScrollBarAlwaysVisible = function() { + return this.$vScrollBarAlwaysVisible; + }; + this.setVScrollBarAlwaysVisible = function(alwaysVisible) { + this.setOption("vScrollBarAlwaysVisible", alwaysVisible); + }; + + this.$updateScrollBarV = function() { + var scrollHeight = this.layerConfig.maxHeight; + var scrollerHeight = this.$size.scrollerHeight; + if (!this.$maxLines && this.$scrollPastEnd) { + scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd; + if (this.scrollTop > scrollHeight - scrollerHeight) { + scrollHeight = this.scrollTop + scrollerHeight; + this.scrollBarV.scrollTop = null; + } + } + this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v); + this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top); + }; + this.$updateScrollBarH = function() { + this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h); + this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left); + }; + + this.$frozen = false; + this.freeze = function() { + this.$frozen = true; + }; + + this.unfreeze = function() { + this.$frozen = false; + }; + + this.$renderChanges = function(changes, force) { + if (this.$changes) { + changes |= this.$changes; + this.$changes = 0; + } + if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) { + this.$changes |= changes; + return; + } + if (this.$size.$dirty) { + this.$changes |= changes; + return this.onResize(true); + } + if (!this.lineHeight) { + this.$textLayer.checkForSizeChanges(); + } + + this._signal("beforeRender"); + var config = this.layerConfig; + if (changes & this.CHANGE_FULL || + changes & this.CHANGE_SIZE || + changes & this.CHANGE_TEXT || + changes & this.CHANGE_LINES || + changes & this.CHANGE_SCROLL || + changes & this.CHANGE_H_SCROLL + ) { + changes |= this.$computeLayerConfig(); + if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) { + var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight; + if (st > 0) { + this.scrollTop = st; + changes = changes | this.CHANGE_SCROLL; + changes |= this.$computeLayerConfig(); + } + } + config = this.layerConfig; + this.$updateScrollBarV(); + if (changes & this.CHANGE_H_SCROLL) + this.$updateScrollBarH(); + this.$gutterLayer.element.style.marginTop = (-config.offset) + "px"; + this.content.style.marginTop = (-config.offset) + "px"; + this.content.style.width = config.width + 2 * this.$padding + "px"; + this.content.style.height = config.minHeight + "px"; + } + if (changes & this.CHANGE_H_SCROLL) { + this.content.style.marginLeft = -this.scrollLeft + "px"; + this.scroller.className = this.scrollLeft <= 0 ? "ace_scroller" : "ace_scroller ace_scroll-left"; + } + if (changes & this.CHANGE_FULL) { + this.$textLayer.update(config); + if (this.$showGutter) + this.$gutterLayer.update(config); + this.$markerBack.update(config); + this.$markerFront.update(config); + this.$cursorLayer.update(config); + this.$moveTextAreaToCursor(); + this.$highlightGutterLine && this.$updateGutterLineHighlight(); + this._signal("afterRender"); + return; + } + if (changes & this.CHANGE_SCROLL) { + if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES) + this.$textLayer.update(config); + else + this.$textLayer.scrollLines(config); + + if (this.$showGutter) + this.$gutterLayer.update(config); + this.$markerBack.update(config); + this.$markerFront.update(config); + this.$cursorLayer.update(config); + this.$highlightGutterLine && this.$updateGutterLineHighlight(); + this.$moveTextAreaToCursor(); + this._signal("afterRender"); + return; + } + + if (changes & this.CHANGE_TEXT) { + this.$textLayer.update(config); + if (this.$showGutter) + this.$gutterLayer.update(config); + } + else if (changes & this.CHANGE_LINES) { + if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter) + this.$gutterLayer.update(config); + } + else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) { + if (this.$showGutter) + this.$gutterLayer.update(config); + } + + if (changes & this.CHANGE_CURSOR) { + this.$cursorLayer.update(config); + this.$moveTextAreaToCursor(); + this.$highlightGutterLine && this.$updateGutterLineHighlight(); + } + + if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) { + this.$markerFront.update(config); + } + + if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) { + this.$markerBack.update(config); + } + + this._signal("afterRender"); + }; + + + this.$autosize = function() { + var height = this.session.getScreenLength() * this.lineHeight; + var maxHeight = this.$maxLines * this.lineHeight; + var desiredHeight = Math.max( + (this.$minLines||1) * this.lineHeight, + Math.min(maxHeight, height) + ) + this.scrollMargin.v + (this.$extraHeight || 0); + if (this.$horizScroll) + desiredHeight += this.scrollBarH.getHeight(); + var vScroll = height > maxHeight; + + if (desiredHeight != this.desiredHeight || + this.$size.height != this.desiredHeight || vScroll != this.$vScroll) { + if (vScroll != this.$vScroll) { + this.$vScroll = vScroll; + this.scrollBarV.setVisible(vScroll); + } + + var w = this.container.clientWidth; + this.container.style.height = desiredHeight + "px"; + this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight); + this.desiredHeight = desiredHeight; + + this._signal("autosize"); + } + }; + + this.$computeLayerConfig = function() { + var session = this.session; + var size = this.$size; + + var hideScrollbars = size.height <= 2 * this.lineHeight; + var screenLines = this.session.getScreenLength(); + var maxHeight = screenLines * this.lineHeight; + + var longestLine = this.$getLongestLine(); + + var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible || + size.scrollerWidth - longestLine - 2 * this.$padding < 0); + + var hScrollChanged = this.$horizScroll !== horizScroll; + if (hScrollChanged) { + this.$horizScroll = horizScroll; + this.scrollBarH.setVisible(horizScroll); + } + var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine + if (this.$maxLines && this.lineHeight > 1) + this.$autosize(); + + var offset = this.scrollTop % this.lineHeight; + var minHeight = size.scrollerHeight + this.lineHeight; + + var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd + ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd + : 0; + maxHeight += scrollPastEnd; + + var sm = this.scrollMargin; + this.session.setScrollTop(Math.max(-sm.top, + Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom))); + + this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, + longestLine + 2 * this.$padding - size.scrollerWidth + sm.right))); + + var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible || + size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top); + var vScrollChanged = vScrollBefore !== vScroll; + if (vScrollChanged) { + this.$vScroll = vScroll; + this.scrollBarV.setVisible(vScroll); + } + + var lineCount = Math.ceil(minHeight / this.lineHeight) - 1; + var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight)); + var lastRow = firstRow + lineCount; + var firstRowScreen, firstRowHeight; + var lineHeight = this.lineHeight; + firstRow = session.screenToDocumentRow(firstRow, 0); + var foldLine = session.getFoldLine(firstRow); + if (foldLine) { + firstRow = foldLine.start.row; + } + + firstRowScreen = session.documentToScreenRow(firstRow, 0); + firstRowHeight = session.getRowLength(firstRow) * lineHeight; + + lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1); + minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight + + firstRowHeight; + + offset = this.scrollTop - firstRowScreen * lineHeight; + + var changes = 0; + if (this.layerConfig.width != longestLine) + changes = this.CHANGE_H_SCROLL; + if (hScrollChanged || vScrollChanged) { + changes = this.$updateCachedSize(true, this.gutterWidth, size.width, size.height); + this._signal("scrollbarVisibilityChanged"); + if (vScrollChanged) + longestLine = this.$getLongestLine(); + } + + this.layerConfig = { + width : longestLine, + padding : this.$padding, + firstRow : firstRow, + firstRowScreen: firstRowScreen, + lastRow : lastRow, + lineHeight : lineHeight, + characterWidth : this.characterWidth, + minHeight : minHeight, + maxHeight : maxHeight, + offset : offset, + gutterOffset : Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)), + height : this.$size.scrollerHeight + }; + + return changes; + }; + + this.$updateLines = function() { + var firstRow = this.$changedLines.firstRow; + var lastRow = this.$changedLines.lastRow; + this.$changedLines = null; + + var layerConfig = this.layerConfig; + + if (firstRow > layerConfig.lastRow + 1) { return; } + if (lastRow < layerConfig.firstRow) { return; } + if (lastRow === Infinity) { + if (this.$showGutter) + this.$gutterLayer.update(layerConfig); + this.$textLayer.update(layerConfig); + return; + } + this.$textLayer.updateLines(layerConfig, firstRow, lastRow); + return true; + }; + + this.$getLongestLine = function() { + var charCount = this.session.getScreenWidth(); + if (this.showInvisibles && !this.session.$useWrapMode) + charCount += 1; + + return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth)); + }; + this.updateFrontMarkers = function() { + this.$markerFront.setMarkers(this.session.getMarkers(true)); + this.$loop.schedule(this.CHANGE_MARKER_FRONT); + }; + this.updateBackMarkers = function() { + this.$markerBack.setMarkers(this.session.getMarkers()); + this.$loop.schedule(this.CHANGE_MARKER_BACK); + }; + this.addGutterDecoration = function(row, className){ + this.$gutterLayer.addGutterDecoration(row, className); + }; + this.removeGutterDecoration = function(row, className){ + this.$gutterLayer.removeGutterDecoration(row, className); + }; + this.updateBreakpoints = function(rows) { + this.$loop.schedule(this.CHANGE_GUTTER); + }; + this.setAnnotations = function(annotations) { + this.$gutterLayer.setAnnotations(annotations); + this.$loop.schedule(this.CHANGE_GUTTER); + }; + this.updateCursor = function() { + this.$loop.schedule(this.CHANGE_CURSOR); + }; + this.hideCursor = function() { + this.$cursorLayer.hideCursor(); + }; + this.showCursor = function() { + this.$cursorLayer.showCursor(); + }; + + this.scrollSelectionIntoView = function(anchor, lead, offset) { + this.scrollCursorIntoView(anchor, offset); + this.scrollCursorIntoView(lead, offset); + }; + this.scrollCursorIntoView = function(cursor, offset, $viewMargin) { + if (this.$size.scrollerHeight === 0) + return; + + var pos = this.$cursorLayer.getPixelPosition(cursor); + + var left = pos.left; + var top = pos.top; + + var topMargin = $viewMargin && $viewMargin.top || 0; + var bottomMargin = $viewMargin && $viewMargin.bottom || 0; + + var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop; + + if (scrollTop + topMargin > top) { + if (offset && scrollTop + topMargin > top + this.lineHeight) + top -= offset * this.$size.scrollerHeight; + if (top === 0) + top = -this.scrollMargin.top; + this.session.setScrollTop(top); + } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) { + if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top - this.lineHeight) + top += offset * this.$size.scrollerHeight; + this.session.setScrollTop(top + this.lineHeight - this.$size.scrollerHeight); + } + + var scrollLeft = this.scrollLeft; + + if (scrollLeft > left) { + if (left < this.$padding + 2 * this.layerConfig.characterWidth) + left = -this.scrollMargin.left; + this.session.setScrollLeft(left); + } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) { + this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth)); + } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) { + this.session.setScrollLeft(0); + } + }; + this.getScrollTop = function() { + return this.session.getScrollTop(); + }; + this.getScrollLeft = function() { + return this.session.getScrollLeft(); + }; + this.getScrollTopRow = function() { + return this.scrollTop / this.lineHeight; + }; + this.getScrollBottomRow = function() { + return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1); + }; + this.scrollToRow = function(row) { + this.session.setScrollTop(row * this.lineHeight); + }; + + this.alignCursor = function(cursor, alignment) { + if (typeof cursor == "number") + cursor = {row: cursor, column: 0}; + + var pos = this.$cursorLayer.getPixelPosition(cursor); + var h = this.$size.scrollerHeight - this.lineHeight; + var offset = pos.top - h * (alignment || 0); + + this.session.setScrollTop(offset); + return offset; + }; + + this.STEPS = 8; + this.$calcSteps = function(fromValue, toValue){ + var i = 0; + var l = this.STEPS; + var steps = []; + + var func = function(t, x_min, dx) { + return dx * (Math.pow(t - 1, 3) + 1) + x_min; + }; + + for (i = 0; i < l; ++i) + steps.push(func(i / this.STEPS, fromValue, toValue - fromValue)); + + return steps; + }; + this.scrollToLine = function(line, center, animate, callback) { + var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0}); + var offset = pos.top; + if (center) + offset -= this.$size.scrollerHeight / 2; + + var initialScroll = this.scrollTop; + this.session.setScrollTop(offset); + if (animate !== false) + this.animateScrolling(initialScroll, callback); + }; + + this.animateScrolling = function(fromValue, callback) { + var toValue = this.scrollTop; + if (!this.$animatedScroll) + return; + var _self = this; + + if (fromValue == toValue) + return; + + if (this.$scrollAnimation) { + var oldSteps = this.$scrollAnimation.steps; + if (oldSteps.length) { + fromValue = oldSteps[0]; + if (fromValue == toValue) + return; + } + } + + var steps = _self.$calcSteps(fromValue, toValue); + this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps}; + + clearInterval(this.$timer); + + _self.session.setScrollTop(steps.shift()); + _self.session.$scrollTop = toValue; + this.$timer = setInterval(function() { + if (steps.length) { + _self.session.setScrollTop(steps.shift()); + _self.session.$scrollTop = toValue; + } else if (toValue != null) { + _self.session.$scrollTop = -1; + _self.session.setScrollTop(toValue); + toValue = null; + } else { + _self.$timer = clearInterval(_self.$timer); + _self.$scrollAnimation = null; + callback && callback(); + } + }, 10); + }; + this.scrollToY = function(scrollTop) { + if (this.scrollTop !== scrollTop) { + this.$loop.schedule(this.CHANGE_SCROLL); + this.scrollTop = scrollTop; + } + }; + this.scrollToX = function(scrollLeft) { + if (this.scrollLeft !== scrollLeft) + this.scrollLeft = scrollLeft; + this.$loop.schedule(this.CHANGE_H_SCROLL); + }; + this.scrollTo = function(x, y) { + this.session.setScrollTop(y); + this.session.setScrollLeft(y); + }; + this.scrollBy = function(deltaX, deltaY) { + deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY); + deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX); + }; + this.isScrollableBy = function(deltaX, deltaY) { + if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top) + return true; + if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight + - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom) + return true; + if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left) + return true; + if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth + - this.layerConfig.width < -1 + this.scrollMargin.right) + return true; + }; + + this.pixelToScreenCoordinates = function(x, y) { + var canvasPos = this.scroller.getBoundingClientRect(); + + var offset = (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth; + var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight); + var col = Math.round(offset); + + return {row: row, column: col, side: offset - col > 0 ? 1 : -1}; + }; + + this.screenToTextCoordinates = function(x, y) { + var canvasPos = this.scroller.getBoundingClientRect(); + + var col = Math.round( + (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth + ); + + var row = (y + this.scrollTop - canvasPos.top) / this.lineHeight; + + return this.session.screenToDocumentPosition(row, Math.max(col, 0)); + }; + this.textToScreenCoordinates = function(row, column) { + var canvasPos = this.scroller.getBoundingClientRect(); + var pos = this.session.documentToScreenPosition(row, column); + + var x = this.$padding + Math.round(pos.column * this.characterWidth); + var y = pos.row * this.lineHeight; + + return { + pageX: canvasPos.left + x - this.scrollLeft, + pageY: canvasPos.top + y - this.scrollTop + }; + }; + this.visualizeFocus = function() { + dom.addCssClass(this.container, "ace_focus"); + }; + this.visualizeBlur = function() { + dom.removeCssClass(this.container, "ace_focus"); + }; + this.showComposition = function(position) { + if (!this.$composition) + this.$composition = { + keepTextAreaAtCursor: this.$keepTextAreaAtCursor, + cssText: this.textarea.style.cssText + }; + + this.$keepTextAreaAtCursor = true; + dom.addCssClass(this.textarea, "ace_composition"); + this.textarea.style.cssText = ""; + this.$moveTextAreaToCursor(); + }; + this.setCompositionText = function(text) { + this.$moveTextAreaToCursor(); + }; + this.hideComposition = function() { + if (!this.$composition) + return; + + dom.removeCssClass(this.textarea, "ace_composition"); + this.$keepTextAreaAtCursor = this.$composition.keepTextAreaAtCursor; + this.textarea.style.cssText = this.$composition.cssText; + this.$composition = null; + }; + this.setTheme = function(theme, cb) { + var _self = this; + this.$themeId = theme; + _self._dispatchEvent('themeChange',{theme:theme}); + + if (!theme || typeof theme == "string") { + var moduleName = theme || this.$options.theme.initialValue; + config.loadModule(["theme", moduleName], afterLoad); + } else { + afterLoad(theme); + } + + function afterLoad(module) { + if (_self.$themeId != theme) + return cb && cb(); + if (!module.cssClass) + return; + dom.importCssString( + module.cssText, + module.cssClass, + _self.container.ownerDocument + ); + + if (_self.theme) + dom.removeCssClass(_self.container, _self.theme.cssClass); + + var padding = "padding" in module ? module.padding + : "padding" in (_self.theme || {}) ? 4 : _self.$padding; + if (_self.$padding && padding != _self.$padding) + _self.setPadding(padding); + _self.$theme = module.cssClass; + + _self.theme = module; + dom.addCssClass(_self.container, module.cssClass); + dom.setCssClass(_self.container, "ace_dark", module.isDark); + if (_self.$size) { + _self.$size.width = 0; + _self.$updateSizeAsync(); + } + + _self._dispatchEvent('themeLoaded', {theme:module}); + cb && cb(); + } + }; + this.getTheme = function() { + return this.$themeId; + }; + this.setStyle = function(style, include) { + dom.setCssClass(this.container, style, include !== false); + }; + this.unsetStyle = function(style) { + dom.removeCssClass(this.container, style); + }; + + this.setCursorStyle = function(style) { + if (this.scroller.style.cursor != style) + this.scroller.style.cursor = style; + }; + this.setMouseCursor = function(cursorStyle) { + this.scroller.style.cursor = cursorStyle; + }; + this.destroy = function() { + this.$textLayer.destroy(); + this.$cursorLayer.destroy(); + }; + +}).call(VirtualRenderer.prototype); + + +config.defineOptions(VirtualRenderer.prototype, "renderer", { + animatedScroll: {initialValue: false}, + showInvisibles: { + set: function(value) { + if (this.$textLayer.setShowInvisibles(value)) + this.$loop.schedule(this.CHANGE_TEXT); + }, + initialValue: false + }, + showPrintMargin: { + set: function() { this.$updatePrintMargin(); }, + initialValue: true + }, + printMarginColumn: { + set: function() { this.$updatePrintMargin(); }, + initialValue: 80 + }, + printMargin: { + set: function(val) { + if (typeof val == "number") + this.$printMarginColumn = val; + this.$showPrintMargin = !!val; + this.$updatePrintMargin(); + }, + get: function() { + return this.$showPrintMargin && this.$printMarginColumn; + } + }, + showGutter: { + set: function(show){ + this.$gutter.style.display = show ? "block" : "none"; + this.$loop.schedule(this.CHANGE_FULL); + this.onGutterResize(); + }, + initialValue: true + }, + fadeFoldWidgets: { + set: function(show) { + dom.setCssClass(this.$gutter, "ace_fade-fold-widgets", show); + }, + initialValue: false + }, + showFoldWidgets: { + set: function(show) {this.$gutterLayer.setShowFoldWidgets(show)}, + initialValue: true + }, + showLineNumbers: { + set: function(show) { + this.$gutterLayer.setShowLineNumbers(show); + this.$loop.schedule(this.CHANGE_GUTTER); + }, + initialValue: true + }, + displayIndentGuides: { + set: function(show) { + if (this.$textLayer.setDisplayIndentGuides(show)) + this.$loop.schedule(this.CHANGE_TEXT); + }, + initialValue: true + }, + highlightGutterLine: { + set: function(shouldHighlight) { + if (!this.$gutterLineHighlight) { + this.$gutterLineHighlight = dom.createElement("div"); + this.$gutterLineHighlight.className = "ace_gutter-active-line"; + this.$gutter.appendChild(this.$gutterLineHighlight); + return; + } + + this.$gutterLineHighlight.style.display = shouldHighlight ? "" : "none"; + if (this.$cursorLayer.$pixelPos) + this.$updateGutterLineHighlight(); + }, + initialValue: false, + value: true + }, + hScrollBarAlwaysVisible: { + set: function(val) { + if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll) + this.$loop.schedule(this.CHANGE_SCROLL); + }, + initialValue: false + }, + vScrollBarAlwaysVisible: { + set: function(val) { + if (!this.$vScrollBarAlwaysVisible || !this.$vScroll) + this.$loop.schedule(this.CHANGE_SCROLL); + }, + initialValue: false + }, + fontSize: { + set: function(size) { + if (typeof size == "number") + size = size + "px"; + this.container.style.fontSize = size; + this.updateFontSize(); + }, + initialValue: 12 + }, + fontFamily: { + set: function(name) { + this.container.style.fontFamily = name; + this.updateFontSize(); + } + }, + maxLines: { + set: function(val) { + this.updateFull(); + } + }, + minLines: { + set: function(val) { + this.updateFull(); + } + }, + scrollPastEnd: { + set: function(val) { + val = +val || 0; + if (this.$scrollPastEnd == val) + return; + this.$scrollPastEnd = val; + this.$loop.schedule(this.CHANGE_SCROLL); + }, + initialValue: 0, + handlesSet: true + }, + fixedWidthGutter: { + set: function(val) { + this.$gutterLayer.$fixedWidth = !!val; + this.$loop.schedule(this.CHANGE_GUTTER); + } + }, + theme: { + set: function(val) { this.setTheme(val) }, + get: function() { return this.$themeId || this.theme; }, + initialValue: "./theme/textmate", + handlesSet: true + } +}); + +exports.VirtualRenderer = VirtualRenderer; +}); + +ace.define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/net","ace/lib/event_emitter","ace/config"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("../lib/oop"); +var net = acequire("../lib/net"); +var EventEmitter = acequire("../lib/event_emitter").EventEmitter; +var config = acequire("../config"); + +var WorkerClient = function(topLevelNamespaces, mod, classname, workerUrl) { + this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this); + this.changeListener = this.changeListener.bind(this); + this.onMessage = this.onMessage.bind(this); + if (acequire.nameToUrl && !acequire.toUrl) + acequire.toUrl = acequire.nameToUrl; + + if (config.get("packaged") || !acequire.toUrl) { + workerUrl = workerUrl || config.moduleUrl(mod.id, "worker") + } else { + var normalizePath = this.$normalizePath; + workerUrl = workerUrl || normalizePath(acequire.toUrl("ace/worker/worker.js", null, "_")); + + var tlns = {}; + topLevelNamespaces.forEach(function(ns) { + tlns[ns] = normalizePath(acequire.toUrl(ns, null, "_").replace(/(\.js)?(\?.*)?$/, "")); + }); + } + + try { + var workerSrc = mod.src; + var Blob = require('w3c-blob'); + var blob = new Blob([ workerSrc ], { type: 'application/javascript' }); + var blobUrl = (window.URL || window.webkitURL).createObjectURL(blob); + + this.$worker = new Worker(blobUrl); + + } catch(e) { + if (e instanceof window.DOMException) { + var blob = this.$workerBlob(workerUrl); + var URL = window.URL || window.webkitURL; + var blobURL = URL.createObjectURL(blob); + + this.$worker = new Worker(blobURL); + URL.revokeObjectURL(blobURL); + } else { + throw e; + } + } + this.$worker.postMessage({ + init : true, + tlns : tlns, + module : mod.id, + classname : classname + }); + + this.callbackId = 1; + this.callbacks = {}; + + this.$worker.onmessage = this.onMessage; +}; + +(function(){ + + oop.implement(this, EventEmitter); + + this.onMessage = function(e) { + var msg = e.data; + switch(msg.type) { + case "event": + this._signal(msg.name, {data: msg.data}); + break; + case "call": + var callback = this.callbacks[msg.id]; + if (callback) { + callback(msg.data); + delete this.callbacks[msg.id]; + } + break; + case "error": + this.reportError(msg.data); + break; + case "log": + window.console && console.log && console.log.apply(console, msg.data); + break; + } + }; + + this.reportError = function(err) { + window.console && console.error && console.error(err); + }; + + this.$normalizePath = function(path) { + return net.qualifyURL(path); + }; + + this.terminate = function() { + this._signal("terminate", {}); + this.deltaQueue = null; + this.$worker.terminate(); + this.$worker = null; + if (this.$doc) + this.$doc.off("change", this.changeListener); + this.$doc = null; + }; + + this.send = function(cmd, args) { + this.$worker.postMessage({command: cmd, args: args}); + }; + + this.call = function(cmd, args, callback) { + if (callback) { + var id = this.callbackId++; + this.callbacks[id] = callback; + args.push(id); + } + this.send(cmd, args); + }; + + this.emit = function(event, data) { + try { + this.$worker.postMessage({event: event, data: {data: data.data}}); + } + catch(ex) { + console.error(ex.stack); + } + }; + + this.attachToDocument = function(doc) { + if(this.$doc) + this.terminate(); + + this.$doc = doc; + this.call("setValue", [doc.getValue()]); + doc.on("change", this.changeListener); + }; + + this.changeListener = function(delta) { + if (!this.deltaQueue) { + this.deltaQueue = []; + setTimeout(this.$sendDeltaQueue, 0); + } + if (delta.action == "insert") + this.deltaQueue.push(delta.start, delta.lines); + else + this.deltaQueue.push(delta.start, delta.end); + }; + + this.$sendDeltaQueue = function() { + var q = this.deltaQueue; + if (!q) return; + this.deltaQueue = null; + if (q.length > 50 && q.length > this.$doc.getLength() >> 1) { + this.call("setValue", [this.$doc.getValue()]); + } else + this.emit("change", {data: q}); + }; + + this.$workerBlob = function(workerUrl) { + var script = "importScripts('" + net.qualifyURL(workerUrl) + "');"; + try { + return new Blob([script], {"type": "application/javascript"}); + } catch (e) { // Backwards-compatibility + var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder; + var blobBuilder = new BlobBuilder(); + blobBuilder.append(script); + return blobBuilder.getBlob("application/javascript"); + } + }; + +}).call(WorkerClient.prototype); + + +var UIWorkerClient = function(topLevelNamespaces, mod, classname) { + this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this); + this.changeListener = this.changeListener.bind(this); + this.callbackId = 1; + this.callbacks = {}; + this.messageBuffer = []; + + var main = null; + var emitSync = false; + var sender = Object.create(EventEmitter); + var _self = this; + + this.$worker = {}; + this.$worker.terminate = function() {}; + this.$worker.postMessage = function(e) { + _self.messageBuffer.push(e); + if (main) { + if (emitSync) + setTimeout(processNext); + else + processNext(); + } + }; + this.setEmitSync = function(val) { emitSync = val }; + + var processNext = function() { + var msg = _self.messageBuffer.shift(); + if (msg.command) + main[msg.command].apply(main, msg.args); + else if (msg.event) + sender._signal(msg.event, msg.data); + }; + + sender.postMessage = function(msg) { + _self.onMessage({data: msg}); + }; + sender.callback = function(data, callbackId) { + this.postMessage({type: "call", id: callbackId, data: data}); + }; + sender.emit = function(name, data) { + this.postMessage({type: "event", name: name, data: data}); + }; + + config.loadModule(["worker", mod], function(Main) { + main = new Main[classname](sender); + while (_self.messageBuffer.length) + processNext(); + }); +}; + +UIWorkerClient.prototype = WorkerClient.prototype; + +exports.UIWorkerClient = UIWorkerClient; +exports.WorkerClient = WorkerClient; + +}); + +ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"], function(acequire, exports, module) { +"use strict"; + +var Range = acequire("./range").Range; +var EventEmitter = acequire("./lib/event_emitter").EventEmitter; +var oop = acequire("./lib/oop"); + +var PlaceHolder = function(session, length, pos, others, mainClass, othersClass) { + var _self = this; + this.length = length; + this.session = session; + this.doc = session.getDocument(); + this.mainClass = mainClass; + this.othersClass = othersClass; + this.$onUpdate = this.onUpdate.bind(this); + this.doc.on("change", this.$onUpdate); + this.$others = others; + + this.$onCursorChange = function() { + setTimeout(function() { + _self.onCursorChange(); + }); + }; + + this.$pos = pos; + var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1}; + this.$undoStackDepth = undoStack.length; + this.setup(); + + session.selection.on("changeCursor", this.$onCursorChange); +}; + +(function() { + + oop.implement(this, EventEmitter); + this.setup = function() { + var _self = this; + var doc = this.doc; + var session = this.session; + + this.selectionBefore = session.selection.toJSON(); + if (session.selection.inMultiSelectMode) + session.selection.toSingleRange(); + + this.pos = doc.createAnchor(this.$pos.row, this.$pos.column); + var pos = this.pos; + pos.$insertRight = true; + pos.detach(); + pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false); + this.others = []; + this.$others.forEach(function(other) { + var anchor = doc.createAnchor(other.row, other.column); + anchor.$insertRight = true; + anchor.detach(); + _self.others.push(anchor); + }); + session.setUndoSelect(false); + }; + this.showOtherMarkers = function() { + if (this.othersActive) return; + var session = this.session; + var _self = this; + this.othersActive = true; + this.others.forEach(function(anchor) { + anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false); + }); + }; + this.hideOtherMarkers = function() { + if (!this.othersActive) return; + this.othersActive = false; + for (var i = 0; i < this.others.length; i++) { + this.session.removeMarker(this.others[i].markerId); + } + }; + this.onUpdate = function(delta) { + if (this.$updating) + return this.updateAnchors(delta); + + var range = delta; + if (range.start.row !== range.end.row) return; + if (range.start.row !== this.pos.row) return; + this.$updating = true; + var lengthDiff = delta.action === "insert" ? range.end.column - range.start.column : range.start.column - range.end.column; + var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1; + var distanceFromStart = range.start.column - this.pos.column; + + this.updateAnchors(delta); + + if (inMainRange) + this.length += lengthDiff; + + if (inMainRange && !this.session.$fromUndo) { + if (delta.action === 'insert') { + for (var i = this.others.length - 1; i >= 0; i--) { + var otherPos = this.others[i]; + var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart}; + this.doc.insertMergedLines(newPos, delta.lines); + } + } else if (delta.action === 'remove') { + for (var i = this.others.length - 1; i >= 0; i--) { + var otherPos = this.others[i]; + var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart}; + this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff)); + } + } + } + + this.$updating = false; + this.updateMarkers(); + }; + + this.updateAnchors = function(delta) { + this.pos.onChange(delta); + for (var i = this.others.length; i--;) + this.others[i].onChange(delta); + this.updateMarkers(); + }; + + this.updateMarkers = function() { + if (this.$updating) + return; + var _self = this; + var session = this.session; + var updateMarker = function(pos, className) { + session.removeMarker(pos.markerId); + pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column+_self.length), className, null, false); + }; + updateMarker(this.pos, this.mainClass); + for (var i = this.others.length; i--;) + updateMarker(this.others[i], this.othersClass); + }; + + this.onCursorChange = function(event) { + if (this.$updating || !this.session) return; + var pos = this.session.selection.getCursor(); + if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) { + this.showOtherMarkers(); + this._emit("cursorEnter", event); + } else { + this.hideOtherMarkers(); + this._emit("cursorLeave", event); + } + }; + this.detach = function() { + this.session.removeMarker(this.pos && this.pos.markerId); + this.hideOtherMarkers(); + this.doc.removeEventListener("change", this.$onUpdate); + this.session.selection.removeEventListener("changeCursor", this.$onCursorChange); + this.session.setUndoSelect(true); + this.session = null; + }; + this.cancel = function() { + if (this.$undoStackDepth === -1) + return; + var undoManager = this.session.getUndoManager(); + var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth; + for (var i = 0; i < undosRequired; i++) { + undoManager.undo(true); + } + if (this.selectionBefore) + this.session.selection.fromJSON(this.selectionBefore); + }; +}).call(PlaceHolder.prototype); + + +exports.PlaceHolder = PlaceHolder; +}); + +ace.define("ace/mouse/multi_select_handler",["require","exports","module","ace/lib/event","ace/lib/useragent"], function(acequire, exports, module) { + +var event = acequire("../lib/event"); +var useragent = acequire("../lib/useragent"); +function isSamePoint(p1, p2) { + return p1.row == p2.row && p1.column == p2.column; +} + +function onMouseDown(e) { + var ev = e.domEvent; + var alt = ev.altKey; + var shift = ev.shiftKey; + var ctrl = ev.ctrlKey; + var accel = e.getAccelKey(); + var button = e.getButton(); + + if (ctrl && useragent.isMac) + button = ev.button; + + if (e.editor.inMultiSelectMode && button == 2) { + e.editor.textInput.onContextMenu(e.domEvent); + return; + } + + if (!ctrl && !alt && !accel) { + if (button === 0 && e.editor.inMultiSelectMode) + e.editor.exitMultiSelectMode(); + return; + } + + if (button !== 0) + return; + + var editor = e.editor; + var selection = editor.selection; + var isMultiSelect = editor.inMultiSelectMode; + var pos = e.getDocumentPosition(); + var cursor = selection.getCursor(); + var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor)); + + var mouseX = e.x, mouseY = e.y; + var onMouseSelection = function(e) { + mouseX = e.clientX; + mouseY = e.clientY; + }; + + var session = editor.session; + var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); + var screenCursor = screenAnchor; + + var selectionMode; + if (editor.$mouseHandler.$enableJumpToDef) { + if (ctrl && alt || accel && alt) + selectionMode = shift ? "block" : "add"; + else if (alt && editor.$blockSelectEnabled) + selectionMode = "block"; + } else { + if (accel && !alt) { + selectionMode = "add"; + if (!isMultiSelect && shift) + return; + } else if (alt && editor.$blockSelectEnabled) { + selectionMode = "block"; + } + } + + if (selectionMode && useragent.isMac && ev.ctrlKey) { + editor.$mouseHandler.cancelContextMenu(); + } + + if (selectionMode == "add") { + if (!isMultiSelect && inSelection) + return; // dragging + + if (!isMultiSelect) { + var range = selection.toOrientedRange(); + editor.addSelectionMarker(range); + } + + var oldRange = selection.rangeList.rangeAtPoint(pos); + + + editor.$blockScrolling++; + editor.inVirtualSelectionMode = true; + + if (shift) { + oldRange = null; + range = selection.ranges[0] || range; + editor.removeSelectionMarker(range); + } + editor.once("mouseup", function() { + var tmpSel = selection.toOrientedRange(); + + if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor)) + selection.substractPoint(tmpSel.cursor); + else { + if (shift) { + selection.substractPoint(range.cursor); + } else if (range) { + editor.removeSelectionMarker(range); + selection.addRange(range); + } + selection.addRange(tmpSel); + } + editor.$blockScrolling--; + editor.inVirtualSelectionMode = false; + }); + + } else if (selectionMode == "block") { + e.stop(); + editor.inVirtualSelectionMode = true; + var initialRange; + var rectSel = []; + var blockSelect = function() { + var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); + var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column); + + if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead)) + return; + screenCursor = newCursor; + + editor.$blockScrolling++; + editor.selection.moveToPosition(cursor); + editor.renderer.scrollCursorIntoView(); + + editor.removeSelectionMarkers(rectSel); + rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor); + if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty()) + rectSel[0] = editor.$mouseHandler.$clickSelection.clone(); + rectSel.forEach(editor.addSelectionMarker, editor); + editor.updateSelectionMarkers(); + editor.$blockScrolling--; + }; + editor.$blockScrolling++; + if (isMultiSelect && !accel) { + selection.toSingleRange(); + } else if (!isMultiSelect && accel) { + initialRange = selection.toOrientedRange(); + editor.addSelectionMarker(initialRange); + } + + if (shift) + screenAnchor = session.documentToScreenPosition(selection.lead); + else + selection.moveToPosition(pos); + editor.$blockScrolling--; + + screenCursor = {row: -1, column: -1}; + + var onMouseSelectionEnd = function(e) { + clearInterval(timerId); + editor.removeSelectionMarkers(rectSel); + if (!rectSel.length) + rectSel = [selection.toOrientedRange()]; + editor.$blockScrolling++; + if (initialRange) { + editor.removeSelectionMarker(initialRange); + selection.toSingleRange(initialRange); + } + for (var i = 0; i < rectSel.length; i++) + selection.addRange(rectSel[i]); + editor.inVirtualSelectionMode = false; + editor.$mouseHandler.$clickSelection = null; + editor.$blockScrolling--; + }; + + var onSelectionInterval = blockSelect; + + event.capture(editor.container, onMouseSelection, onMouseSelectionEnd); + var timerId = setInterval(function() {onSelectionInterval();}, 20); + + return e.preventDefault(); + } +} + + +exports.onMouseDown = onMouseDown; + +}); + +ace.define("ace/commands/multi_select_commands",["require","exports","module","ace/keyboard/hash_handler"], function(acequire, exports, module) { +exports.defaultCommands = [{ + name: "addCursorAbove", + exec: function(editor) { editor.selectMoreLines(-1); }, + bindKey: {win: "Ctrl-Alt-Up", mac: "Ctrl-Alt-Up"}, + scrollIntoView: "cursor", + readOnly: true +}, { + name: "addCursorBelow", + exec: function(editor) { editor.selectMoreLines(1); }, + bindKey: {win: "Ctrl-Alt-Down", mac: "Ctrl-Alt-Down"}, + scrollIntoView: "cursor", + readOnly: true +}, { + name: "addCursorAboveSkipCurrent", + exec: function(editor) { editor.selectMoreLines(-1, true); }, + bindKey: {win: "Ctrl-Alt-Shift-Up", mac: "Ctrl-Alt-Shift-Up"}, + scrollIntoView: "cursor", + readOnly: true +}, { + name: "addCursorBelowSkipCurrent", + exec: function(editor) { editor.selectMoreLines(1, true); }, + bindKey: {win: "Ctrl-Alt-Shift-Down", mac: "Ctrl-Alt-Shift-Down"}, + scrollIntoView: "cursor", + readOnly: true +}, { + name: "selectMoreBefore", + exec: function(editor) { editor.selectMore(-1); }, + bindKey: {win: "Ctrl-Alt-Left", mac: "Ctrl-Alt-Left"}, + scrollIntoView: "cursor", + readOnly: true +}, { + name: "selectMoreAfter", + exec: function(editor) { editor.selectMore(1); }, + bindKey: {win: "Ctrl-Alt-Right", mac: "Ctrl-Alt-Right"}, + scrollIntoView: "cursor", + readOnly: true +}, { + name: "selectNextBefore", + exec: function(editor) { editor.selectMore(-1, true); }, + bindKey: {win: "Ctrl-Alt-Shift-Left", mac: "Ctrl-Alt-Shift-Left"}, + scrollIntoView: "cursor", + readOnly: true +}, { + name: "selectNextAfter", + exec: function(editor) { editor.selectMore(1, true); }, + bindKey: {win: "Ctrl-Alt-Shift-Right", mac: "Ctrl-Alt-Shift-Right"}, + scrollIntoView: "cursor", + readOnly: true +}, { + name: "splitIntoLines", + exec: function(editor) { editor.multiSelect.splitIntoLines(); }, + bindKey: {win: "Ctrl-Alt-L", mac: "Ctrl-Alt-L"}, + readOnly: true +}, { + name: "alignCursors", + exec: function(editor) { editor.alignCursors(); }, + bindKey: {win: "Ctrl-Alt-A", mac: "Ctrl-Alt-A"}, + scrollIntoView: "cursor" +}, { + name: "findAll", + exec: function(editor) { editor.findAll(); }, + bindKey: {win: "Ctrl-Alt-K", mac: "Ctrl-Alt-G"}, + scrollIntoView: "cursor", + readOnly: true +}]; +exports.multiSelectCommands = [{ + name: "singleSelection", + bindKey: "esc", + exec: function(editor) { editor.exitMultiSelectMode(); }, + scrollIntoView: "cursor", + readOnly: true, + isAvailable: function(editor) {return editor && editor.inMultiSelectMode} +}]; + +var HashHandler = acequire("../keyboard/hash_handler").HashHandler; +exports.keyboardHandler = new HashHandler(exports.multiSelectCommands); + +}); + +ace.define("ace/multi_select",["require","exports","module","ace/range_list","ace/range","ace/selection","ace/mouse/multi_select_handler","ace/lib/event","ace/lib/lang","ace/commands/multi_select_commands","ace/search","ace/edit_session","ace/editor","ace/config"], function(acequire, exports, module) { + +var RangeList = acequire("./range_list").RangeList; +var Range = acequire("./range").Range; +var Selection = acequire("./selection").Selection; +var onMouseDown = acequire("./mouse/multi_select_handler").onMouseDown; +var event = acequire("./lib/event"); +var lang = acequire("./lib/lang"); +var commands = acequire("./commands/multi_select_commands"); +exports.commands = commands.defaultCommands.concat(commands.multiSelectCommands); +var Search = acequire("./search").Search; +var search = new Search(); + +function find(session, needle, dir) { + search.$options.wrap = true; + search.$options.needle = needle; + search.$options.backwards = dir == -1; + return search.find(session); +} +var EditSession = acequire("./edit_session").EditSession; +(function() { + this.getSelectionMarkers = function() { + return this.$selectionMarkers; + }; +}).call(EditSession.prototype); +(function() { + this.ranges = null; + this.rangeList = null; + this.addRange = function(range, $blockChangeEvents) { + if (!range) + return; + + if (!this.inMultiSelectMode && this.rangeCount === 0) { + var oldRange = this.toOrientedRange(); + this.rangeList.add(oldRange); + this.rangeList.add(range); + if (this.rangeList.ranges.length != 2) { + this.rangeList.removeAll(); + return $blockChangeEvents || this.fromOrientedRange(range); + } + this.rangeList.removeAll(); + this.rangeList.add(oldRange); + this.$onAddRange(oldRange); + } + + if (!range.cursor) + range.cursor = range.end; + + var removed = this.rangeList.add(range); + + this.$onAddRange(range); + + if (removed.length) + this.$onRemoveRange(removed); + + if (this.rangeCount > 1 && !this.inMultiSelectMode) { + this._signal("multiSelect"); + this.inMultiSelectMode = true; + this.session.$undoSelect = false; + this.rangeList.attach(this.session); + } + + return $blockChangeEvents || this.fromOrientedRange(range); + }; + + this.toSingleRange = function(range) { + range = range || this.ranges[0]; + var removed = this.rangeList.removeAll(); + if (removed.length) + this.$onRemoveRange(removed); + + range && this.fromOrientedRange(range); + }; + this.substractPoint = function(pos) { + var removed = this.rangeList.substractPoint(pos); + if (removed) { + this.$onRemoveRange(removed); + return removed[0]; + } + }; + this.mergeOverlappingRanges = function() { + var removed = this.rangeList.merge(); + if (removed.length) + this.$onRemoveRange(removed); + else if(this.ranges[0]) + this.fromOrientedRange(this.ranges[0]); + }; + + this.$onAddRange = function(range) { + this.rangeCount = this.rangeList.ranges.length; + this.ranges.unshift(range); + this._signal("addRange", {range: range}); + }; + + this.$onRemoveRange = function(removed) { + this.rangeCount = this.rangeList.ranges.length; + if (this.rangeCount == 1 && this.inMultiSelectMode) { + var lastRange = this.rangeList.ranges.pop(); + removed.push(lastRange); + this.rangeCount = 0; + } + + for (var i = removed.length; i--; ) { + var index = this.ranges.indexOf(removed[i]); + this.ranges.splice(index, 1); + } + + this._signal("removeRange", {ranges: removed}); + + if (this.rangeCount === 0 && this.inMultiSelectMode) { + this.inMultiSelectMode = false; + this._signal("singleSelect"); + this.session.$undoSelect = true; + this.rangeList.detach(this.session); + } + + lastRange = lastRange || this.ranges[0]; + if (lastRange && !lastRange.isEqual(this.getRange())) + this.fromOrientedRange(lastRange); + }; + this.$initRangeList = function() { + if (this.rangeList) + return; + + this.rangeList = new RangeList(); + this.ranges = []; + this.rangeCount = 0; + }; + this.getAllRanges = function() { + return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()]; + }; + + this.splitIntoLines = function () { + if (this.rangeCount > 1) { + var ranges = this.rangeList.ranges; + var lastRange = ranges[ranges.length - 1]; + var range = Range.fromPoints(ranges[0].start, lastRange.end); + + this.toSingleRange(); + this.setSelectionRange(range, lastRange.cursor == lastRange.start); + } else { + var range = this.getRange(); + var isBackwards = this.isBackwards(); + var startRow = range.start.row; + var endRow = range.end.row; + if (startRow == endRow) { + if (isBackwards) + var start = range.end, end = range.start; + else + var start = range.start, end = range.end; + + this.addRange(Range.fromPoints(end, end)); + this.addRange(Range.fromPoints(start, start)); + return; + } + + var rectSel = []; + var r = this.getLineRange(startRow, true); + r.start.column = range.start.column; + rectSel.push(r); + + for (var i = startRow + 1; i < endRow; i++) + rectSel.push(this.getLineRange(i, true)); + + r = this.getLineRange(endRow, true); + r.end.column = range.end.column; + rectSel.push(r); + + rectSel.forEach(this.addRange, this); + } + }; + this.toggleBlockSelection = function () { + if (this.rangeCount > 1) { + var ranges = this.rangeList.ranges; + var lastRange = ranges[ranges.length - 1]; + var range = Range.fromPoints(ranges[0].start, lastRange.end); + + this.toSingleRange(); + this.setSelectionRange(range, lastRange.cursor == lastRange.start); + } else { + var cursor = this.session.documentToScreenPosition(this.selectionLead); + var anchor = this.session.documentToScreenPosition(this.selectionAnchor); + + var rectSel = this.rectangularRangeBlock(cursor, anchor); + rectSel.forEach(this.addRange, this); + } + }; + this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) { + var rectSel = []; + + var xBackwards = screenCursor.column < screenAnchor.column; + if (xBackwards) { + var startColumn = screenCursor.column; + var endColumn = screenAnchor.column; + } else { + var startColumn = screenAnchor.column; + var endColumn = screenCursor.column; + } + + var yBackwards = screenCursor.row < screenAnchor.row; + if (yBackwards) { + var startRow = screenCursor.row; + var endRow = screenAnchor.row; + } else { + var startRow = screenAnchor.row; + var endRow = screenCursor.row; + } + + if (startColumn < 0) + startColumn = 0; + if (startRow < 0) + startRow = 0; + + if (startRow == endRow) + includeEmptyLines = true; + + for (var row = startRow; row <= endRow; row++) { + var range = Range.fromPoints( + this.session.screenToDocumentPosition(row, startColumn), + this.session.screenToDocumentPosition(row, endColumn) + ); + if (range.isEmpty()) { + if (docEnd && isSamePoint(range.end, docEnd)) + break; + var docEnd = range.end; + } + range.cursor = xBackwards ? range.start : range.end; + rectSel.push(range); + } + + if (yBackwards) + rectSel.reverse(); + + if (!includeEmptyLines) { + var end = rectSel.length - 1; + while (rectSel[end].isEmpty() && end > 0) + end--; + if (end > 0) { + var start = 0; + while (rectSel[start].isEmpty()) + start++; + } + for (var i = end; i >= start; i--) { + if (rectSel[i].isEmpty()) + rectSel.splice(i, 1); + } + } + + return rectSel; + }; +}).call(Selection.prototype); +var Editor = acequire("./editor").Editor; +(function() { + this.updateSelectionMarkers = function() { + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); + }; + this.addSelectionMarker = function(orientedRange) { + if (!orientedRange.cursor) + orientedRange.cursor = orientedRange.end; + + var style = this.getSelectionStyle(); + orientedRange.marker = this.session.addMarker(orientedRange, "ace_selection", style); + + this.session.$selectionMarkers.push(orientedRange); + this.session.selectionMarkerCount = this.session.$selectionMarkers.length; + return orientedRange; + }; + this.removeSelectionMarker = function(range) { + if (!range.marker) + return; + this.session.removeMarker(range.marker); + var index = this.session.$selectionMarkers.indexOf(range); + if (index != -1) + this.session.$selectionMarkers.splice(index, 1); + this.session.selectionMarkerCount = this.session.$selectionMarkers.length; + }; + + this.removeSelectionMarkers = function(ranges) { + var markerList = this.session.$selectionMarkers; + for (var i = ranges.length; i--; ) { + var range = ranges[i]; + if (!range.marker) + continue; + this.session.removeMarker(range.marker); + var index = markerList.indexOf(range); + if (index != -1) + markerList.splice(index, 1); + } + this.session.selectionMarkerCount = markerList.length; + }; + + this.$onAddRange = function(e) { + this.addSelectionMarker(e.range); + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); + }; + + this.$onRemoveRange = function(e) { + this.removeSelectionMarkers(e.ranges); + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); + }; + + this.$onMultiSelect = function(e) { + if (this.inMultiSelectMode) + return; + this.inMultiSelectMode = true; + + this.setStyle("ace_multiselect"); + this.keyBinding.addKeyboardHandler(commands.keyboardHandler); + this.commands.setDefaultHandler("exec", this.$onMultiSelectExec); + + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); + }; + + this.$onSingleSelect = function(e) { + if (this.session.multiSelect.inVirtualMode) + return; + this.inMultiSelectMode = false; + + this.unsetStyle("ace_multiselect"); + this.keyBinding.removeKeyboardHandler(commands.keyboardHandler); + + this.commands.removeDefaultHandler("exec", this.$onMultiSelectExec); + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); + this._emit("changeSelection"); + }; + + this.$onMultiSelectExec = function(e) { + var command = e.command; + var editor = e.editor; + if (!editor.multiSelect) + return; + if (!command.multiSelectAction) { + var result = command.exec(editor, e.args || {}); + editor.multiSelect.addRange(editor.multiSelect.toOrientedRange()); + editor.multiSelect.mergeOverlappingRanges(); + } else if (command.multiSelectAction == "forEach") { + result = editor.forEachSelection(command, e.args); + } else if (command.multiSelectAction == "forEachLine") { + result = editor.forEachSelection(command, e.args, true); + } else if (command.multiSelectAction == "single") { + editor.exitMultiSelectMode(); + result = command.exec(editor, e.args || {}); + } else { + result = command.multiSelectAction(editor, e.args || {}); + } + return result; + }; + this.forEachSelection = function(cmd, args, options) { + if (this.inVirtualSelectionMode) + return; + var keepOrder = options && options.keepOrder; + var $byLines = options == true || options && options.$byLines + var session = this.session; + var selection = this.selection; + var rangeList = selection.rangeList; + var ranges = (keepOrder ? selection : rangeList).ranges; + var result; + + if (!ranges.length) + return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {}); + + var reg = selection._eventRegistry; + selection._eventRegistry = {}; + + var tmpSel = new Selection(session); + this.inVirtualSelectionMode = true; + for (var i = ranges.length; i--;) { + if ($byLines) { + while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row) + i--; + } + tmpSel.fromOrientedRange(ranges[i]); + tmpSel.index = i; + this.selection = session.selection = tmpSel; + var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {}); + if (!result && cmdResult !== undefined) + result = cmdResult; + tmpSel.toOrientedRange(ranges[i]); + } + tmpSel.detach(); + + this.selection = session.selection = selection; + this.inVirtualSelectionMode = false; + selection._eventRegistry = reg; + selection.mergeOverlappingRanges(); + + var anim = this.renderer.$scrollAnimation; + this.onCursorChange(); + this.onSelectionChange(); + if (anim && anim.from == anim.to) + this.renderer.animateScrolling(anim.from); + + return result; + }; + this.exitMultiSelectMode = function() { + if (!this.inMultiSelectMode || this.inVirtualSelectionMode) + return; + this.multiSelect.toSingleRange(); + }; + + this.getSelectedText = function() { + var text = ""; + if (this.inMultiSelectMode && !this.inVirtualSelectionMode) { + var ranges = this.multiSelect.rangeList.ranges; + var buf = []; + for (var i = 0; i < ranges.length; i++) { + buf.push(this.session.getTextRange(ranges[i])); + } + var nl = this.session.getDocument().getNewLineCharacter(); + text = buf.join(nl); + if (text.length == (buf.length - 1) * nl.length) + text = ""; + } else if (!this.selection.isEmpty()) { + text = this.session.getTextRange(this.getSelectionRange()); + } + return text; + }; + + this.$checkMultiselectChange = function(e, anchor) { + if (this.inMultiSelectMode && !this.inVirtualSelectionMode) { + var range = this.multiSelect.ranges[0]; + if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor) + return; + var pos = anchor == this.multiSelect.anchor + ? range.cursor == range.start ? range.end : range.start + : range.cursor; + if (pos.row != anchor.row + || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column) + this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange()); + } + }; + this.findAll = function(needle, options, additive) { + options = options || {}; + options.needle = needle || options.needle; + if (options.needle == undefined) { + var range = this.selection.isEmpty() + ? this.selection.getWordRange() + : this.selection.getRange(); + options.needle = this.session.getTextRange(range); + } + this.$search.set(options); + + var ranges = this.$search.findAll(this.session); + if (!ranges.length) + return 0; + + this.$blockScrolling += 1; + var selection = this.multiSelect; + + if (!additive) + selection.toSingleRange(ranges[0]); + + for (var i = ranges.length; i--; ) + selection.addRange(ranges[i], true); + if (range && selection.rangeList.rangeAtPoint(range.start)) + selection.addRange(range, true); + + this.$blockScrolling -= 1; + + return ranges.length; + }; + this.selectMoreLines = function(dir, skip) { + var range = this.selection.toOrientedRange(); + var isBackwards = range.cursor == range.end; + + var screenLead = this.session.documentToScreenPosition(range.cursor); + if (this.selection.$desiredColumn) + screenLead.column = this.selection.$desiredColumn; + + var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column); + + if (!range.isEmpty()) { + var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start); + var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column); + } else { + var anchor = lead; + } + + if (isBackwards) { + var newRange = Range.fromPoints(lead, anchor); + newRange.cursor = newRange.start; + } else { + var newRange = Range.fromPoints(anchor, lead); + newRange.cursor = newRange.end; + } + + newRange.desiredColumn = screenLead.column; + if (!this.selection.inMultiSelectMode) { + this.selection.addRange(range); + } else { + if (skip) + var toRemove = range.cursor; + } + + this.selection.addRange(newRange); + if (toRemove) + this.selection.substractPoint(toRemove); + }; + this.transposeSelections = function(dir) { + var session = this.session; + var sel = session.multiSelect; + var all = sel.ranges; + + for (var i = all.length; i--; ) { + var range = all[i]; + if (range.isEmpty()) { + var tmp = session.getWordRange(range.start.row, range.start.column); + range.start.row = tmp.start.row; + range.start.column = tmp.start.column; + range.end.row = tmp.end.row; + range.end.column = tmp.end.column; + } + } + sel.mergeOverlappingRanges(); + + var words = []; + for (var i = all.length; i--; ) { + var range = all[i]; + words.unshift(session.getTextRange(range)); + } + + if (dir < 0) + words.unshift(words.pop()); + else + words.push(words.shift()); + + for (var i = all.length; i--; ) { + var range = all[i]; + var tmp = range.clone(); + session.replace(range, words[i]); + range.start.row = tmp.start.row; + range.start.column = tmp.start.column; + } + }; + this.selectMore = function(dir, skip, stopAtFirst) { + var session = this.session; + var sel = session.multiSelect; + + var range = sel.toOrientedRange(); + if (range.isEmpty()) { + range = session.getWordRange(range.start.row, range.start.column); + range.cursor = dir == -1 ? range.start : range.end; + this.multiSelect.addRange(range); + if (stopAtFirst) + return; + } + var needle = session.getTextRange(range); + + var newRange = find(session, needle, dir); + if (newRange) { + newRange.cursor = dir == -1 ? newRange.start : newRange.end; + this.$blockScrolling += 1; + this.session.unfold(newRange); + this.multiSelect.addRange(newRange); + this.$blockScrolling -= 1; + this.renderer.scrollCursorIntoView(null, 0.5); + } + if (skip) + this.multiSelect.substractPoint(range.cursor); + }; + this.alignCursors = function() { + var session = this.session; + var sel = session.multiSelect; + var ranges = sel.ranges; + var row = -1; + var sameRowRanges = ranges.filter(function(r) { + if (r.cursor.row == row) + return true; + row = r.cursor.row; + }); + + if (!ranges.length || sameRowRanges.length == ranges.length - 1) { + var range = this.selection.getRange(); + var fr = range.start.row, lr = range.end.row; + var guessRange = fr == lr; + if (guessRange) { + var max = this.session.getLength(); + var line; + do { + line = this.session.getLine(lr); + } while (/[=:]/.test(line) && ++lr < max); + do { + line = this.session.getLine(fr); + } while (/[=:]/.test(line) && --fr > 0); + + if (fr < 0) fr = 0; + if (lr >= max) lr = max - 1; + } + var lines = this.session.removeFullLines(fr, lr); + lines = this.$reAlignText(lines, guessRange); + this.session.insert({row: fr, column: 0}, lines.join("\n") + "\n"); + if (!guessRange) { + range.start.column = 0; + range.end.column = lines[lines.length - 1].length; + } + this.selection.setRange(range); + } else { + sameRowRanges.forEach(function(r) { + sel.substractPoint(r.cursor); + }); + + var maxCol = 0; + var minSpace = Infinity; + var spaceOffsets = ranges.map(function(r) { + var p = r.cursor; + var line = session.getLine(p.row); + var spaceOffset = line.substr(p.column).search(/\S/g); + if (spaceOffset == -1) + spaceOffset = 0; + + if (p.column > maxCol) + maxCol = p.column; + if (spaceOffset < minSpace) + minSpace = spaceOffset; + return spaceOffset; + }); + ranges.forEach(function(r, i) { + var p = r.cursor; + var l = maxCol - p.column; + var d = spaceOffsets[i] - minSpace; + if (l > d) + session.insert(p, lang.stringRepeat(" ", l - d)); + else + session.remove(new Range(p.row, p.column, p.row, p.column - l + d)); + + r.start.column = r.end.column = maxCol; + r.start.row = r.end.row = p.row; + r.cursor = r.end; + }); + sel.fromOrientedRange(ranges[0]); + this.renderer.updateCursor(); + this.renderer.updateBackMarkers(); + } + }; + + this.$reAlignText = function(lines, forceLeft) { + var isLeftAligned = true, isRightAligned = true; + var startW, textW, endW; + + return lines.map(function(line) { + var m = line.match(/(\s*)(.*?)(\s*)([=:].*)/); + if (!m) + return [line]; + + if (startW == null) { + startW = m[1].length; + textW = m[2].length; + endW = m[3].length; + return m; + } + + if (startW + textW + endW != m[1].length + m[2].length + m[3].length) + isRightAligned = false; + if (startW != m[1].length) + isLeftAligned = false; + + if (startW > m[1].length) + startW = m[1].length; + if (textW < m[2].length) + textW = m[2].length; + if (endW > m[3].length) + endW = m[3].length; + + return m; + }).map(forceLeft ? alignLeft : + isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign); + + function spaces(n) { + return lang.stringRepeat(" ", n); + } + + function alignLeft(m) { + return !m[2] ? m[0] : spaces(startW) + m[2] + + spaces(textW - m[2].length + endW) + + m[4].replace(/^([=:])\s+/, "$1 "); + } + function alignRight(m) { + return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2] + + spaces(endW, " ") + + m[4].replace(/^([=:])\s+/, "$1 "); + } + function unAlign(m) { + return !m[2] ? m[0] : spaces(startW) + m[2] + + spaces(endW) + + m[4].replace(/^([=:])\s+/, "$1 "); + } + }; +}).call(Editor.prototype); + + +function isSamePoint(p1, p2) { + return p1.row == p2.row && p1.column == p2.column; +} +exports.onSessionChange = function(e) { + var session = e.session; + if (session && !session.multiSelect) { + session.$selectionMarkers = []; + session.selection.$initRangeList(); + session.multiSelect = session.selection; + } + this.multiSelect = session && session.multiSelect; + + var oldSession = e.oldSession; + if (oldSession) { + oldSession.multiSelect.off("addRange", this.$onAddRange); + oldSession.multiSelect.off("removeRange", this.$onRemoveRange); + oldSession.multiSelect.off("multiSelect", this.$onMultiSelect); + oldSession.multiSelect.off("singleSelect", this.$onSingleSelect); + oldSession.multiSelect.lead.off("change", this.$checkMultiselectChange); + oldSession.multiSelect.anchor.off("change", this.$checkMultiselectChange); + } + + if (session) { + session.multiSelect.on("addRange", this.$onAddRange); + session.multiSelect.on("removeRange", this.$onRemoveRange); + session.multiSelect.on("multiSelect", this.$onMultiSelect); + session.multiSelect.on("singleSelect", this.$onSingleSelect); + session.multiSelect.lead.on("change", this.$checkMultiselectChange); + session.multiSelect.anchor.on("change", this.$checkMultiselectChange); + } + + if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) { + if (session.selection.inMultiSelectMode) + this.$onMultiSelect(); + else + this.$onSingleSelect(); + } +}; +function MultiSelect(editor) { + if (editor.$multiselectOnSessionChange) + return; + editor.$onAddRange = editor.$onAddRange.bind(editor); + editor.$onRemoveRange = editor.$onRemoveRange.bind(editor); + editor.$onMultiSelect = editor.$onMultiSelect.bind(editor); + editor.$onSingleSelect = editor.$onSingleSelect.bind(editor); + editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor); + editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor); + + editor.$multiselectOnSessionChange(editor); + editor.on("changeSession", editor.$multiselectOnSessionChange); + + editor.on("mousedown", onMouseDown); + editor.commands.addCommands(commands.defaultCommands); + + addAltCursorListeners(editor); +} + +function addAltCursorListeners(editor){ + var el = editor.textInput.getElement(); + var altCursor = false; + event.addListener(el, "keydown", function(e) { + var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey); + if (editor.$blockSelectEnabled && altDown) { + if (!altCursor) { + editor.renderer.setMouseCursor("crosshair"); + altCursor = true; + } + } else if (altCursor) { + reset(); + } + }); + + event.addListener(el, "keyup", reset); + event.addListener(el, "blur", reset); + function reset(e) { + if (altCursor) { + editor.renderer.setMouseCursor(""); + altCursor = false; + } + } +} + +exports.MultiSelect = MultiSelect; + + +acequire("./config").defineOptions(Editor.prototype, "editor", { + enableMultiselect: { + set: function(val) { + MultiSelect(this); + if (val) { + this.on("changeSession", this.$multiselectOnSessionChange); + this.on("mousedown", onMouseDown); + } else { + this.off("changeSession", this.$multiselectOnSessionChange); + this.off("mousedown", onMouseDown); + } + }, + value: true + }, + enableBlockSelect: { + set: function(val) { + this.$blockSelectEnabled = val; + }, + value: true + } +}); + + + +}); + +ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"], function(acequire, exports, module) { +"use strict"; + +var Range = acequire("../../range").Range; + +var FoldMode = exports.FoldMode = function() {}; + +(function() { + + this.foldingStartMarker = null; + this.foldingStopMarker = null; + this.getFoldWidget = function(session, foldStyle, row) { + var line = session.getLine(row); + if (this.foldingStartMarker.test(line)) + return "start"; + if (foldStyle == "markbeginend" + && this.foldingStopMarker + && this.foldingStopMarker.test(line)) + return "end"; + return ""; + }; + + this.getFoldWidgetRange = function(session, foldStyle, row) { + return null; + }; + + this.indentationBlock = function(session, row, column) { + var re = /\S/; + var line = session.getLine(row); + var startLevel = line.search(re); + if (startLevel == -1) + return; + + var startColumn = column || line.length; + var maxRow = session.getLength(); + var startRow = row; + var endRow = row; + + while (++row < maxRow) { + var level = session.getLine(row).search(re); + + if (level == -1) + continue; + + if (level <= startLevel) + break; + + endRow = row; + } + + if (endRow > startRow) { + var endColumn = session.getLine(endRow).length; + return new Range(startRow, startColumn, endRow, endColumn); + } + }; + + this.openingBracketBlock = function(session, bracket, row, column, typeRe) { + var start = {row: row, column: column + 1}; + var end = session.$findClosingBracket(bracket, start, typeRe); + if (!end) + return; + + var fw = session.foldWidgets[end.row]; + if (fw == null) + fw = session.getFoldWidget(end.row); + + if (fw == "start" && end.row > start.row) { + end.row --; + end.column = session.getLine(end.row).length; + } + return Range.fromPoints(start, end); + }; + + this.closingBracketBlock = function(session, bracket, row, column, typeRe) { + var end = {row: row, column: column}; + var start = session.$findOpeningBracket(bracket, end); + + if (!start) + return; + + start.column++; + end.column--; + + return Range.fromPoints(start, end); + }; +}).call(FoldMode.prototype); + +}); + +ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"], function(acequire, exports, module) { +"use strict"; + +exports.isDark = false; +exports.cssClass = "ace-tm"; +exports.cssText = ".ace-tm .ace_gutter {\ +background: #f0f0f0;\ +color: #333;\ +}\ +.ace-tm .ace_print-margin {\ +width: 1px;\ +background: #e8e8e8;\ +}\ +.ace-tm .ace_fold {\ +background-color: #6B72E6;\ +}\ +.ace-tm {\ +background-color: #FFFFFF;\ +color: black;\ +}\ +.ace-tm .ace_cursor {\ +color: black;\ +}\ +.ace-tm .ace_invisible {\ +color: rgb(191, 191, 191);\ +}\ +.ace-tm .ace_storage,\ +.ace-tm .ace_keyword {\ +color: blue;\ +}\ +.ace-tm .ace_constant {\ +color: rgb(197, 6, 11);\ +}\ +.ace-tm .ace_constant.ace_buildin {\ +color: rgb(88, 72, 246);\ +}\ +.ace-tm .ace_constant.ace_language {\ +color: rgb(88, 92, 246);\ +}\ +.ace-tm .ace_constant.ace_library {\ +color: rgb(6, 150, 14);\ +}\ +.ace-tm .ace_invalid {\ +background-color: rgba(255, 0, 0, 0.1);\ +color: red;\ +}\ +.ace-tm .ace_support.ace_function {\ +color: rgb(60, 76, 114);\ +}\ +.ace-tm .ace_support.ace_constant {\ +color: rgb(6, 150, 14);\ +}\ +.ace-tm .ace_support.ace_type,\ +.ace-tm .ace_support.ace_class {\ +color: rgb(109, 121, 222);\ +}\ +.ace-tm .ace_keyword.ace_operator {\ +color: rgb(104, 118, 135);\ +}\ +.ace-tm .ace_string {\ +color: rgb(3, 106, 7);\ +}\ +.ace-tm .ace_comment {\ +color: rgb(76, 136, 107);\ +}\ +.ace-tm .ace_comment.ace_doc {\ +color: rgb(0, 102, 255);\ +}\ +.ace-tm .ace_comment.ace_doc.ace_tag {\ +color: rgb(128, 159, 191);\ +}\ +.ace-tm .ace_constant.ace_numeric {\ +color: rgb(0, 0, 205);\ +}\ +.ace-tm .ace_variable {\ +color: rgb(49, 132, 149);\ +}\ +.ace-tm .ace_xml-pe {\ +color: rgb(104, 104, 91);\ +}\ +.ace-tm .ace_entity.ace_name.ace_function {\ +color: #0000A2;\ +}\ +.ace-tm .ace_heading {\ +color: rgb(12, 7, 255);\ +}\ +.ace-tm .ace_list {\ +color:rgb(185, 6, 144);\ +}\ +.ace-tm .ace_meta.ace_tag {\ +color:rgb(0, 22, 142);\ +}\ +.ace-tm .ace_string.ace_regex {\ +color: rgb(255, 0, 0)\ +}\ +.ace-tm .ace_marker-layer .ace_selection {\ +background: rgb(181, 213, 255);\ +}\ +.ace-tm.ace_multiselect .ace_selection.ace_start {\ +box-shadow: 0 0 3px 0px white;\ +}\ +.ace-tm .ace_marker-layer .ace_step {\ +background: rgb(252, 255, 0);\ +}\ +.ace-tm .ace_marker-layer .ace_stack {\ +background: rgb(164, 229, 101);\ +}\ +.ace-tm .ace_marker-layer .ace_bracket {\ +margin: -1px 0 0 -1px;\ +border: 1px solid rgb(192, 192, 192);\ +}\ +.ace-tm .ace_marker-layer .ace_active-line {\ +background: rgba(0, 0, 0, 0.07);\ +}\ +.ace-tm .ace_gutter-active-line {\ +background-color : #dcdcdc;\ +}\ +.ace-tm .ace_marker-layer .ace_selected-word {\ +background: rgb(250, 250, 255);\ +border: 1px solid rgb(200, 200, 250);\ +}\ +.ace-tm .ace_indent-guide {\ +background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\ +}\ +"; + +var dom = acequire("../lib/dom"); +dom.importCssString(exports.cssText, exports.cssClass); +}); + +ace.define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("./lib/oop"); +var dom = acequire("./lib/dom"); +var Range = acequire("./range").Range; + + +function LineWidgets(session) { + this.session = session; + this.session.widgetManager = this; + this.session.getRowLength = this.getRowLength; + this.session.$getWidgetScreenLength = this.$getWidgetScreenLength; + this.updateOnChange = this.updateOnChange.bind(this); + this.renderWidgets = this.renderWidgets.bind(this); + this.measureWidgets = this.measureWidgets.bind(this); + this.session._changedWidgets = []; + this.$onChangeEditor = this.$onChangeEditor.bind(this); + + this.session.on("change", this.updateOnChange); + this.session.on("changeFold", this.updateOnFold); + this.session.on("changeEditor", this.$onChangeEditor); +} + +(function() { + this.getRowLength = function(row) { + var h; + if (this.lineWidgets) + h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0; + else + h = 0; + if (!this.$useWrapMode || !this.$wrapData[row]) { + return 1 + h; + } else { + return this.$wrapData[row].length + 1 + h; + } + }; + + this.$getWidgetScreenLength = function() { + var screenRows = 0; + this.lineWidgets.forEach(function(w){ + if (w && w.rowCount && !w.hidden) + screenRows += w.rowCount; + }); + return screenRows; + }; + + this.$onChangeEditor = function(e) { + this.attach(e.editor); + }; + + this.attach = function(editor) { + if (editor && editor.widgetManager && editor.widgetManager != this) + editor.widgetManager.detach(); + + if (this.editor == editor) + return; + + this.detach(); + this.editor = editor; + + if (editor) { + editor.widgetManager = this; + editor.renderer.on("beforeRender", this.measureWidgets); + editor.renderer.on("afterRender", this.renderWidgets); + } + }; + this.detach = function(e) { + var editor = this.editor; + if (!editor) + return; + + this.editor = null; + editor.widgetManager = null; + + editor.renderer.off("beforeRender", this.measureWidgets); + editor.renderer.off("afterRender", this.renderWidgets); + var lineWidgets = this.session.lineWidgets; + lineWidgets && lineWidgets.forEach(function(w) { + if (w && w.el && w.el.parentNode) { + w._inDocument = false; + w.el.parentNode.removeChild(w.el); + } + }); + }; + + this.updateOnFold = function(e, session) { + var lineWidgets = session.lineWidgets; + if (!lineWidgets || !e.action) + return; + var fold = e.data; + var start = fold.start.row; + var end = fold.end.row; + var hide = e.action == "add"; + for (var i = start + 1; i < end; i++) { + if (lineWidgets[i]) + lineWidgets[i].hidden = hide; + } + if (lineWidgets[end]) { + if (hide) { + if (!lineWidgets[start]) + lineWidgets[start] = lineWidgets[end]; + else + lineWidgets[end].hidden = hide; + } else { + if (lineWidgets[start] == lineWidgets[end]) + lineWidgets[start] = undefined; + lineWidgets[end].hidden = hide; + } + } + }; + + this.updateOnChange = function(delta) { + var lineWidgets = this.session.lineWidgets; + if (!lineWidgets) return; + + var startRow = delta.start.row; + var len = delta.end.row - startRow; + + if (len === 0) { + } else if (delta.action == 'remove') { + var removed = lineWidgets.splice(startRow + 1, len); + removed.forEach(function(w) { + w && this.removeLineWidget(w); + }, this); + this.$updateRows(); + } else { + var args = new Array(len); + args.unshift(startRow, 0); + lineWidgets.splice.apply(lineWidgets, args); + this.$updateRows(); + } + }; + + this.$updateRows = function() { + var lineWidgets = this.session.lineWidgets; + if (!lineWidgets) return; + var noWidgets = true; + lineWidgets.forEach(function(w, i) { + if (w) { + noWidgets = false; + w.row = i; + while (w.$oldWidget) { + w.$oldWidget.row = i; + w = w.$oldWidget; + } + } + }); + if (noWidgets) + this.session.lineWidgets = null; + }; + + this.addLineWidget = function(w) { + if (!this.session.lineWidgets) + this.session.lineWidgets = new Array(this.session.getLength()); + + var old = this.session.lineWidgets[w.row]; + if (old) { + w.$oldWidget = old; + if (old.el && old.el.parentNode) { + old.el.parentNode.removeChild(old.el); + old._inDocument = false; + } + } + + this.session.lineWidgets[w.row] = w; + + w.session = this.session; + + var renderer = this.editor.renderer; + if (w.html && !w.el) { + w.el = dom.createElement("div"); + w.el.innerHTML = w.html; + } + if (w.el) { + dom.addCssClass(w.el, "ace_lineWidgetContainer"); + w.el.style.position = "absolute"; + w.el.style.zIndex = 5; + renderer.container.appendChild(w.el); + w._inDocument = true; + } + + if (!w.coverGutter) { + w.el.style.zIndex = 3; + } + if (!w.pixelHeight) { + w.pixelHeight = w.el.offsetHeight; + } + if (w.rowCount == null) { + w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight; + } + + var fold = this.session.getFoldAt(w.row, 0); + w.$fold = fold; + if (fold) { + var lineWidgets = this.session.lineWidgets; + if (w.row == fold.end.row && !lineWidgets[fold.start.row]) + lineWidgets[fold.start.row] = w; + else + w.hidden = true; + } + + this.session._emit("changeFold", {data:{start:{row: w.row}}}); + + this.$updateRows(); + this.renderWidgets(null, renderer); + this.onWidgetChanged(w); + return w; + }; + + this.removeLineWidget = function(w) { + w._inDocument = false; + w.session = null; + if (w.el && w.el.parentNode) + w.el.parentNode.removeChild(w.el); + if (w.editor && w.editor.destroy) try { + w.editor.destroy(); + } catch(e){} + if (this.session.lineWidgets) { + var w1 = this.session.lineWidgets[w.row] + if (w1 == w) { + this.session.lineWidgets[w.row] = w.$oldWidget; + if (w.$oldWidget) + this.onWidgetChanged(w.$oldWidget); + } else { + while (w1) { + if (w1.$oldWidget == w) { + w1.$oldWidget = w.$oldWidget; + break; + } + w1 = w1.$oldWidget; + } + } + } + this.session._emit("changeFold", {data:{start:{row: w.row}}}); + this.$updateRows(); + }; + + this.getWidgetsAtRow = function(row) { + var lineWidgets = this.session.lineWidgets; + var w = lineWidgets && lineWidgets[row]; + var list = []; + while (w) { + list.push(w); + w = w.$oldWidget; + } + return list; + }; + + this.onWidgetChanged = function(w) { + this.session._changedWidgets.push(w); + this.editor && this.editor.renderer.updateFull(); + }; + + this.measureWidgets = function(e, renderer) { + var changedWidgets = this.session._changedWidgets; + var config = renderer.layerConfig; + + if (!changedWidgets || !changedWidgets.length) return; + var min = Infinity; + for (var i = 0; i < changedWidgets.length; i++) { + var w = changedWidgets[i]; + if (!w || !w.el) continue; + if (w.session != this.session) continue; + if (!w._inDocument) { + if (this.session.lineWidgets[w.row] != w) + continue; + w._inDocument = true; + renderer.container.appendChild(w.el); + } + + w.h = w.el.offsetHeight; + + if (!w.fixedWidth) { + w.w = w.el.offsetWidth; + w.screenWidth = Math.ceil(w.w / config.characterWidth); + } + + var rowCount = w.h / config.lineHeight; + if (w.coverLine) { + rowCount -= this.session.getRowLineCount(w.row); + if (rowCount < 0) + rowCount = 0; + } + if (w.rowCount != rowCount) { + w.rowCount = rowCount; + if (w.row < min) + min = w.row; + } + } + if (min != Infinity) { + this.session._emit("changeFold", {data:{start:{row: min}}}); + this.session.lineWidgetWidth = null; + } + this.session._changedWidgets = []; + }; + + this.renderWidgets = function(e, renderer) { + var config = renderer.layerConfig; + var lineWidgets = this.session.lineWidgets; + if (!lineWidgets) + return; + var first = Math.min(this.firstRow, config.firstRow); + var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length); + + while (first > 0 && !lineWidgets[first]) + first--; + + this.firstRow = config.firstRow; + this.lastRow = config.lastRow; + + renderer.$cursorLayer.config = config; + for (var i = first; i <= last; i++) { + var w = lineWidgets[i]; + if (!w || !w.el) continue; + if (w.hidden) { + w.el.style.top = -100 - (w.pixelHeight || 0) + "px"; + continue; + } + if (!w._inDocument) { + w._inDocument = true; + renderer.container.appendChild(w.el); + } + var top = renderer.$cursorLayer.getPixelPosition({row: i, column:0}, true).top; + if (!w.coverLine) + top += config.lineHeight * this.session.getRowLineCount(w.row); + w.el.style.top = top - config.offset + "px"; + + var left = w.coverGutter ? 0 : renderer.gutterWidth; + if (!w.fixedWidth) + left -= renderer.scrollLeft; + w.el.style.left = left + "px"; + + if (w.fullWidth && w.screenWidth) { + w.el.style.minWidth = config.width + 2 * config.padding + "px"; + } + + if (w.fixedWidth) { + w.el.style.right = renderer.scrollBar.getWidth() + "px"; + } else { + w.el.style.right = ""; + } + } + }; + +}).call(LineWidgets.prototype); + + +exports.LineWidgets = LineWidgets; + +}); + +ace.define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"], function(acequire, exports, module) { +"use strict"; +var LineWidgets = acequire("../line_widgets").LineWidgets; +var dom = acequire("../lib/dom"); +var Range = acequire("../range").Range; + +function binarySearch(array, needle, comparator) { + var first = 0; + var last = array.length - 1; + + while (first <= last) { + var mid = (first + last) >> 1; + var c = comparator(needle, array[mid]); + if (c > 0) + first = mid + 1; + else if (c < 0) + last = mid - 1; + else + return mid; + } + return -(first + 1); +} + +function findAnnotations(session, row, dir) { + var annotations = session.getAnnotations().sort(Range.comparePoints); + if (!annotations.length) + return; + + var i = binarySearch(annotations, {row: row, column: -1}, Range.comparePoints); + if (i < 0) + i = -i - 1; + + if (i >= annotations.length) + i = dir > 0 ? 0 : annotations.length - 1; + else if (i === 0 && dir < 0) + i = annotations.length - 1; + + var annotation = annotations[i]; + if (!annotation || !dir) + return; + + if (annotation.row === row) { + do { + annotation = annotations[i += dir]; + } while (annotation && annotation.row === row); + if (!annotation) + return annotations.slice(); + } + + + var matched = []; + row = annotation.row; + do { + matched[dir < 0 ? "unshift" : "push"](annotation); + annotation = annotations[i += dir]; + } while (annotation && annotation.row == row); + return matched.length && matched; +} + +exports.showErrorMarker = function(editor, dir) { + var session = editor.session; + if (!session.widgetManager) { + session.widgetManager = new LineWidgets(session); + session.widgetManager.attach(editor); + } + + var pos = editor.getCursorPosition(); + var row = pos.row; + var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function(w) { + return w.type == "errorMarker"; + })[0]; + if (oldWidget) { + oldWidget.destroy(); + } else { + row -= dir; + } + var annotations = findAnnotations(session, row, dir); + var gutterAnno; + if (annotations) { + var annotation = annotations[0]; + pos.column = (annotation.pos && typeof annotation.column != "number" + ? annotation.pos.sc + : annotation.column) || 0; + pos.row = annotation.row; + gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row]; + } else if (oldWidget) { + return; + } else { + gutterAnno = { + text: ["Looks good!"], + className: "ace_ok" + }; + } + editor.session.unfold(pos.row); + editor.selection.moveToPosition(pos); + + var w = { + row: pos.row, + fixedWidth: true, + coverGutter: true, + el: dom.createElement("div"), + type: "errorMarker" + }; + var el = w.el.appendChild(dom.createElement("div")); + var arrow = w.el.appendChild(dom.createElement("div")); + arrow.className = "error_widget_arrow " + gutterAnno.className; + + var left = editor.renderer.$cursorLayer + .getPixelPosition(pos).left; + arrow.style.left = left + editor.renderer.gutterWidth - 5 + "px"; + + w.el.className = "error_widget_wrapper"; + el.className = "error_widget " + gutterAnno.className; + el.innerHTML = gutterAnno.text.join("
"); + + el.appendChild(dom.createElement("div")); + + var kb = function(_, hashId, keyString) { + if (hashId === 0 && (keyString === "esc" || keyString === "return")) { + w.destroy(); + return {command: "null"}; + } + }; + + w.destroy = function() { + if (editor.$mouseHandler.isMousePressed) + return; + editor.keyBinding.removeKeyboardHandler(kb); + session.widgetManager.removeLineWidget(w); + editor.off("changeSelection", w.destroy); + editor.off("changeSession", w.destroy); + editor.off("mouseup", w.destroy); + editor.off("change", w.destroy); + }; + + editor.keyBinding.addKeyboardHandler(kb); + editor.on("changeSelection", w.destroy); + editor.on("changeSession", w.destroy); + editor.on("mouseup", w.destroy); + editor.on("change", w.destroy); + + editor.session.widgetManager.addLineWidget(w); + + w.el.onmousedown = editor.focus.bind(editor); + + editor.renderer.scrollCursorIntoView(null, 0.5, {bottom: w.el.offsetHeight}); +}; + + +dom.importCssString("\ + .error_widget_wrapper {\ + background: inherit;\ + color: inherit;\ + border:none\ + }\ + .error_widget {\ + border-top: solid 2px;\ + border-bottom: solid 2px;\ + margin: 5px 0;\ + padding: 10px 40px;\ + white-space: pre-wrap;\ + }\ + .error_widget.ace_error, .error_widget_arrow.ace_error{\ + border-color: #ff5a5a\ + }\ + .error_widget.ace_warning, .error_widget_arrow.ace_warning{\ + border-color: #F1D817\ + }\ + .error_widget.ace_info, .error_widget_arrow.ace_info{\ + border-color: #5a5a5a\ + }\ + .error_widget.ace_ok, .error_widget_arrow.ace_ok{\ + border-color: #5aaa5a\ + }\ + .error_widget_arrow {\ + position: absolute;\ + border: solid 5px;\ + border-top-color: transparent!important;\ + border-right-color: transparent!important;\ + border-left-color: transparent!important;\ + top: -5px;\ + }\ +", ""); + +}); + +ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"], function(acequire, exports, module) { +"use strict"; + +acequire("./lib/fixoldbrowsers"); + +var dom = acequire("./lib/dom"); +var event = acequire("./lib/event"); + +var Editor = acequire("./editor").Editor; +var EditSession = acequire("./edit_session").EditSession; +var UndoManager = acequire("./undomanager").UndoManager; +var Renderer = acequire("./virtual_renderer").VirtualRenderer; +acequire("./worker/worker_client"); +acequire("./keyboard/hash_handler"); +acequire("./placeholder"); +acequire("./multi_select"); +acequire("./mode/folding/fold_mode"); +acequire("./theme/textmate"); +acequire("./ext/error_marker"); + +exports.config = acequire("./config"); +exports.acequire = acequire; +exports.edit = function(el) { + if (typeof el == "string") { + var _id = el; + el = document.getElementById(_id); + if (!el) + throw new Error("ace.edit can't find div #" + _id); + } + + if (el && el.env && el.env.editor instanceof Editor) + return el.env.editor; + + var value = ""; + if (el && /input|textarea/i.test(el.tagName)) { + var oldNode = el; + value = oldNode.value; + el = dom.createElement("pre"); + oldNode.parentNode.replaceChild(el, oldNode); + } else if (el) { + value = dom.getInnerText(el); + el.innerHTML = ""; + } + + var doc = exports.createEditSession(value); + + var editor = new Editor(new Renderer(el)); + editor.setSession(doc); + + var env = { + document: doc, + editor: editor, + onResize: editor.resize.bind(editor, null) + }; + if (oldNode) env.textarea = oldNode; + event.addListener(window, "resize", env.onResize); + editor.on("destroy", function() { + event.removeListener(window, "resize", env.onResize); + env.editor.container.env = null; // prevent memory leak on old ie + }); + editor.container.env = editor.env = env; + return editor; +}; +exports.createEditSession = function(text, mode) { + var doc = new EditSession(text, mode); + doc.setUndoManager(new UndoManager()); + return doc; +} +exports.EditSession = EditSession; +exports.UndoManager = UndoManager; +exports.version = "1.2.3"; +}); + (function() { + ace.acequire(["ace/ace"], function(a) { + a && a.config.init(true); + if (!window.ace) + window.ace = a; + for (var key in a) if (a.hasOwnProperty(key)) + window.ace[key] = a[key]; + }); + })(); + +module.exports = window.ace.acequire("ace/ace"); +},{"w3c-blob":1442}],70:[function(require,module,exports){ +ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("../lib/oop"); +var TextHighlightRules = acequire("./text_highlight_rules").TextHighlightRules; + +var DocCommentHighlightRules = function() { + this.$rules = { + "start" : [ { + token : "comment.doc.tag", + regex : "@[\\w\\d_]+" // TODO: fix email addresses + }, + DocCommentHighlightRules.getTagRule(), + { + defaultToken : "comment.doc", + caseInsensitive: true + }] + }; +}; + +oop.inherits(DocCommentHighlightRules, TextHighlightRules); + +DocCommentHighlightRules.getTagRule = function(start) { + return { + token : "comment.doc.tag.storage.type", + regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" + }; +} + +DocCommentHighlightRules.getStartRule = function(start) { + return { + token : "comment.doc", // doc comment + regex : "\\/\\*(?=\\*)", + next : start + }; +}; + +DocCommentHighlightRules.getEndRule = function (start) { + return { + token : "comment.doc", // closing comment + regex : "\\*\\/", + next : start + }; +}; + + +exports.DocCommentHighlightRules = DocCommentHighlightRules; + +}); + +ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("../lib/oop"); +var DocCommentHighlightRules = acequire("./doc_comment_highlight_rules").DocCommentHighlightRules; +var TextHighlightRules = acequire("./text_highlight_rules").TextHighlightRules; +var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b"; + +var JavaScriptHighlightRules = function(options) { + var keywordMapper = this.createKeywordMapper({ + "variable.language": + "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors + "Namespace|QName|XML|XMLList|" + // E4X + "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors + "SyntaxError|TypeError|URIError|" + + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions + "isNaN|parseFloat|parseInt|" + + "JSON|Math|" + // Other + "this|arguments|prototype|window|document" , // Pseudo + "keyword": + "const|yield|import|get|set|" + + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + + "__parent__|__count__|escape|unescape|with|__proto__|" + + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", + "storage.type": + "const|let|var|function", + "constant.language": + "null|Infinity|NaN|undefined", + "support.function": + "alert", + "constant.language.boolean": "true|false" + }, "identifier"); + var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; + + var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex + "u[0-9a-fA-F]{4}|" + // unicode + "u{[0-9a-fA-F]{1,6}}|" + // es6 unicode + "[0-2][0-7]{0,2}|" + // oct + "3[0-7][0-7]?|" + // oct + "[4-7][0-7]?|" + //oct + ".)"; + + this.$rules = { + "no_regex" : [ + DocCommentHighlightRules.getStartRule("doc-start"), + comments("no_regex"), + { + token : "string", + regex : "'(?=.)", + next : "qstring" + }, { + token : "string", + regex : '"(?=.)', + next : "qqstring" + }, { + token : "constant.numeric", // hex + regex : /0(?:[xX][0-9a-fA-F]+|[bB][01]+)\b/ + }, { + token : "constant.numeric", // float + regex : /[+-]?\d[\d_]*(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ + }, { + token : [ + "storage.type", "punctuation.operator", "support.function", + "punctuation.operator", "entity.name.function", "text","keyword.operator" + ], + regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", + next: "function_arguments" + }, { + token : [ + "storage.type", "punctuation.operator", "entity.name.function", "text", + "keyword.operator", "text", "storage.type", "text", "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { + token : [ + "entity.name.function", "text", "keyword.operator", "text", "storage.type", + "text", "paren.lparen" + ], + regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { + token : [ + "storage.type", "punctuation.operator", "entity.name.function", "text", + "keyword.operator", "text", + "storage.type", "text", "entity.name.function", "text", "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", + next: "function_arguments" + }, { + token : [ + "storage.type", "text", "entity.name.function", "text", "paren.lparen" + ], + regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", + next: "function_arguments" + }, { + token : [ + "entity.name.function", "text", "punctuation.operator", + "text", "storage.type", "text", "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { + token : [ + "text", "text", "storage.type", "text", "paren.lparen" + ], + regex : "(:)(\\s*)(function)(\\s*)(\\()", + next: "function_arguments" + }, { + token : "keyword", + regex : "(?:" + kwBeforeRe + ")\\b", + next : "start" + }, { + token : ["support.constant"], + regex : /that\b/ + }, { + token : ["storage.type", "punctuation.operator", "support.function.firebug"], + regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ + }, { + token : keywordMapper, + regex : identifierRe + }, { + token : "punctuation.operator", + regex : /[.](?![.])/, + next : "property" + }, { + token : "keyword.operator", + regex : /--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, + next : "start" + }, { + token : "punctuation.operator", + regex : /[?:,;.]/, + next : "start" + }, { + token : "paren.lparen", + regex : /[\[({]/, + next : "start" + }, { + token : "paren.rparen", + regex : /[\])}]/ + }, { + token: "comment", + regex: /^#!.*$/ + } + ], + property: [{ + token : "text", + regex : "\\s+" + }, { + token : [ + "storage.type", "punctuation.operator", "entity.name.function", "text", + "keyword.operator", "text", + "storage.type", "text", "entity.name.function", "text", "paren.lparen" + ], + regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()", + next: "function_arguments" + }, { + token : "punctuation.operator", + regex : /[.](?![.])/ + }, { + token : "support.function", + regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ + }, { + token : "support.function.dom", + regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ + }, { + token : "support.constant", + regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ + }, { + token : "identifier", + regex : identifierRe + }, { + regex: "", + token: "empty", + next: "no_regex" + } + ], + "start": [ + DocCommentHighlightRules.getStartRule("doc-start"), + comments("start"), + { + token: "string.regexp", + regex: "\\/", + next: "regex" + }, { + token : "text", + regex : "\\s+|^$", + next : "start" + }, { + token: "empty", + regex: "", + next: "no_regex" + } + ], + "regex": [ + { + token: "regexp.keyword.operator", + regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" + }, { + token: "string.regexp", + regex: "/[sxngimy]*", + next: "no_regex" + }, { + token : "invalid", + regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ + }, { + token : "constant.language.escape", + regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ + }, { + token : "constant.language.delimiter", + regex: /\|/ + }, { + token: "constant.language.escape", + regex: /\[\^?/, + next: "regex_character_class" + }, { + token: "empty", + regex: "$", + next: "no_regex" + }, { + defaultToken: "string.regexp" + } + ], + "regex_character_class": [ + { + token: "regexp.charclass.keyword.operator", + regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" + }, { + token: "constant.language.escape", + regex: "]", + next: "regex" + }, { + token: "constant.language.escape", + regex: "-" + }, { + token: "empty", + regex: "$", + next: "no_regex" + }, { + defaultToken: "string.regexp.charachterclass" + } + ], + "function_arguments": [ + { + token: "variable.parameter", + regex: identifierRe + }, { + token: "punctuation.operator", + regex: "[, ]+" + }, { + token: "punctuation.operator", + regex: "$" + }, { + token: "empty", + regex: "", + next: "no_regex" + } + ], + "qqstring" : [ + { + token : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : "\\\\$", + next : "qqstring" + }, { + token : "string", + regex : '"|$', + next : "no_regex" + }, { + defaultToken: "string" + } + ], + "qstring" : [ + { + token : "constant.language.escape", + regex : escapedRe + }, { + token : "string", + regex : "\\\\$", + next : "qstring" + }, { + token : "string", + regex : "'|$", + next : "no_regex" + }, { + defaultToken: "string" + } + ] + }; + + + if (!options || !options.noES6) { + this.$rules.no_regex.unshift({ + regex: "[{}]", onMatch: function(val, state, stack) { + this.next = val == "{" ? this.nextState : ""; + if (val == "{" && stack.length) { + stack.unshift("start", state); + } + else if (val == "}" && stack.length) { + stack.shift(); + this.next = stack.shift(); + if (this.next.indexOf("string") != -1 || this.next.indexOf("jsx") != -1) + return "paren.quasi.end"; + } + return val == "{" ? "paren.lparen" : "paren.rparen"; + }, + nextState: "start" + }, { + token : "string.quasi.start", + regex : /`/, + push : [{ + token : "constant.language.escape", + regex : escapedRe + }, { + token : "paren.quasi.start", + regex : /\${/, + push : "start" + }, { + token : "string.quasi.end", + regex : /`/, + next : "pop" + }, { + defaultToken: "string.quasi" + }] + }); + + if (!options || !options.noJSX) + JSX.call(this); + } + + this.embedRules(DocCommentHighlightRules, "doc-", + [ DocCommentHighlightRules.getEndRule("no_regex") ]); + + this.normalizeRules(); +}; + +oop.inherits(JavaScriptHighlightRules, TextHighlightRules); + +function JSX() { + var tagRegex = identifierRe.replace("\\d", "\\d\\-"); + var jsxTag = { + onMatch : function(val, state, stack) { + var offset = val.charAt(1) == "/" ? 2 : 1; + if (offset == 1) { + if (state != this.nextState) + stack.unshift(this.next, this.nextState, 0); + else + stack.unshift(this.next); + stack[2]++; + } else if (offset == 2) { + if (state == this.nextState) { + stack[1]--; + if (!stack[1] || stack[1] < 0) { + stack.shift(); + stack.shift(); + } + } + } + return [{ + type: "meta.tag.punctuation." + (offset == 1 ? "" : "end-") + "tag-open.xml", + value: val.slice(0, offset) + }, { + type: "meta.tag.tag-name.xml", + value: val.substr(offset) + }]; + }, + regex : "", + onMatch : function(value, currentState, stack) { + if (currentState == stack[0]) + stack.shift(); + if (value.length == 2) { + if (stack[0] == this.nextState) + stack[1]--; + if (!stack[1] || stack[1] < 0) { + stack.splice(0, 2); + } + } + this.next = stack[0] || "start"; + return [{type: this.token, value: value}]; + }, + nextState: "jsx" + }, + jsxJsRule, + comments("jsxAttributes"), + { + token : "entity.other.attribute-name.xml", + regex : tagRegex + }, { + token : "keyword.operator.attribute-equals.xml", + regex : "=" + }, { + token : "text.tag-whitespace.xml", + regex : "\\s+" + }, { + token : "string.attribute-value.xml", + regex : "'", + stateName : "jsx_attr_q", + push : [ + {token : "string.attribute-value.xml", regex: "'", next: "pop"}, + {include : "reference"}, + {defaultToken : "string.attribute-value.xml"} + ] + }, { + token : "string.attribute-value.xml", + regex : '"', + stateName : "jsx_attr_qq", + push : [ + {token : "string.attribute-value.xml", regex: '"', next: "pop"}, + {include : "reference"}, + {defaultToken : "string.attribute-value.xml"} + ] + }, + jsxTag + ]; + this.$rules.reference = [{ + token : "constant.language.escape.reference.xml", + regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" + }]; +} + +function comments(next) { + return [ + { + token : "comment", // multi line comment + regex : /\/\*/, + next: [ + DocCommentHighlightRules.getTagRule(), + {token : "comment", regex : "\\*\\/", next : next || "pop"}, + {defaultToken : "comment", caseInsensitive: true} + ] + }, { + token : "comment", + regex : "\\/\\/", + next: [ + DocCommentHighlightRules.getTagRule(), + {token : "comment", regex : "$|^", next : next || "pop"}, + {defaultToken : "comment", caseInsensitive: true} + ] + } + ]; +} +exports.JavaScriptHighlightRules = JavaScriptHighlightRules; +}); + +ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(acequire, exports, module) { +"use strict"; + +var Range = acequire("../range").Range; + +var MatchingBraceOutdent = function() {}; + +(function() { + + this.checkOutdent = function(line, input) { + if (! /^\s+$/.test(line)) + return false; + + return /^\s*\}/.test(input); + }; + + this.autoOutdent = function(doc, row) { + var line = doc.getLine(row); + var match = line.match(/^(\s*\})/); + + if (!match) return 0; + + var column = match[1].length; + var openBracePos = doc.findMatchingBracket({row: row, column: column}); + + if (!openBracePos || openBracePos.row == row) return 0; + + var indent = this.$getIndent(doc.getLine(openBracePos.row)); + doc.replace(new Range(row, 0, row, column-1), indent); + }; + + this.$getIndent = function(line) { + return line.match(/^\s*/)[0]; + }; + +}).call(MatchingBraceOutdent.prototype); + +exports.MatchingBraceOutdent = MatchingBraceOutdent; +}); + +ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("../../lib/oop"); +var Behaviour = acequire("../behaviour").Behaviour; +var TokenIterator = acequire("../../token_iterator").TokenIterator; +var lang = acequire("../../lib/lang"); + +var SAFE_INSERT_IN_TOKENS = + ["text", "paren.rparen", "punctuation.operator"]; +var SAFE_INSERT_BEFORE_TOKENS = + ["text", "paren.rparen", "punctuation.operator", "comment"]; + +var context; +var contextCache = {}; +var initContext = function(editor) { + var id = -1; + if (editor.multiSelect) { + id = editor.selection.index; + if (contextCache.rangeCount != editor.multiSelect.rangeCount) + contextCache = {rangeCount: editor.multiSelect.rangeCount}; + } + if (contextCache[id]) + return context = contextCache[id]; + context = contextCache[id] = { + autoInsertedBrackets: 0, + autoInsertedRow: -1, + autoInsertedLineEnd: "", + maybeInsertedBrackets: 0, + maybeInsertedRow: -1, + maybeInsertedLineStart: "", + maybeInsertedLineEnd: "" + }; +}; + +var getWrapped = function(selection, selected, opening, closing) { + var rowDiff = selection.end.row - selection.start.row; + return { + text: opening + selected + closing, + selection: [ + 0, + selection.start.column + 1, + rowDiff, + selection.end.column + (rowDiff ? 0 : 1) + ] + }; +}; + +var CstyleBehaviour = function() { + this.add("braces", "insertion", function(state, action, editor, session, text) { + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + if (text == '{') { + initContext(editor); + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { + return getWrapped(selection, selected, '{', '}'); + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { + if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { + CstyleBehaviour.recordAutoInsert(editor, session, "}"); + return { + text: '{}', + selection: [1, 1] + }; + } else { + CstyleBehaviour.recordMaybeInsert(editor, session, "{"); + return { + text: '{', + selection: [1, 1] + }; + } + } + } else if (text == '}') { + initContext(editor); + var rightChar = line.substring(cursor.column, cursor.column + 1); + if (rightChar == '}') { + var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { + CstyleBehaviour.popAutoInsertedClosing(); + return { + text: '', + selection: [1, 1] + }; + } + } + } else if (text == "\n" || text == "\r\n") { + initContext(editor); + var closing = ""; + if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { + closing = lang.stringRepeat("}", context.maybeInsertedBrackets); + CstyleBehaviour.clearMaybeInsertedClosing(); + } + var rightChar = line.substring(cursor.column, cursor.column + 1); + if (rightChar === '}') { + var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); + if (!openBracePos) + return null; + var next_indent = this.$getIndent(session.getLine(openBracePos.row)); + } else if (closing) { + var next_indent = this.$getIndent(line); + } else { + CstyleBehaviour.clearMaybeInsertedClosing(); + return; + } + var indent = next_indent + session.getTabString(); + + return { + text: '\n' + indent + '\n' + next_indent + closing, + selection: [1, indent.length, 1, indent.length] + }; + } else { + CstyleBehaviour.clearMaybeInsertedClosing(); + } + }); + + this.add("braces", "deletion", function(state, action, editor, session, range) { + var selected = session.doc.getTextRange(range); + if (!range.isMultiLine() && selected == '{') { + initContext(editor); + var line = session.doc.getLine(range.start.row); + var rightChar = line.substring(range.end.column, range.end.column + 1); + if (rightChar == '}') { + range.end.column++; + return range; + } else { + context.maybeInsertedBrackets--; + } + } + }); + + this.add("parens", "insertion", function(state, action, editor, session, text) { + if (text == '(') { + initContext(editor); + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "" && editor.getWrapBehavioursEnabled()) { + return getWrapped(selection, selected, '(', ')'); + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { + CstyleBehaviour.recordAutoInsert(editor, session, ")"); + return { + text: '()', + selection: [1, 1] + }; + } + } else if (text == ')') { + initContext(editor); + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + var rightChar = line.substring(cursor.column, cursor.column + 1); + if (rightChar == ')') { + var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { + CstyleBehaviour.popAutoInsertedClosing(); + return { + text: '', + selection: [1, 1] + }; + } + } + } + }); + + this.add("parens", "deletion", function(state, action, editor, session, range) { + var selected = session.doc.getTextRange(range); + if (!range.isMultiLine() && selected == '(') { + initContext(editor); + var line = session.doc.getLine(range.start.row); + var rightChar = line.substring(range.start.column + 1, range.start.column + 2); + if (rightChar == ')') { + range.end.column++; + return range; + } + } + }); + + this.add("brackets", "insertion", function(state, action, editor, session, text) { + if (text == '[') { + initContext(editor); + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "" && editor.getWrapBehavioursEnabled()) { + return getWrapped(selection, selected, '[', ']'); + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { + CstyleBehaviour.recordAutoInsert(editor, session, "]"); + return { + text: '[]', + selection: [1, 1] + }; + } + } else if (text == ']') { + initContext(editor); + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + var rightChar = line.substring(cursor.column, cursor.column + 1); + if (rightChar == ']') { + var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { + CstyleBehaviour.popAutoInsertedClosing(); + return { + text: '', + selection: [1, 1] + }; + } + } + } + }); + + this.add("brackets", "deletion", function(state, action, editor, session, range) { + var selected = session.doc.getTextRange(range); + if (!range.isMultiLine() && selected == '[') { + initContext(editor); + var line = session.doc.getLine(range.start.row); + var rightChar = line.substring(range.start.column + 1, range.start.column + 2); + if (rightChar == ']') { + range.end.column++; + return range; + } + } + }); + + this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { + if (text == '"' || text == "'") { + initContext(editor); + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { + return getWrapped(selection, selected, quote, quote); + } else if (!selected) { + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + var leftChar = line.substring(cursor.column-1, cursor.column); + var rightChar = line.substring(cursor.column, cursor.column + 1); + + var token = session.getTokenAt(cursor.row, cursor.column); + var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); + if (leftChar == "\\" && token && /escape/.test(token.type)) + return null; + + var stringBefore = token && /string|escape/.test(token.type); + var stringAfter = !rightToken || /string|escape/.test(rightToken.type); + + var pair; + if (rightChar == quote) { + pair = stringBefore !== stringAfter; + } else { + if (stringBefore && !stringAfter) + return null; // wrap string with different quote + if (stringBefore && stringAfter) + return null; // do not pair quotes inside strings + var wordRe = session.$mode.tokenRe; + wordRe.lastIndex = 0; + var isWordBefore = wordRe.test(leftChar); + wordRe.lastIndex = 0; + var isWordAfter = wordRe.test(leftChar); + if (isWordBefore || isWordAfter) + return null; // before or after alphanumeric + if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) + return null; // there is rightChar and it isn't closing + pair = true; + } + return { + text: pair ? quote + quote : "", + selection: [1,1] + }; + } + } + }); + + this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { + var selected = session.doc.getTextRange(range); + if (!range.isMultiLine() && (selected == '"' || selected == "'")) { + initContext(editor); + var line = session.doc.getLine(range.start.row); + var rightChar = line.substring(range.start.column + 1, range.start.column + 2); + if (rightChar == selected) { + range.end.column++; + return range; + } + } + }); + +}; + + +CstyleBehaviour.isSaneInsertion = function(editor, session) { + var cursor = editor.getCursorPosition(); + var iterator = new TokenIterator(session, cursor.row, cursor.column); + if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { + var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); + if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) + return false; + } + iterator.stepForward(); + return iterator.getCurrentTokenRow() !== cursor.row || + this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); +}; + +CstyleBehaviour.$matchTokenType = function(token, types) { + return types.indexOf(token.type || token) > -1; +}; + +CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) + context.autoInsertedBrackets = 0; + context.autoInsertedRow = cursor.row; + context.autoInsertedLineEnd = bracket + line.substr(cursor.column); + context.autoInsertedBrackets++; +}; + +CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + if (!this.isMaybeInsertedClosing(cursor, line)) + context.maybeInsertedBrackets = 0; + context.maybeInsertedRow = cursor.row; + context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; + context.maybeInsertedLineEnd = line.substr(cursor.column); + context.maybeInsertedBrackets++; +}; + +CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { + return context.autoInsertedBrackets > 0 && + cursor.row === context.autoInsertedRow && + bracket === context.autoInsertedLineEnd[0] && + line.substr(cursor.column) === context.autoInsertedLineEnd; +}; + +CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { + return context.maybeInsertedBrackets > 0 && + cursor.row === context.maybeInsertedRow && + line.substr(cursor.column) === context.maybeInsertedLineEnd && + line.substr(0, cursor.column) == context.maybeInsertedLineStart; +}; + +CstyleBehaviour.popAutoInsertedClosing = function() { + context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); + context.autoInsertedBrackets--; +}; + +CstyleBehaviour.clearMaybeInsertedClosing = function() { + if (context) { + context.maybeInsertedBrackets = 0; + context.maybeInsertedRow = -1; + } +}; + + + +oop.inherits(CstyleBehaviour, Behaviour); + +exports.CstyleBehaviour = CstyleBehaviour; +}); + +ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("../../lib/oop"); +var Range = acequire("../../range").Range; +var BaseFoldMode = acequire("./fold_mode").FoldMode; + +var FoldMode = exports.FoldMode = function(commentRegex) { + if (commentRegex) { + this.foldingStartMarker = new RegExp( + this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) + ); + this.foldingStopMarker = new RegExp( + this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) + ); + } +}; +oop.inherits(FoldMode, BaseFoldMode); + +(function() { + + this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; + this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; + this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; + this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; + this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/; + this._getFoldWidgetBase = this.getFoldWidget; + this.getFoldWidget = function(session, foldStyle, row) { + var line = session.getLine(row); + + if (this.singleLineBlockCommentRe.test(line)) { + if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) + return ""; + } + + var fw = this._getFoldWidgetBase(session, foldStyle, row); + + if (!fw && this.startRegionRe.test(line)) + return "start"; // lineCommentRegionStart + + return fw; + }; + + this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { + var line = session.getLine(row); + + if (this.startRegionRe.test(line)) + return this.getCommentRegionBlock(session, line, row); + + var match = line.match(this.foldingStartMarker); + if (match) { + var i = match.index; + + if (match[1]) + return this.openingBracketBlock(session, match[1], row, i); + + var range = session.getCommentFoldRange(row, i + match[0].length, 1); + + if (range && !range.isMultiLine()) { + if (forceMultiline) { + range = this.getSectionRange(session, row); + } else if (foldStyle != "all") + range = null; + } + + return range; + } + + if (foldStyle === "markbegin") + return; + + var match = line.match(this.foldingStopMarker); + if (match) { + var i = match.index + match[0].length; + + if (match[1]) + return this.closingBracketBlock(session, match[1], row, i); + + return session.getCommentFoldRange(row, i, -1); + } + }; + + this.getSectionRange = function(session, row) { + var line = session.getLine(row); + var startIndent = line.search(/\S/); + var startRow = row; + var startColumn = line.length; + row = row + 1; + var endRow = row; + var maxRow = session.getLength(); + while (++row < maxRow) { + line = session.getLine(row); + var indent = line.search(/\S/); + if (indent === -1) + continue; + if (startIndent > indent) + break; + var subRange = this.getFoldWidgetRange(session, "all", row); + + if (subRange) { + if (subRange.start.row <= startRow) { + break; + } else if (subRange.isMultiLine()) { + row = subRange.end.row; + } else if (startIndent == indent) { + break; + } + } + endRow = row; + } + + return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); + }; + this.getCommentRegionBlock = function(session, line, row) { + var startColumn = line.search(/\s*$/); + var maxRow = session.getLength(); + var startRow = row; + + var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/; + var depth = 1; + while (++row < maxRow) { + line = session.getLine(row); + var m = re.exec(line); + if (!m) continue; + if (m[1]) depth--; + else depth++; + + if (!depth) break; + } + + var endRow = row; + if (endRow > startRow) { + return new Range(startRow, startColumn, endRow, line.length); + } + }; + +}).call(FoldMode.prototype); + +}); + +ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("../lib/oop"); +var TextMode = acequire("./text").Mode; +var JavaScriptHighlightRules = acequire("./javascript_highlight_rules").JavaScriptHighlightRules; +var MatchingBraceOutdent = acequire("./matching_brace_outdent").MatchingBraceOutdent; +var Range = acequire("../range").Range; +var WorkerClient = acequire("../worker/worker_client").WorkerClient; +var CstyleBehaviour = acequire("./behaviour/cstyle").CstyleBehaviour; +var CStyleFoldMode = acequire("./folding/cstyle").FoldMode; + +var Mode = function() { + this.HighlightRules = JavaScriptHighlightRules; + + this.$outdent = new MatchingBraceOutdent(); + this.$behaviour = new CstyleBehaviour(); + this.foldingRules = new CStyleFoldMode(); +}; +oop.inherits(Mode, TextMode); + +(function() { + + this.lineCommentStart = "//"; + this.blockComment = {start: "/*", end: "*/"}; + + this.getNextLineIndent = function(state, line, tab) { + var indent = this.$getIndent(line); + + var tokenizedLine = this.getTokenizer().getLineTokens(line, state); + var tokens = tokenizedLine.tokens; + var endState = tokenizedLine.state; + + if (tokens.length && tokens[tokens.length-1].type == "comment") { + return indent; + } + + if (state == "start" || state == "no_regex") { + var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); + if (match) { + indent += tab; + } + } else if (state == "doc-start") { + if (endState == "start" || endState == "no_regex") { + return ""; + } + var match = line.match(/^\s*(\/?)\*/); + if (match) { + if (match[1]) { + indent += " "; + } + indent += "* "; + } + } + + return indent; + }; + + this.checkOutdent = function(state, line, input) { + return this.$outdent.checkOutdent(line, input); + }; + + this.autoOutdent = function(state, doc, row) { + this.$outdent.autoOutdent(doc, row); + }; + + this.createWorker = function(session) { + var worker = new WorkerClient(["ace"], require("../worker/javascript"), "JavaScriptWorker"); + worker.attachToDocument(session.getDocument()); + + worker.on("annotate", function(results) { + session.setAnnotations(results.data); + }); + + worker.on("terminate", function() { + session.clearAnnotations(); + }); + + return worker; + }; + + this.$id = "ace/mode/javascript"; +}).call(Mode.prototype); + +exports.Mode = Mode; +}); + +},{"../worker/javascript":74}],71:[function(require,module,exports){ +ace.define("ace/mode/json_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("../lib/oop"); +var TextHighlightRules = acequire("./text_highlight_rules").TextHighlightRules; + +var JsonHighlightRules = function() { + this.$rules = { + "start" : [ + { + token : "variable", // single line + regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]\\s*(?=:)' + }, { + token : "string", // single line + regex : '"', + next : "string" + }, { + token : "constant.numeric", // hex + regex : "0[xX][0-9a-fA-F]+\\b" + }, { + token : "constant.numeric", // float + regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" + }, { + token : "constant.language.boolean", + regex : "(?:true|false)\\b" + }, { + token : "invalid.illegal", // single quoted strings are not allowed + regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" + }, { + token : "invalid.illegal", // comments are not allowed + regex : "\\/\\/.*$" + }, { + token : "paren.lparen", + regex : "[[({]" + }, { + token : "paren.rparen", + regex : "[\\])}]" + }, { + token : "text", + regex : "\\s+" + } + ], + "string" : [ + { + token : "constant.language.escape", + regex : /\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|["\\\/bfnrt])/ + }, { + token : "string", + regex : '[^"\\\\]+' + }, { + token : "string", + regex : '"', + next : "start" + }, { + token : "string", + regex : "", + next : "start" + } + ] + }; + +}; + +oop.inherits(JsonHighlightRules, TextHighlightRules); + +exports.JsonHighlightRules = JsonHighlightRules; +}); + +ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(acequire, exports, module) { +"use strict"; + +var Range = acequire("../range").Range; + +var MatchingBraceOutdent = function() {}; + +(function() { + + this.checkOutdent = function(line, input) { + if (! /^\s+$/.test(line)) + return false; + + return /^\s*\}/.test(input); + }; + + this.autoOutdent = function(doc, row) { + var line = doc.getLine(row); + var match = line.match(/^(\s*\})/); + + if (!match) return 0; + + var column = match[1].length; + var openBracePos = doc.findMatchingBracket({row: row, column: column}); + + if (!openBracePos || openBracePos.row == row) return 0; + + var indent = this.$getIndent(doc.getLine(openBracePos.row)); + doc.replace(new Range(row, 0, row, column-1), indent); + }; + + this.$getIndent = function(line) { + return line.match(/^\s*/)[0]; + }; + +}).call(MatchingBraceOutdent.prototype); + +exports.MatchingBraceOutdent = MatchingBraceOutdent; +}); + +ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("../../lib/oop"); +var Behaviour = acequire("../behaviour").Behaviour; +var TokenIterator = acequire("../../token_iterator").TokenIterator; +var lang = acequire("../../lib/lang"); + +var SAFE_INSERT_IN_TOKENS = + ["text", "paren.rparen", "punctuation.operator"]; +var SAFE_INSERT_BEFORE_TOKENS = + ["text", "paren.rparen", "punctuation.operator", "comment"]; + +var context; +var contextCache = {}; +var initContext = function(editor) { + var id = -1; + if (editor.multiSelect) { + id = editor.selection.index; + if (contextCache.rangeCount != editor.multiSelect.rangeCount) + contextCache = {rangeCount: editor.multiSelect.rangeCount}; + } + if (contextCache[id]) + return context = contextCache[id]; + context = contextCache[id] = { + autoInsertedBrackets: 0, + autoInsertedRow: -1, + autoInsertedLineEnd: "", + maybeInsertedBrackets: 0, + maybeInsertedRow: -1, + maybeInsertedLineStart: "", + maybeInsertedLineEnd: "" + }; +}; + +var getWrapped = function(selection, selected, opening, closing) { + var rowDiff = selection.end.row - selection.start.row; + return { + text: opening + selected + closing, + selection: [ + 0, + selection.start.column + 1, + rowDiff, + selection.end.column + (rowDiff ? 0 : 1) + ] + }; +}; + +var CstyleBehaviour = function() { + this.add("braces", "insertion", function(state, action, editor, session, text) { + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + if (text == '{') { + initContext(editor); + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { + return getWrapped(selection, selected, '{', '}'); + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { + if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { + CstyleBehaviour.recordAutoInsert(editor, session, "}"); + return { + text: '{}', + selection: [1, 1] + }; + } else { + CstyleBehaviour.recordMaybeInsert(editor, session, "{"); + return { + text: '{', + selection: [1, 1] + }; + } + } + } else if (text == '}') { + initContext(editor); + var rightChar = line.substring(cursor.column, cursor.column + 1); + if (rightChar == '}') { + var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { + CstyleBehaviour.popAutoInsertedClosing(); + return { + text: '', + selection: [1, 1] + }; + } + } + } else if (text == "\n" || text == "\r\n") { + initContext(editor); + var closing = ""; + if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { + closing = lang.stringRepeat("}", context.maybeInsertedBrackets); + CstyleBehaviour.clearMaybeInsertedClosing(); + } + var rightChar = line.substring(cursor.column, cursor.column + 1); + if (rightChar === '}') { + var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); + if (!openBracePos) + return null; + var next_indent = this.$getIndent(session.getLine(openBracePos.row)); + } else if (closing) { + var next_indent = this.$getIndent(line); + } else { + CstyleBehaviour.clearMaybeInsertedClosing(); + return; + } + var indent = next_indent + session.getTabString(); + + return { + text: '\n' + indent + '\n' + next_indent + closing, + selection: [1, indent.length, 1, indent.length] + }; + } else { + CstyleBehaviour.clearMaybeInsertedClosing(); + } + }); + + this.add("braces", "deletion", function(state, action, editor, session, range) { + var selected = session.doc.getTextRange(range); + if (!range.isMultiLine() && selected == '{') { + initContext(editor); + var line = session.doc.getLine(range.start.row); + var rightChar = line.substring(range.end.column, range.end.column + 1); + if (rightChar == '}') { + range.end.column++; + return range; + } else { + context.maybeInsertedBrackets--; + } + } + }); + + this.add("parens", "insertion", function(state, action, editor, session, text) { + if (text == '(') { + initContext(editor); + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "" && editor.getWrapBehavioursEnabled()) { + return getWrapped(selection, selected, '(', ')'); + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { + CstyleBehaviour.recordAutoInsert(editor, session, ")"); + return { + text: '()', + selection: [1, 1] + }; + } + } else if (text == ')') { + initContext(editor); + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + var rightChar = line.substring(cursor.column, cursor.column + 1); + if (rightChar == ')') { + var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { + CstyleBehaviour.popAutoInsertedClosing(); + return { + text: '', + selection: [1, 1] + }; + } + } + } + }); + + this.add("parens", "deletion", function(state, action, editor, session, range) { + var selected = session.doc.getTextRange(range); + if (!range.isMultiLine() && selected == '(') { + initContext(editor); + var line = session.doc.getLine(range.start.row); + var rightChar = line.substring(range.start.column + 1, range.start.column + 2); + if (rightChar == ')') { + range.end.column++; + return range; + } + } + }); + + this.add("brackets", "insertion", function(state, action, editor, session, text) { + if (text == '[') { + initContext(editor); + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "" && editor.getWrapBehavioursEnabled()) { + return getWrapped(selection, selected, '[', ']'); + } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { + CstyleBehaviour.recordAutoInsert(editor, session, "]"); + return { + text: '[]', + selection: [1, 1] + }; + } + } else if (text == ']') { + initContext(editor); + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + var rightChar = line.substring(cursor.column, cursor.column + 1); + if (rightChar == ']') { + var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); + if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { + CstyleBehaviour.popAutoInsertedClosing(); + return { + text: '', + selection: [1, 1] + }; + } + } + } + }); + + this.add("brackets", "deletion", function(state, action, editor, session, range) { + var selected = session.doc.getTextRange(range); + if (!range.isMultiLine() && selected == '[') { + initContext(editor); + var line = session.doc.getLine(range.start.row); + var rightChar = line.substring(range.start.column + 1, range.start.column + 2); + if (rightChar == ']') { + range.end.column++; + return range; + } + } + }); + + this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { + if (text == '"' || text == "'") { + initContext(editor); + var quote = text; + var selection = editor.getSelectionRange(); + var selected = session.doc.getTextRange(selection); + if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { + return getWrapped(selection, selected, quote, quote); + } else if (!selected) { + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + var leftChar = line.substring(cursor.column-1, cursor.column); + var rightChar = line.substring(cursor.column, cursor.column + 1); + + var token = session.getTokenAt(cursor.row, cursor.column); + var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); + if (leftChar == "\\" && token && /escape/.test(token.type)) + return null; + + var stringBefore = token && /string|escape/.test(token.type); + var stringAfter = !rightToken || /string|escape/.test(rightToken.type); + + var pair; + if (rightChar == quote) { + pair = stringBefore !== stringAfter; + } else { + if (stringBefore && !stringAfter) + return null; // wrap string with different quote + if (stringBefore && stringAfter) + return null; // do not pair quotes inside strings + var wordRe = session.$mode.tokenRe; + wordRe.lastIndex = 0; + var isWordBefore = wordRe.test(leftChar); + wordRe.lastIndex = 0; + var isWordAfter = wordRe.test(leftChar); + if (isWordBefore || isWordAfter) + return null; // before or after alphanumeric + if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) + return null; // there is rightChar and it isn't closing + pair = true; + } + return { + text: pair ? quote + quote : "", + selection: [1,1] + }; + } + } + }); + + this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { + var selected = session.doc.getTextRange(range); + if (!range.isMultiLine() && (selected == '"' || selected == "'")) { + initContext(editor); + var line = session.doc.getLine(range.start.row); + var rightChar = line.substring(range.start.column + 1, range.start.column + 2); + if (rightChar == selected) { + range.end.column++; + return range; + } + } + }); + +}; + + +CstyleBehaviour.isSaneInsertion = function(editor, session) { + var cursor = editor.getCursorPosition(); + var iterator = new TokenIterator(session, cursor.row, cursor.column); + if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { + var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); + if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) + return false; + } + iterator.stepForward(); + return iterator.getCurrentTokenRow() !== cursor.row || + this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); +}; + +CstyleBehaviour.$matchTokenType = function(token, types) { + return types.indexOf(token.type || token) > -1; +}; + +CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) + context.autoInsertedBrackets = 0; + context.autoInsertedRow = cursor.row; + context.autoInsertedLineEnd = bracket + line.substr(cursor.column); + context.autoInsertedBrackets++; +}; + +CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { + var cursor = editor.getCursorPosition(); + var line = session.doc.getLine(cursor.row); + if (!this.isMaybeInsertedClosing(cursor, line)) + context.maybeInsertedBrackets = 0; + context.maybeInsertedRow = cursor.row; + context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; + context.maybeInsertedLineEnd = line.substr(cursor.column); + context.maybeInsertedBrackets++; +}; + +CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { + return context.autoInsertedBrackets > 0 && + cursor.row === context.autoInsertedRow && + bracket === context.autoInsertedLineEnd[0] && + line.substr(cursor.column) === context.autoInsertedLineEnd; +}; + +CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { + return context.maybeInsertedBrackets > 0 && + cursor.row === context.maybeInsertedRow && + line.substr(cursor.column) === context.maybeInsertedLineEnd && + line.substr(0, cursor.column) == context.maybeInsertedLineStart; +}; + +CstyleBehaviour.popAutoInsertedClosing = function() { + context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); + context.autoInsertedBrackets--; +}; + +CstyleBehaviour.clearMaybeInsertedClosing = function() { + if (context) { + context.maybeInsertedBrackets = 0; + context.maybeInsertedRow = -1; + } +}; + + + +oop.inherits(CstyleBehaviour, Behaviour); + +exports.CstyleBehaviour = CstyleBehaviour; +}); + +ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("../../lib/oop"); +var Range = acequire("../../range").Range; +var BaseFoldMode = acequire("./fold_mode").FoldMode; + +var FoldMode = exports.FoldMode = function(commentRegex) { + if (commentRegex) { + this.foldingStartMarker = new RegExp( + this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) + ); + this.foldingStopMarker = new RegExp( + this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) + ); + } +}; +oop.inherits(FoldMode, BaseFoldMode); + +(function() { + + this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; + this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; + this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; + this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; + this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/; + this._getFoldWidgetBase = this.getFoldWidget; + this.getFoldWidget = function(session, foldStyle, row) { + var line = session.getLine(row); + + if (this.singleLineBlockCommentRe.test(line)) { + if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) + return ""; + } + + var fw = this._getFoldWidgetBase(session, foldStyle, row); + + if (!fw && this.startRegionRe.test(line)) + return "start"; // lineCommentRegionStart + + return fw; + }; + + this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { + var line = session.getLine(row); + + if (this.startRegionRe.test(line)) + return this.getCommentRegionBlock(session, line, row); + + var match = line.match(this.foldingStartMarker); + if (match) { + var i = match.index; + + if (match[1]) + return this.openingBracketBlock(session, match[1], row, i); + + var range = session.getCommentFoldRange(row, i + match[0].length, 1); + + if (range && !range.isMultiLine()) { + if (forceMultiline) { + range = this.getSectionRange(session, row); + } else if (foldStyle != "all") + range = null; + } + + return range; + } + + if (foldStyle === "markbegin") + return; + + var match = line.match(this.foldingStopMarker); + if (match) { + var i = match.index + match[0].length; + + if (match[1]) + return this.closingBracketBlock(session, match[1], row, i); + + return session.getCommentFoldRange(row, i, -1); + } + }; + + this.getSectionRange = function(session, row) { + var line = session.getLine(row); + var startIndent = line.search(/\S/); + var startRow = row; + var startColumn = line.length; + row = row + 1; + var endRow = row; + var maxRow = session.getLength(); + while (++row < maxRow) { + line = session.getLine(row); + var indent = line.search(/\S/); + if (indent === -1) + continue; + if (startIndent > indent) + break; + var subRange = this.getFoldWidgetRange(session, "all", row); + + if (subRange) { + if (subRange.start.row <= startRow) { + break; + } else if (subRange.isMultiLine()) { + row = subRange.end.row; + } else if (startIndent == indent) { + break; + } + } + endRow = row; + } + + return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); + }; + this.getCommentRegionBlock = function(session, line, row) { + var startColumn = line.search(/\s*$/); + var maxRow = session.getLength(); + var startRow = row; + + var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/; + var depth = 1; + while (++row < maxRow) { + line = session.getLine(row); + var m = re.exec(line); + if (!m) continue; + if (m[1]) depth--; + else depth++; + + if (!depth) break; + } + + var endRow = row; + if (endRow > startRow) { + return new Range(startRow, startColumn, endRow, line.length); + } + }; + +}).call(FoldMode.prototype); + +}); + +ace.define("ace/mode/json",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/json_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle","ace/worker/worker_client"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("../lib/oop"); +var TextMode = acequire("./text").Mode; +var HighlightRules = acequire("./json_highlight_rules").JsonHighlightRules; +var MatchingBraceOutdent = acequire("./matching_brace_outdent").MatchingBraceOutdent; +var CstyleBehaviour = acequire("./behaviour/cstyle").CstyleBehaviour; +var CStyleFoldMode = acequire("./folding/cstyle").FoldMode; +var WorkerClient = acequire("../worker/worker_client").WorkerClient; + +var Mode = function() { + this.HighlightRules = HighlightRules; + this.$outdent = new MatchingBraceOutdent(); + this.$behaviour = new CstyleBehaviour(); + this.foldingRules = new CStyleFoldMode(); +}; +oop.inherits(Mode, TextMode); + +(function() { + + this.getNextLineIndent = function(state, line, tab) { + var indent = this.$getIndent(line); + + if (state == "start") { + var match = line.match(/^.*[\{\(\[]\s*$/); + if (match) { + indent += tab; + } + } + + return indent; + }; + + this.checkOutdent = function(state, line, input) { + return this.$outdent.checkOutdent(line, input); + }; + + this.autoOutdent = function(state, doc, row) { + this.$outdent.autoOutdent(doc, row); + }; + + this.createWorker = function(session) { + var worker = new WorkerClient(["ace"], require("../worker/json"), "JsonWorker"); + worker.attachToDocument(session.getDocument()); + + worker.on("annotate", function(e) { + session.setAnnotations(e.data); + }); + + worker.on("terminate", function() { + session.clearAnnotations(); + }); + + return worker; + }; + + + this.$id = "ace/mode/json"; +}).call(Mode.prototype); + +exports.Mode = Mode; +}); + +},{"../worker/json":75}],72:[function(require,module,exports){ +ace.define("ace/mode/python_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("../lib/oop"); +var TextHighlightRules = acequire("./text_highlight_rules").TextHighlightRules; + +var PythonHighlightRules = function() { + + var keywords = ( + "and|as|assert|break|class|continue|def|del|elif|else|except|exec|" + + "finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|" + + "raise|return|try|while|with|yield" + ); + + var builtinConstants = ( + "True|False|None|NotImplemented|Ellipsis|__debug__" + ); + + var builtinFunctions = ( + "abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|" + + "eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|" + + "binfile|iter|property|tuple|bool|filter|len|range|type|bytearray|" + + "float|list|raw_input|unichr|callable|format|locals|reduce|unicode|" + + "chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|" + + "cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|" + + "__import__|complex|hash|min|set|apply|delattr|help|next|setattr|" + + "buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern" + ); + var keywordMapper = this.createKeywordMapper({ + "invalid.deprecated": "debugger", + "support.function": builtinFunctions, + "constant.language": builtinConstants, + "keyword": keywords + }, "identifier"); + + var strPre = "(?:r|u|ur|R|U|UR|Ur|uR)?"; + + var decimalInteger = "(?:(?:[1-9]\\d*)|(?:0))"; + var octInteger = "(?:0[oO]?[0-7]+)"; + var hexInteger = "(?:0[xX][\\dA-Fa-f]+)"; + var binInteger = "(?:0[bB][01]+)"; + var integer = "(?:" + decimalInteger + "|" + octInteger + "|" + hexInteger + "|" + binInteger + ")"; + + var exponent = "(?:[eE][+-]?\\d+)"; + var fraction = "(?:\\.\\d+)"; + var intPart = "(?:\\d+)"; + var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))"; + var exponentFloat = "(?:(?:" + pointFloat + "|" + intPart + ")" + exponent + ")"; + var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")"; + + var stringEscape = "\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\abfnrtv'\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})"; + + this.$rules = { + "start" : [ { + token : "comment", + regex : "#.*$" + }, { + token : "string", // multi line """ string start + regex : strPre + '"{3}', + next : "qqstring3" + }, { + token : "string", // " string + regex : strPre + '"(?=.)', + next : "qqstring" + }, { + token : "string", // multi line ''' string start + regex : strPre + "'{3}", + next : "qstring3" + }, { + token : "string", // ' string + regex : strPre + "'(?=.)", + next : "qstring" + }, { + token : "constant.numeric", // imaginary + regex : "(?:" + floatNumber + "|\\d+)[jJ]\\b" + }, { + token : "constant.numeric", // float + regex : floatNumber + }, { + token : "constant.numeric", // long integer + regex : integer + "[lL]\\b" + }, { + token : "constant.numeric", // integer + regex : integer + "\\b" + }, { + token : keywordMapper, + regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" + }, { + token : "keyword.operator", + regex : "\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|%|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|=" + }, { + token : "paren.lparen", + regex : "[\\[\\(\\{]" + }, { + token : "paren.rparen", + regex : "[\\]\\)\\}]" + }, { + token : "text", + regex : "\\s+" + } ], + "qqstring3" : [ { + token : "constant.language.escape", + regex : stringEscape + }, { + token : "string", // multi line """ string end + regex : '"{3}', + next : "start" + }, { + defaultToken : "string" + } ], + "qstring3" : [ { + token : "constant.language.escape", + regex : stringEscape + }, { + token : "string", // multi line ''' string end + regex : "'{3}", + next : "start" + }, { + defaultToken : "string" + } ], + "qqstring" : [{ + token : "constant.language.escape", + regex : stringEscape + }, { + token : "string", + regex : "\\\\$", + next : "qqstring" + }, { + token : "string", + regex : '"|$', + next : "start" + }, { + defaultToken: "string" + }], + "qstring" : [{ + token : "constant.language.escape", + regex : stringEscape + }, { + token : "string", + regex : "\\\\$", + next : "qstring" + }, { + token : "string", + regex : "'|$", + next : "start" + }, { + defaultToken: "string" + }] + }; +}; + +oop.inherits(PythonHighlightRules, TextHighlightRules); + +exports.PythonHighlightRules = PythonHighlightRules; +}); + +ace.define("ace/mode/folding/pythonic",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("../../lib/oop"); +var BaseFoldMode = acequire("./fold_mode").FoldMode; + +var FoldMode = exports.FoldMode = function(markers) { + this.foldingStartMarker = new RegExp("([\\[{])(?:\\s*)$|(" + markers + ")(?:\\s*)(?:#.*)?$"); +}; +oop.inherits(FoldMode, BaseFoldMode); + +(function() { + + this.getFoldWidgetRange = function(session, foldStyle, row) { + var line = session.getLine(row); + var match = line.match(this.foldingStartMarker); + if (match) { + if (match[1]) + return this.openingBracketBlock(session, match[1], row, match.index); + if (match[2]) + return this.indentationBlock(session, row, match.index + match[2].length); + return this.indentationBlock(session, row); + } + } + +}).call(FoldMode.prototype); + +}); + +ace.define("ace/mode/python",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/python_highlight_rules","ace/mode/folding/pythonic","ace/range"], function(acequire, exports, module) { +"use strict"; + +var oop = acequire("../lib/oop"); +var TextMode = acequire("./text").Mode; +var PythonHighlightRules = acequire("./python_highlight_rules").PythonHighlightRules; +var PythonFoldMode = acequire("./folding/pythonic").FoldMode; +var Range = acequire("../range").Range; + +var Mode = function() { + this.HighlightRules = PythonHighlightRules; + this.foldingRules = new PythonFoldMode("\\:"); +}; +oop.inherits(Mode, TextMode); + +(function() { + + this.lineCommentStart = "#"; + + this.getNextLineIndent = function(state, line, tab) { + var indent = this.$getIndent(line); + + var tokenizedLine = this.getTokenizer().getLineTokens(line, state); + var tokens = tokenizedLine.tokens; + + if (tokens.length && tokens[tokens.length-1].type == "comment") { + return indent; + } + + if (state == "start") { + var match = line.match(/^.*[\{\(\[\:]\s*$/); + if (match) { + indent += tab; + } + } + + return indent; + }; + + var outdents = { + "pass": 1, + "return": 1, + "raise": 1, + "break": 1, + "continue": 1 + }; + + this.checkOutdent = function(state, line, input) { + if (input !== "\r\n" && input !== "\r" && input !== "\n") + return false; + + var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens; + + if (!tokens) + return false; + do { + var last = tokens.pop(); + } while (last && (last.type == "comment" || (last.type == "text" && last.value.match(/^\s+$/)))); + + if (!last) + return false; + + return (last.type == "keyword" && outdents[last.value]); + }; + + this.autoOutdent = function(state, doc, row) { + + row += 1; + var indent = this.$getIndent(doc.getLine(row)); + var tab = doc.getTabString(); + if (indent.slice(-tab.length) == tab) + doc.remove(new Range(row, indent.length-tab.length, row, indent.length)); + }; + + this.$id = "ace/mode/python"; +}).call(Mode.prototype); + +exports.Mode = Mode; +}); + +},{}],73:[function(require,module,exports){ +ace.define("ace/theme/tomorrow_night_blue",["require","exports","module","ace/lib/dom"], function(acequire, exports, module) { + +exports.isDark = true; +exports.cssClass = "ace-tomorrow-night-blue"; +exports.cssText = ".ace-tomorrow-night-blue .ace_gutter {\ +background: #00204b;\ +color: #7388b5\ +}\ +.ace-tomorrow-night-blue .ace_print-margin {\ +width: 1px;\ +background: #00204b\ +}\ +.ace-tomorrow-night-blue {\ +background-color: #002451;\ +color: #FFFFFF\ +}\ +.ace-tomorrow-night-blue .ace_constant.ace_other,\ +.ace-tomorrow-night-blue .ace_cursor {\ +color: #FFFFFF\ +}\ +.ace-tomorrow-night-blue .ace_marker-layer .ace_selection {\ +background: #003F8E\ +}\ +.ace-tomorrow-night-blue.ace_multiselect .ace_selection.ace_start {\ +box-shadow: 0 0 3px 0px #002451;\ +}\ +.ace-tomorrow-night-blue .ace_marker-layer .ace_step {\ +background: rgb(127, 111, 19)\ +}\ +.ace-tomorrow-night-blue .ace_marker-layer .ace_bracket {\ +margin: -1px 0 0 -1px;\ +border: 1px solid #404F7D\ +}\ +.ace-tomorrow-night-blue .ace_marker-layer .ace_active-line {\ +background: #00346E\ +}\ +.ace-tomorrow-night-blue .ace_gutter-active-line {\ +background-color: #022040\ +}\ +.ace-tomorrow-night-blue .ace_marker-layer .ace_selected-word {\ +border: 1px solid #003F8E\ +}\ +.ace-tomorrow-night-blue .ace_invisible {\ +color: #404F7D\ +}\ +.ace-tomorrow-night-blue .ace_keyword,\ +.ace-tomorrow-night-blue .ace_meta,\ +.ace-tomorrow-night-blue .ace_storage,\ +.ace-tomorrow-night-blue .ace_storage.ace_type,\ +.ace-tomorrow-night-blue .ace_support.ace_type {\ +color: #EBBBFF\ +}\ +.ace-tomorrow-night-blue .ace_keyword.ace_operator {\ +color: #99FFFF\ +}\ +.ace-tomorrow-night-blue .ace_constant.ace_character,\ +.ace-tomorrow-night-blue .ace_constant.ace_language,\ +.ace-tomorrow-night-blue .ace_constant.ace_numeric,\ +.ace-tomorrow-night-blue .ace_keyword.ace_other.ace_unit,\ +.ace-tomorrow-night-blue .ace_support.ace_constant,\ +.ace-tomorrow-night-blue .ace_variable.ace_parameter {\ +color: #FFC58F\ +}\ +.ace-tomorrow-night-blue .ace_invalid {\ +color: #FFFFFF;\ +background-color: #F99DA5\ +}\ +.ace-tomorrow-night-blue .ace_invalid.ace_deprecated {\ +color: #FFFFFF;\ +background-color: #EBBBFF\ +}\ +.ace-tomorrow-night-blue .ace_fold {\ +background-color: #BBDAFF;\ +border-color: #FFFFFF\ +}\ +.ace-tomorrow-night-blue .ace_entity.ace_name.ace_function,\ +.ace-tomorrow-night-blue .ace_support.ace_function,\ +.ace-tomorrow-night-blue .ace_variable {\ +color: #BBDAFF\ +}\ +.ace-tomorrow-night-blue .ace_support.ace_class,\ +.ace-tomorrow-night-blue .ace_support.ace_type {\ +color: #FFEEAD\ +}\ +.ace-tomorrow-night-blue .ace_heading,\ +.ace-tomorrow-night-blue .ace_markup.ace_heading,\ +.ace-tomorrow-night-blue .ace_string {\ +color: #D1F1A9\ +}\ +.ace-tomorrow-night-blue .ace_entity.ace_name.ace_tag,\ +.ace-tomorrow-night-blue .ace_entity.ace_other.ace_attribute-name,\ +.ace-tomorrow-night-blue .ace_meta.ace_tag,\ +.ace-tomorrow-night-blue .ace_string.ace_regexp,\ +.ace-tomorrow-night-blue .ace_variable {\ +color: #FF9DA4\ +}\ +.ace-tomorrow-night-blue .ace_comment {\ +color: #7285B7\ +}\ +.ace-tomorrow-night-blue .ace_indent-guide {\ +background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYJDzqfwPAANXAeNsiA+ZAAAAAElFTkSuQmCC) right repeat-y\ +}"; + +var dom = acequire("../lib/dom"); +dom.importCssString(exports.cssText, exports.cssClass); +}); + +},{}],74:[function(require,module,exports){ +module.exports.id = 'ace/mode/javascript_worker'; +module.exports.src = "\"no use strict\";(function(window){function resolveModuleId(id,paths){for(var testPath=id,tail=\"\";testPath;){var alias=paths[testPath];if(\"string\"==typeof alias)return alias+tail;if(alias)return alias.location.replace(/\\/*$/,\"/\")+(tail||alias.main||alias.name);if(alias===!1)return\"\";var i=testPath.lastIndexOf(\"/\");if(-1===i)break;tail=testPath.substr(i)+tail,testPath=testPath.slice(0,i)}return id}if(!(void 0!==window.window&&window.document||window.acequire&&window.define)){window.console||(window.console=function(){var msgs=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:msgs})},window.console.error=window.console.warn=window.console.log=window.console.trace=window.console),window.window=window,window.ace=window,window.onerror=function(message,file,line,col,err){postMessage({type:\"error\",data:{message:message,data:err.data,file:file,line:line,col:col,stack:err.stack}})},window.normalizeModule=function(parentId,moduleName){if(-1!==moduleName.indexOf(\"!\")){var chunks=moduleName.split(\"!\");return window.normalizeModule(parentId,chunks[0])+\"!\"+window.normalizeModule(parentId,chunks[1])}if(\".\"==moduleName.charAt(0)){var base=parentId.split(\"/\").slice(0,-1).join(\"/\");for(moduleName=(base?base+\"/\":\"\")+moduleName;-1!==moduleName.indexOf(\".\")&&previous!=moduleName;){var previous=moduleName;moduleName=moduleName.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return moduleName},window.acequire=function acequire(parentId,id){if(id||(id=parentId,parentId=null),!id.charAt)throw Error(\"worker.js acequire() accepts only (parentId, id) as arguments\");id=window.normalizeModule(parentId,id);var module=window.acequire.modules[id];if(module)return module.initialized||(module.initialized=!0,module.exports=module.factory().exports),module.exports;if(!window.acequire.tlns)return console.log(\"unable to load \"+id);var path=resolveModuleId(id,window.acequire.tlns);return\".js\"!=path.slice(-3)&&(path+=\".js\"),window.acequire.id=id,window.acequire.modules[id]={},importScripts(path),window.acequire(parentId,id)},window.acequire.modules={},window.acequire.tlns={},window.define=function(id,deps,factory){if(2==arguments.length?(factory=deps,\"string\"!=typeof id&&(deps=id,id=window.acequire.id)):1==arguments.length&&(factory=id,deps=[],id=window.acequire.id),\"function\"!=typeof factory)return window.acequire.modules[id]={exports:factory,initialized:!0},void 0;deps.length||(deps=[\"require\",\"exports\",\"module\"]);var req=function(childId){return window.acequire(id,childId)};window.acequire.modules[id]={exports:{},factory:function(){var module=this,returnExports=factory.apply(this,deps.map(function(dep){switch(dep){case\"require\":return req;case\"exports\":return module.exports;case\"module\":return module;default:return req(dep)}}));return returnExports&&(module.exports=returnExports),module}}},window.define.amd={},acequire.tlns={},window.initBaseUrls=function(topLevelNamespaces){for(var i in topLevelNamespaces)acequire.tlns[i]=topLevelNamespaces[i]},window.initSender=function(){var EventEmitter=window.acequire(\"ace/lib/event_emitter\").EventEmitter,oop=window.acequire(\"ace/lib/oop\"),Sender=function(){};return function(){oop.implement(this,EventEmitter),this.callback=function(data,callbackId){postMessage({type:\"call\",id:callbackId,data:data})},this.emit=function(name,data){postMessage({type:\"event\",name:name,data:data})}}.call(Sender.prototype),new Sender};var main=window.main=null,sender=window.sender=null;window.onmessage=function(e){var msg=e.data;if(msg.event&&sender)sender._signal(msg.event,msg.data);else if(msg.command)if(main[msg.command])main[msg.command].apply(main,msg.args);else{if(!window[msg.command])throw Error(\"Unknown command:\"+msg.command);window[msg.command].apply(window,msg.args)}else if(msg.init){window.initBaseUrls(msg.tlns),acequire(\"ace/lib/es5-shim\"),sender=window.sender=window.initSender();var clazz=acequire(msg.module)[msg.classname];main=window.main=new clazz(sender)}}}})(this),ace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";exports.inherits=function(ctor,superCtor){ctor.super_=superCtor,ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:!1,writable:!0,configurable:!0}})},exports.mixin=function(obj,mixin){for(var key in mixin)obj[key]=mixin[key];return obj},exports.implement=function(proto,mixin){exports.mixin(proto,mixin)}}),ace.define(\"ace/range\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";var comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},Range=function(startRow,startColumn,endRow,endColumn){this.start={row:startRow,column:startColumn},this.end={row:endRow,column:endColumn}};(function(){this.isEqual=function(range){return this.start.row===range.start.row&&this.end.row===range.end.row&&this.start.column===range.start.column&&this.end.column===range.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(row,column){return 0==this.compare(row,column)},this.compareRange=function(range){var cmp,end=range.end,start=range.start;return cmp=this.compare(end.row,end.column),1==cmp?(cmp=this.compare(start.row,start.column),1==cmp?2:0==cmp?1:0):-1==cmp?-2:(cmp=this.compare(start.row,start.column),-1==cmp?-1:1==cmp?42:0)},this.comparePoint=function(p){return this.compare(p.row,p.column)},this.containsRange=function(range){return 0==this.comparePoint(range.start)&&0==this.comparePoint(range.end)},this.intersects=function(range){var cmp=this.compareRange(range);return-1==cmp||0==cmp||1==cmp},this.isEnd=function(row,column){return this.end.row==row&&this.end.column==column},this.isStart=function(row,column){return this.start.row==row&&this.start.column==column},this.setStart=function(row,column){\"object\"==typeof row?(this.start.column=row.column,this.start.row=row.row):(this.start.row=row,this.start.column=column)},this.setEnd=function(row,column){\"object\"==typeof row?(this.end.column=row.column,this.end.row=row.row):(this.end.row=row,this.end.column=column)},this.inside=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)||this.isStart(row,column)?!1:!0:!1},this.insideStart=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)?!1:!0:!1},this.insideEnd=function(row,column){return 0==this.compare(row,column)?this.isStart(row,column)?!1:!0:!1},this.compare=function(row,column){return this.isMultiLine()||row!==this.start.row?this.start.row>row?-1:row>this.end.row?1:this.start.row===row?column>=this.start.column?0:-1:this.end.row===row?this.end.column>=column?0:1:0:this.start.column>column?-1:column>this.end.column?1:0},this.compareStart=function(row,column){return this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.compareEnd=function(row,column){return this.end.row==row&&this.end.column==column?1:this.compare(row,column)},this.compareInside=function(row,column){return this.end.row==row&&this.end.column==column?1:this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.clipRows=function(firstRow,lastRow){if(this.end.row>lastRow)var end={row:lastRow+1,column:0};else if(firstRow>this.end.row)var end={row:firstRow,column:0};if(this.start.row>lastRow)var start={row:lastRow+1,column:0};else if(firstRow>this.start.row)var start={row:firstRow,column:0};return Range.fromPoints(start||this.start,end||this.end)},this.extend=function(row,column){var cmp=this.compare(row,column);if(0==cmp)return this;if(-1==cmp)var start={row:row,column:column};else var end={row:row,column:column};return Range.fromPoints(start||this.start,end||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return Range.fromPoints(this.start,this.end)},this.collapseRows=function(){return 0==this.end.column?new Range(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new Range(this.start.row,0,this.end.row,0)},this.toScreenRange=function(session){var screenPosStart=session.documentToScreenPosition(this.start),screenPosEnd=session.documentToScreenPosition(this.end);return new Range(screenPosStart.row,screenPosStart.column,screenPosEnd.row,screenPosEnd.column)},this.moveBy=function(row,column){this.start.row+=row,this.start.column+=column,this.end.row+=row,this.end.column+=column}}).call(Range.prototype),Range.fromPoints=function(start,end){return new Range(start.row,start.column,end.row,end.column)},Range.comparePoints=comparePoints,Range.comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},exports.Range=Range}),ace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";exports.applyDelta=function(docLines,delta){var row=delta.start.row,startColumn=delta.start.column,line=docLines[row]||\"\";switch(delta.action){case\"insert\":var lines=delta.lines;if(1===lines.length)docLines[row]=line.substring(0,startColumn)+delta.lines[0]+line.substring(startColumn);else{var args=[row,1].concat(delta.lines);docLines.splice.apply(docLines,args),docLines[row]=line.substring(0,startColumn)+docLines[row],docLines[row+delta.lines.length-1]+=line.substring(startColumn)}break;case\"remove\":var endColumn=delta.end.column,endRow=delta.end.row;row===endRow?docLines[row]=line.substring(0,startColumn)+line.substring(endColumn):docLines.splice(row,endRow-row+1,line.substring(0,startColumn)+docLines[endRow].substring(endColumn))}}}),ace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";var EventEmitter={},stopPropagation=function(){this.propagationStopped=!0},preventDefault=function(){this.defaultPrevented=!0};EventEmitter._emit=EventEmitter._dispatchEvent=function(eventName,e){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var listeners=this._eventRegistry[eventName]||[],defaultHandler=this._defaultHandlers[eventName];if(listeners.length||defaultHandler){\"object\"==typeof e&&e||(e={}),e.type||(e.type=eventName),e.stopPropagation||(e.stopPropagation=stopPropagation),e.preventDefault||(e.preventDefault=preventDefault),listeners=listeners.slice();for(var i=0;listeners.length>i&&(listeners[i](e,this),!e.propagationStopped);i++);return defaultHandler&&!e.defaultPrevented?defaultHandler(e,this):void 0}},EventEmitter._signal=function(eventName,e){var listeners=(this._eventRegistry||{})[eventName];if(listeners){listeners=listeners.slice();for(var i=0;listeners.length>i;i++)listeners[i](e,this)}},EventEmitter.once=function(eventName,callback){var _self=this;callback&&this.addEventListener(eventName,function newCallback(){_self.removeEventListener(eventName,newCallback),callback.apply(null,arguments)})},EventEmitter.setDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers||(handlers=this._defaultHandlers={_disabled_:{}}),handlers[eventName]){var old=handlers[eventName],disabled=handlers._disabled_[eventName];disabled||(handlers._disabled_[eventName]=disabled=[]),disabled.push(old);var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}handlers[eventName]=callback},EventEmitter.removeDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers){var disabled=handlers._disabled_[eventName];if(handlers[eventName]==callback)handlers[eventName],disabled&&this.setDefaultHandler(eventName,disabled.pop());else if(disabled){var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}}},EventEmitter.on=EventEmitter.addEventListener=function(eventName,callback,capturing){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];return listeners||(listeners=this._eventRegistry[eventName]=[]),-1==listeners.indexOf(callback)&&listeners[capturing?\"unshift\":\"push\"](callback),callback},EventEmitter.off=EventEmitter.removeListener=EventEmitter.removeEventListener=function(eventName,callback){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];if(listeners){var index=listeners.indexOf(callback);-1!==index&&listeners.splice(index,1)}},EventEmitter.removeAllListeners=function(eventName){this._eventRegistry&&(this._eventRegistry[eventName]=[])},exports.EventEmitter=EventEmitter}),ace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(acequire,exports){\"use strict\";var oop=acequire(\"./lib/oop\"),EventEmitter=acequire(\"./lib/event_emitter\").EventEmitter,Anchor=exports.Anchor=function(doc,row,column){this.$onChange=this.onChange.bind(this),this.attach(doc),column===void 0?this.setPosition(row.row,row.column):this.setPosition(row,column)};(function(){function $pointsInOrder(point1,point2,equalPointsInOrder){var bColIsAfter=equalPointsInOrder?point1.column<=point2.column:point1.columnthis.row)){var point=$getTransformedPoint(delta,{row:this.row,column:this.column},this.$insertRight);this.setPosition(point.row,point.column,!0)}},this.setPosition=function(row,column,noClip){var pos;if(pos=noClip?{row:row,column:column}:this.$clipPositionToDocument(row,column),this.row!=pos.row||this.column!=pos.column){var old={row:this.row,column:this.column};this.row=pos.row,this.column=pos.column,this._signal(\"change\",{old:old,value:pos})}},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(doc){this.document=doc||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(row,column){var pos={};return row>=this.document.getLength()?(pos.row=Math.max(0,this.document.getLength()-1),pos.column=this.document.getLine(pos.row).length):0>row?(pos.row=0,pos.column=0):(pos.row=row,pos.column=Math.min(this.document.getLine(pos.row).length,Math.max(0,column))),0>column&&(pos.column=0),pos}}).call(Anchor.prototype)}),ace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"],function(acequire,exports){\"use strict\";var oop=acequire(\"./lib/oop\"),applyDelta=acequire(\"./apply_delta\").applyDelta,EventEmitter=acequire(\"./lib/event_emitter\").EventEmitter,Range=acequire(\"./range\").Range,Anchor=acequire(\"./anchor\").Anchor,Document=function(textOrLines){this.$lines=[\"\"],0===textOrLines.length?this.$lines=[\"\"]:Array.isArray(textOrLines)?this.insertMergedLines({row:0,column:0},textOrLines):this.insert({row:0,column:0},textOrLines)};(function(){oop.implement(this,EventEmitter),this.setValue=function(text){var len=this.getLength()-1;this.remove(new Range(0,0,len,this.getLine(len).length)),this.insert({row:0,column:0},text)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(row,column){return new Anchor(this,row,column)},this.$split=0===\"aaa\".split(/a/).length?function(text){return text.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:function(text){return text.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(text){var match=text.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=match?match[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(newLineMode){this.$newLineMode!==newLineMode&&(this.$newLineMode=newLineMode,this._signal(\"changeNewLineMode\"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(text){return\"\\r\\n\"==text||\"\\r\"==text||\"\\n\"==text},this.getLine=function(row){return this.$lines[row]||\"\"},this.getLines=function(firstRow,lastRow){return this.$lines.slice(firstRow,lastRow+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(range){return this.getLinesForRange(range).join(this.getNewLineCharacter())},this.getLinesForRange=function(range){var lines;if(range.start.row===range.end.row)lines=[this.getLine(range.start.row).substring(range.start.column,range.end.column)];else{lines=this.getLines(range.start.row,range.end.row),lines[0]=(lines[0]||\"\").substring(range.start.column);var l=lines.length-1;range.end.row-range.start.row==l&&(lines[l]=lines[l].substring(0,range.end.column))}return lines},this.insertLines=function(row,lines){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(row,lines)},this.removeLines=function(firstRow,lastRow){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(firstRow,lastRow)},this.insertNewLine=function(position){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(position,[\"\",\"\"])},this.insert=function(position,text){return 1>=this.getLength()&&this.$detectNewLine(text),this.insertMergedLines(position,this.$split(text))},this.insertInLine=function(position,text){var start=this.clippedPos(position.row,position.column),end=this.pos(position.row,position.column+text.length);return this.applyDelta({start:start,end:end,action:\"insert\",lines:[text]},!0),this.clonePos(end)},this.clippedPos=function(row,column){var length=this.getLength();void 0===row?row=length:0>row?row=0:row>=length&&(row=length-1,column=void 0);var line=this.getLine(row);return void 0==column&&(column=line.length),column=Math.min(Math.max(column,0),line.length),{row:row,column:column}},this.clonePos=function(pos){return{row:pos.row,column:pos.column}},this.pos=function(row,column){return{row:row,column:column}},this.$clipPosition=function(position){var length=this.getLength();return position.row>=length?(position.row=Math.max(0,length-1),position.column=this.getLine(length-1).length):(position.row=Math.max(0,position.row),position.column=Math.min(Math.max(position.column,0),this.getLine(position.row).length)),position},this.insertFullLines=function(row,lines){row=Math.min(Math.max(row,0),this.getLength());var column=0;this.getLength()>row?(lines=lines.concat([\"\"]),column=0):(lines=[\"\"].concat(lines),row--,column=this.$lines[row].length),this.insertMergedLines({row:row,column:column},lines)},this.insertMergedLines=function(position,lines){var start=this.clippedPos(position.row,position.column),end={row:start.row+lines.length-1,column:(1==lines.length?start.column:0)+lines[lines.length-1].length};return this.applyDelta({start:start,end:end,action:\"insert\",lines:lines}),this.clonePos(end)},this.remove=function(range){var start=this.clippedPos(range.start.row,range.start.column),end=this.clippedPos(range.end.row,range.end.column);return this.applyDelta({start:start,end:end,action:\"remove\",lines:this.getLinesForRange({start:start,end:end})}),this.clonePos(start)},this.removeInLine=function(row,startColumn,endColumn){var start=this.clippedPos(row,startColumn),end=this.clippedPos(row,endColumn);return this.applyDelta({start:start,end:end,action:\"remove\",lines:this.getLinesForRange({start:start,end:end})},!0),this.clonePos(start)},this.removeFullLines=function(firstRow,lastRow){firstRow=Math.min(Math.max(0,firstRow),this.getLength()-1),lastRow=Math.min(Math.max(0,lastRow),this.getLength()-1);var deleteFirstNewLine=lastRow==this.getLength()-1&&firstRow>0,deleteLastNewLine=this.getLength()-1>lastRow,startRow=deleteFirstNewLine?firstRow-1:firstRow,startCol=deleteFirstNewLine?this.getLine(startRow).length:0,endRow=deleteLastNewLine?lastRow+1:lastRow,endCol=deleteLastNewLine?0:this.getLine(endRow).length,range=new Range(startRow,startCol,endRow,endCol),deletedLines=this.$lines.slice(firstRow,lastRow+1);return this.applyDelta({start:range.start,end:range.end,action:\"remove\",lines:this.getLinesForRange(range)}),deletedLines},this.removeNewLine=function(row){this.getLength()-1>row&&row>=0&&this.applyDelta({start:this.pos(row,this.getLine(row).length),end:this.pos(row+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(range,text){if(range instanceof Range||(range=Range.fromPoints(range.start,range.end)),0===text.length&&range.isEmpty())return range.start;if(text==this.getTextRange(range))return range.end;this.remove(range);var end;return end=text?this.insert(range.start,text):range.start},this.applyDeltas=function(deltas){for(var i=0;deltas.length>i;i++)this.applyDelta(deltas[i])},this.revertDeltas=function(deltas){for(var i=deltas.length-1;i>=0;i--)this.revertDelta(deltas[i])},this.applyDelta=function(delta,doNotValidate){var isInsert=\"insert\"==delta.action;(isInsert?1>=delta.lines.length&&!delta.lines[0]:!Range.comparePoints(delta.start,delta.end))||(isInsert&&delta.lines.length>2e4&&this.$splitAndapplyLargeDelta(delta,2e4),applyDelta(this.$lines,delta,doNotValidate),this._signal(\"change\",delta))},this.$splitAndapplyLargeDelta=function(delta,MAX){for(var lines=delta.lines,l=lines.length,row=delta.start.row,column=delta.start.column,from=0,to=0;;){from=to,to+=MAX-1;var chunk=lines.slice(from,to);if(to>l){delta.lines=chunk,delta.start.row=row+from,delta.start.column=column;break}chunk.push(\"\"),this.applyDelta({start:this.pos(row+from,column),end:this.pos(row+to,column=0),action:delta.action,lines:chunk},!0)}},this.revertDelta=function(delta){this.applyDelta({start:this.clonePos(delta.start),end:this.clonePos(delta.end),action:\"insert\"==delta.action?\"remove\":\"insert\",lines:delta.lines.slice()})},this.indexToPosition=function(index,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,i=startRow||0,l=lines.length;l>i;i++)if(index-=lines[i].length+newlineLength,0>index)return{row:i,column:index+lines[i].length+newlineLength};return{row:l-1,column:lines[l-1].length}},this.positionToIndex=function(pos,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,index=0,row=Math.min(pos.row,lines.length),i=startRow||0;row>i;++i)index+=lines[i].length+newlineLength;return index+pos.column}}).call(Document.prototype),exports.Document=Document}),ace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";exports.last=function(a){return a[a.length-1]},exports.stringReverse=function(string){return string.split(\"\").reverse().join(\"\")},exports.stringRepeat=function(string,count){for(var result=\"\";count>0;)1&count&&(result+=string),(count>>=1)&&(string+=string);return result};var trimBeginRegexp=/^\\s\\s*/,trimEndRegexp=/\\s\\s*$/;exports.stringTrimLeft=function(string){return string.replace(trimBeginRegexp,\"\")},exports.stringTrimRight=function(string){return string.replace(trimEndRegexp,\"\")},exports.copyObject=function(obj){var copy={};for(var key in obj)copy[key]=obj[key];return copy},exports.copyArray=function(array){for(var copy=[],i=0,l=array.length;l>i;i++)copy[i]=array[i]&&\"object\"==typeof array[i]?this.copyObject(array[i]):array[i];return copy},exports.deepCopy=function deepCopy(obj){if(\"object\"!=typeof obj||!obj)return obj;var copy;if(Array.isArray(obj)){copy=[];for(var key=0;obj.length>key;key++)copy[key]=deepCopy(obj[key]);return copy}var cons=obj.constructor;if(cons===RegExp)return obj;copy=cons();for(var key in obj)copy[key]=deepCopy(obj[key]);return copy},exports.arrayToMap=function(arr){for(var map={},i=0;arr.length>i;i++)map[arr[i]]=1;return map},exports.createMap=function(props){var map=Object.create(null);for(var i in props)map[i]=props[i];return map},exports.arrayRemove=function(array,value){for(var i=0;array.length>=i;i++)value===array[i]&&array.splice(i,1)},exports.escapeRegExp=function(str){return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},exports.escapeHTML=function(str){return str.replace(/&/g,\"&\").replace(/\"/g,\""\").replace(/'/g,\"'\").replace(/i;i+=2){if(Array.isArray(data[i+1]))var d={action:\"insert\",start:data[i],lines:data[i+1]};else var d={action:\"remove\",start:data[i],end:data[i+1]};doc.applyDelta(d,!0)}return _self.$timeout?deferredUpdate.schedule(_self.$timeout):(_self.onUpdate(),void 0)})};(function(){this.$timeout=500,this.setTimeout=function(timeout){this.$timeout=timeout},this.setValue=function(value){this.doc.setValue(value),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(callbackId){this.sender.callback(this.doc.getValue(),callbackId)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(Mirror.prototype)}),ace.define(\"ace/mode/javascript/jshint\",[\"require\",\"exports\",\"module\"],function(acequire,exports,module){module.exports=function outer(modules,cache,entry){function newRequire(name,jumped){if(!cache[name]){if(!modules[name]){var currentRequire=\"function\"==typeof acequire&&acequire;if(!jumped&¤tRequire)return currentRequire(name,!0);if(previousRequire)return previousRequire(name,!0);var err=Error(\"Cannot find module '\"+name+\"'\");throw err.code=\"MODULE_NOT_FOUND\",err}var m=cache[name]={exports:{}};modules[name][0].call(m.exports,function(x){var id=modules[name][1][x];return newRequire(id?id:x)},m,m.exports,outer,modules,cache,entry)}return cache[name].exports}for(var previousRequire=\"function\"==typeof acequire&&acequire,i=0;entry.length>i;i++)newRequire(entry[i]);return newRequire(entry[0])}({\"/node_modules/browserify/node_modules/events/events.js\":[function(_dereq_,module){function EventEmitter(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function isFunction(arg){return\"function\"==typeof arg}function isNumber(arg){return\"number\"==typeof arg}function isObject(arg){return\"object\"==typeof arg&&null!==arg}function isUndefined(arg){return void 0===arg}module.exports=EventEmitter,EventEmitter.EventEmitter=EventEmitter,EventEmitter.prototype._events=void 0,EventEmitter.prototype._maxListeners=void 0,EventEmitter.defaultMaxListeners=10,EventEmitter.prototype.setMaxListeners=function(n){if(!isNumber(n)||0>n||isNaN(n))throw TypeError(\"n must be a positive number\");return this._maxListeners=n,this},EventEmitter.prototype.emit=function(type){var er,handler,len,args,i,listeners;if(this._events||(this._events={}),\"error\"===type&&(!this._events.error||isObject(this._events.error)&&!this._events.error.length)){if(er=arguments[1],er instanceof Error)throw er;throw TypeError('Uncaught, unspecified \"error\" event.')}if(handler=this._events[type],isUndefined(handler))return!1;if(isFunction(handler))switch(arguments.length){case 1:handler.call(this);break;case 2:handler.call(this,arguments[1]);break;case 3:handler.call(this,arguments[1],arguments[2]);break;default:for(len=arguments.length,args=Array(len-1),i=1;len>i;i++)args[i-1]=arguments[i];handler.apply(this,args)}else if(isObject(handler)){for(len=arguments.length,args=Array(len-1),i=1;len>i;i++)args[i-1]=arguments[i];for(listeners=handler.slice(),len=listeners.length,i=0;len>i;i++)listeners[i].apply(this,args)}return!0},EventEmitter.prototype.addListener=function(type,listener){var m;if(!isFunction(listener))throw TypeError(\"listener must be a function\");if(this._events||(this._events={}),this._events.newListener&&this.emit(\"newListener\",type,isFunction(listener.listener)?listener.listener:listener),this._events[type]?isObject(this._events[type])?this._events[type].push(listener):this._events[type]=[this._events[type],listener]:this._events[type]=listener,isObject(this._events[type])&&!this._events[type].warned){var m;m=isUndefined(this._maxListeners)?EventEmitter.defaultMaxListeners:this._maxListeners,m&&m>0&&this._events[type].length>m&&(this._events[type].warned=!0,console.error(\"(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.\",this._events[type].length),\"function\"==typeof console.trace&&console.trace())}return this},EventEmitter.prototype.on=EventEmitter.prototype.addListener,EventEmitter.prototype.once=function(type,listener){function g(){this.removeListener(type,g),fired||(fired=!0,listener.apply(this,arguments))}if(!isFunction(listener))throw TypeError(\"listener must be a function\");var fired=!1;return g.listener=listener,this.on(type,g),this},EventEmitter.prototype.removeListener=function(type,listener){var list,position,length,i;if(!isFunction(listener))throw TypeError(\"listener must be a function\");if(!this._events||!this._events[type])return this;if(list=this._events[type],length=list.length,position=-1,list===listener||isFunction(list.listener)&&list.listener===listener)delete this._events[type],this._events.removeListener&&this.emit(\"removeListener\",type,listener);else if(isObject(list)){for(i=length;i-->0;)if(list[i]===listener||list[i].listener&&list[i].listener===listener){position=i;break}if(0>position)return this;1===list.length?(list.length=0,delete this._events[type]):list.splice(position,1),this._events.removeListener&&this.emit(\"removeListener\",type,listener)}return this},EventEmitter.prototype.removeAllListeners=function(type){var key,listeners;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[type]&&delete this._events[type],this;if(0===arguments.length){for(key in this._events)\"removeListener\"!==key&&this.removeAllListeners(key);return this.removeAllListeners(\"removeListener\"),this._events={},this\n}if(listeners=this._events[type],isFunction(listeners))this.removeListener(type,listeners);else for(;listeners.length;)this.removeListener(type,listeners[listeners.length-1]);return delete this._events[type],this},EventEmitter.prototype.listeners=function(type){var ret;return ret=this._events&&this._events[type]?isFunction(this._events[type])?[this._events[type]]:this._events[type].slice():[]},EventEmitter.listenerCount=function(emitter,type){var ret;return ret=emitter._events&&emitter._events[type]?isFunction(emitter._events[type])?1:emitter._events[type].length:0}},{}],\"/node_modules/jshint/data/ascii-identifier-data.js\":[function(_dereq_,module){for(var identifierStartTable=[],i=0;128>i;i++)identifierStartTable[i]=36===i||i>=65&&90>=i||95===i||i>=97&&122>=i;for(var identifierPartTable=[],i=0;128>i;i++)identifierPartTable[i]=identifierStartTable[i]||i>=48&&57>=i;module.exports={asciiIdentifierStartTable:identifierStartTable,asciiIdentifierPartTable:identifierPartTable}},{}],\"/node_modules/jshint/lodash.js\":[function(_dereq_,module,exports){(function(global){(function(){function baseFindIndex(array,predicate,fromRight){for(var length=array.length,index=fromRight?length:-1;fromRight?index--:length>++index;)if(predicate(array[index],index,array))return index;return-1}function baseIndexOf(array,value,fromIndex){if(value!==value)return indexOfNaN(array,fromIndex);for(var index=fromIndex-1,length=array.length;length>++index;)if(array[index]===value)return index;return-1}function baseIsFunction(value){return\"function\"==typeof value||!1}function baseToString(value){return\"string\"==typeof value?value:null==value?\"\":value+\"\"}function indexOfNaN(array,fromIndex,fromRight){for(var length=array.length,index=fromIndex+(fromRight?0:-1);fromRight?index--:length>++index;){var other=array[index];if(other!==other)return index}return-1}function isObjectLike(value){return!!value&&\"object\"==typeof value}function lodash(){}function arrayCopy(source,array){var index=-1,length=source.length;for(array||(array=Array(length));length>++index;)array[index]=source[index];return array}function arrayEach(array,iteratee){for(var index=-1,length=array.length;length>++index&&iteratee(array[index],index,array)!==!1;);return array}function arrayFilter(array,predicate){for(var index=-1,length=array.length,resIndex=-1,result=[];length>++index;){var value=array[index];predicate(value,index,array)&&(result[++resIndex]=value)}return result}function arrayMap(array,iteratee){for(var index=-1,length=array.length,result=Array(length);length>++index;)result[index]=iteratee(array[index],index,array);return result}function arrayMax(array){for(var index=-1,length=array.length,result=NEGATIVE_INFINITY;length>++index;){var value=array[index];value>result&&(result=value)}return result}function arraySome(array,predicate){for(var index=-1,length=array.length;length>++index;)if(predicate(array[index],index,array))return!0;return!1}function assignWith(object,source,customizer){var props=keys(source);push.apply(props,getSymbols(source));for(var index=-1,length=props.length;length>++index;){var key=props[index],value=object[key],result=customizer(value,source[key],key,object,source);(result===result?result===value:value!==value)&&(value!==undefined||key in object)||(object[key]=result)}return object}function baseCopy(source,props,object){object||(object={});for(var index=-1,length=props.length;length>++index;){var key=props[index];object[key]=source[key]}return object}function baseCallback(func,thisArg,argCount){var type=typeof func;return\"function\"==type?thisArg===undefined?func:bindCallback(func,thisArg,argCount):null==func?identity:\"object\"==type?baseMatches(func):thisArg===undefined?property(func):baseMatchesProperty(func,thisArg)}function baseClone(value,isDeep,customizer,key,object,stackA,stackB){var result;if(customizer&&(result=object?customizer(value,key,object):customizer(value)),result!==undefined)return result;if(!isObject(value))return value;var isArr=isArray(value);if(isArr){if(result=initCloneArray(value),!isDeep)return arrayCopy(value,result)}else{var tag=objToString.call(value),isFunc=tag==funcTag;if(tag!=objectTag&&tag!=argsTag&&(!isFunc||object))return cloneableTags[tag]?initCloneByTag(value,tag,isDeep):object?value:{};if(result=initCloneObject(isFunc?{}:value),!isDeep)return baseAssign(result,value)}stackA||(stackA=[]),stackB||(stackB=[]);for(var length=stackA.length;length--;)if(stackA[length]==value)return stackB[length];return stackA.push(value),stackB.push(result),(isArr?arrayEach:baseForOwn)(value,function(subValue,key){result[key]=baseClone(subValue,isDeep,customizer,key,value,stackA,stackB)}),result}function baseFilter(collection,predicate){var result=[];return baseEach(collection,function(value,index,collection){predicate(value,index,collection)&&result.push(value)}),result}function baseForIn(object,iteratee){return baseFor(object,iteratee,keysIn)}function baseForOwn(object,iteratee){return baseFor(object,iteratee,keys)}function baseGet(object,path,pathKey){if(null!=object){pathKey!==undefined&&pathKey in toObject(object)&&(path=[pathKey]);for(var index=-1,length=path.length;null!=object&&length>++index;)var result=object=object[path[index]];return result}}function baseIsEqual(value,other,customizer,isLoose,stackA,stackB){if(value===other)return 0!==value||1/value==1/other;var valType=typeof value,othType=typeof other;return\"function\"!=valType&&\"object\"!=valType&&\"function\"!=othType&&\"object\"!=othType||null==value||null==other?value!==value&&other!==other:baseIsEqualDeep(value,other,baseIsEqual,customizer,isLoose,stackA,stackB)}function baseIsEqualDeep(object,other,equalFunc,customizer,isLoose,stackA,stackB){var objIsArr=isArray(object),othIsArr=isArray(other),objTag=arrayTag,othTag=arrayTag;objIsArr||(objTag=objToString.call(object),objTag==argsTag?objTag=objectTag:objTag!=objectTag&&(objIsArr=isTypedArray(object))),othIsArr||(othTag=objToString.call(other),othTag==argsTag?othTag=objectTag:othTag!=objectTag&&(othIsArr=isTypedArray(other)));var objIsObj=objTag==objectTag,othIsObj=othTag==objectTag,isSameTag=objTag==othTag;if(isSameTag&&!objIsArr&&!objIsObj)return equalByTag(object,other,objTag);if(!isLoose){var valWrapped=objIsObj&&hasOwnProperty.call(object,\"__wrapped__\"),othWrapped=othIsObj&&hasOwnProperty.call(other,\"__wrapped__\");if(valWrapped||othWrapped)return equalFunc(valWrapped?object.value():object,othWrapped?other.value():other,customizer,isLoose,stackA,stackB)}if(!isSameTag)return!1;stackA||(stackA=[]),stackB||(stackB=[]);for(var length=stackA.length;length--;)if(stackA[length]==object)return stackB[length]==other;stackA.push(object),stackB.push(other);var result=(objIsArr?equalArrays:equalObjects)(object,other,equalFunc,customizer,isLoose,stackA,stackB);return stackA.pop(),stackB.pop(),result}function baseIsMatch(object,props,values,strictCompareFlags,customizer){for(var index=-1,length=props.length,noCustomizer=!customizer;length>++index;)if(noCustomizer&&strictCompareFlags[index]?values[index]!==object[props[index]]:!(props[index]in object))return!1;for(index=-1;length>++index;){var key=props[index],objValue=object[key],srcValue=values[index];if(noCustomizer&&strictCompareFlags[index])var result=objValue!==undefined||key in object;else result=customizer?customizer(objValue,srcValue,key):undefined,result===undefined&&(result=baseIsEqual(srcValue,objValue,customizer,!0));if(!result)return!1}return!0}function baseMatches(source){var props=keys(source),length=props.length;if(!length)return constant(!0);if(1==length){var key=props[0],value=source[key];if(isStrictComparable(value))return function(object){return null==object?!1:object[key]===value&&(value!==undefined||key in toObject(object))}}for(var values=Array(length),strictCompareFlags=Array(length);length--;)value=source[props[length]],values[length]=value,strictCompareFlags[length]=isStrictComparable(value);return function(object){return null!=object&&baseIsMatch(toObject(object),props,values,strictCompareFlags)}}function baseMatchesProperty(path,value){var isArr=isArray(path),isCommon=isKey(path)&&isStrictComparable(value),pathKey=path+\"\";return path=toPath(path),function(object){if(null==object)return!1;var key=pathKey;if(object=toObject(object),!(!isArr&&isCommon||key in object)){if(object=1==path.length?object:baseGet(object,baseSlice(path,0,-1)),null==object)return!1;key=last(path),object=toObject(object)}return object[key]===value?value!==undefined||key in object:baseIsEqual(value,object[key],null,!0)}}function baseMerge(object,source,customizer,stackA,stackB){if(!isObject(object))return object;var isSrcArr=isLength(source.length)&&(isArray(source)||isTypedArray(source));if(!isSrcArr){var props=keys(source);push.apply(props,getSymbols(source))}return arrayEach(props||source,function(srcValue,key){if(props&&(key=srcValue,srcValue=source[key]),isObjectLike(srcValue))stackA||(stackA=[]),stackB||(stackB=[]),baseMergeDeep(object,source,key,baseMerge,customizer,stackA,stackB);else{var value=object[key],result=customizer?customizer(value,srcValue,key,object,source):undefined,isCommon=result===undefined;isCommon&&(result=srcValue),!isSrcArr&&result===undefined||!isCommon&&(result===result?result===value:value!==value)||(object[key]=result)}}),object}function baseMergeDeep(object,source,key,mergeFunc,customizer,stackA,stackB){for(var length=stackA.length,srcValue=source[key];length--;)if(stackA[length]==srcValue)return object[key]=stackB[length],undefined;var value=object[key],result=customizer?customizer(value,srcValue,key,object,source):undefined,isCommon=result===undefined;isCommon&&(result=srcValue,isLength(srcValue.length)&&(isArray(srcValue)||isTypedArray(srcValue))?result=isArray(value)?value:getLength(value)?arrayCopy(value):[]:isPlainObject(srcValue)||isArguments(srcValue)?result=isArguments(value)?toPlainObject(value):isPlainObject(value)?value:{}:isCommon=!1),stackA.push(srcValue),stackB.push(result),isCommon?object[key]=mergeFunc(result,srcValue,customizer,stackA,stackB):(result===result?result!==value:value===value)&&(object[key]=result)}function baseProperty(key){return function(object){return null==object?undefined:object[key]}}function basePropertyDeep(path){var pathKey=path+\"\";return path=toPath(path),function(object){return baseGet(object,path,pathKey)}}function baseSlice(array,start,end){var index=-1,length=array.length;start=null==start?0:+start||0,0>start&&(start=-start>length?0:length+start),end=end===undefined||end>length?length:+end||0,0>end&&(end+=length),length=start>end?0:end-start>>>0,start>>>=0;for(var result=Array(length);length>++index;)result[index]=array[index+start];return result}function baseSome(collection,predicate){var result;return baseEach(collection,function(value,index,collection){return result=predicate(value,index,collection),!result}),!!result}function baseValues(object,props){for(var index=-1,length=props.length,result=Array(length);length>++index;)result[index]=object[props[index]];return result}function binaryIndex(array,value,retHighest){var low=0,high=array?array.length:low;if(\"number\"==typeof value&&value===value&&HALF_MAX_ARRAY_LENGTH>=high){for(;high>low;){var mid=low+high>>>1,computed=array[mid];(retHighest?value>=computed:value>computed)?low=mid+1:high=mid}return high}return binaryIndexBy(array,value,identity,retHighest)}function binaryIndexBy(array,value,iteratee,retHighest){value=iteratee(value);for(var low=0,high=array?array.length:0,valIsNaN=value!==value,valIsUndef=value===undefined;high>low;){var mid=floor((low+high)/2),computed=iteratee(array[mid]),isReflexive=computed===computed;if(valIsNaN)var setLow=isReflexive||retHighest;else setLow=valIsUndef?isReflexive&&(retHighest||computed!==undefined):retHighest?value>=computed:value>computed;setLow?low=mid+1:high=mid}return nativeMin(high,MAX_ARRAY_INDEX)}function bindCallback(func,thisArg,argCount){if(\"function\"!=typeof func)return identity;if(thisArg===undefined)return func;switch(argCount){case 1:return function(value){return func.call(thisArg,value)};case 3:return function(value,index,collection){return func.call(thisArg,value,index,collection)};case 4:return function(accumulator,value,index,collection){return func.call(thisArg,accumulator,value,index,collection)};case 5:return function(value,other,key,object,source){return func.call(thisArg,value,other,key,object,source)}}return function(){return func.apply(thisArg,arguments)}}function bufferClone(buffer){return bufferSlice.call(buffer,0)}function createAssigner(assigner){return restParam(function(object,sources){var index=-1,length=null==object?0:sources.length,customizer=length>2&&sources[length-2],guard=length>2&&sources[2],thisArg=length>1&&sources[length-1];for(\"function\"==typeof customizer?(customizer=bindCallback(customizer,thisArg,5),length-=2):(customizer=\"function\"==typeof thisArg?thisArg:null,length-=customizer?1:0),guard&&isIterateeCall(sources[0],sources[1],guard)&&(customizer=3>length?null:customizer,length=1);length>++index;){var source=sources[index];source&&assigner(object,source,customizer)}return object})}function createBaseEach(eachFunc,fromRight){return function(collection,iteratee){var length=collection?getLength(collection):0;if(!isLength(length))return eachFunc(collection,iteratee);for(var index=fromRight?length:-1,iterable=toObject(collection);(fromRight?index--:length>++index)&&iteratee(iterable[index],index,iterable)!==!1;);return collection}}function createBaseFor(fromRight){return function(object,iteratee,keysFunc){for(var iterable=toObject(object),props=keysFunc(object),length=props.length,index=fromRight?length:-1;fromRight?index--:length>++index;){var key=props[index];if(iteratee(iterable[key],key,iterable)===!1)break}return object}}function createFindIndex(fromRight){return function(array,predicate,thisArg){return array&&array.length?(predicate=getCallback(predicate,thisArg,3),baseFindIndex(array,predicate,fromRight)):-1}}function createForEach(arrayFunc,eachFunc){return function(collection,iteratee,thisArg){return\"function\"==typeof iteratee&&thisArg===undefined&&isArray(collection)?arrayFunc(collection,iteratee):eachFunc(collection,bindCallback(iteratee,thisArg,3))}}function equalArrays(array,other,equalFunc,customizer,isLoose,stackA,stackB){var index=-1,arrLength=array.length,othLength=other.length,result=!0;if(arrLength!=othLength&&!(isLoose&&othLength>arrLength))return!1;for(;result&&arrLength>++index;){var arrValue=array[index],othValue=other[index];if(result=undefined,customizer&&(result=isLoose?customizer(othValue,arrValue,index):customizer(arrValue,othValue,index)),result===undefined)if(isLoose)for(var othIndex=othLength;othIndex--&&(othValue=other[othIndex],!(result=arrValue&&arrValue===othValue||equalFunc(arrValue,othValue,customizer,isLoose,stackA,stackB))););else result=arrValue&&arrValue===othValue||equalFunc(arrValue,othValue,customizer,isLoose,stackA,stackB)}return!!result}function equalByTag(object,other,tag){switch(tag){case boolTag:case dateTag:return+object==+other;case errorTag:return object.name==other.name&&object.message==other.message;case numberTag:return object!=+object?other!=+other:0==object?1/object==1/other:object==+other;case regexpTag:case stringTag:return object==other+\"\"}return!1}function equalObjects(object,other,equalFunc,customizer,isLoose,stackA,stackB){var objProps=keys(object),objLength=objProps.length,othProps=keys(other),othLength=othProps.length;if(objLength!=othLength&&!isLoose)return!1;for(var skipCtor=isLoose,index=-1;objLength>++index;){var key=objProps[index],result=isLoose?key in other:hasOwnProperty.call(other,key);if(result){var objValue=object[key],othValue=other[key];result=undefined,customizer&&(result=isLoose?customizer(othValue,objValue,key):customizer(objValue,othValue,key)),result===undefined&&(result=objValue&&objValue===othValue||equalFunc(objValue,othValue,customizer,isLoose,stackA,stackB))}if(!result)return!1;skipCtor||(skipCtor=\"constructor\"==key)}if(!skipCtor){var objCtor=object.constructor,othCtor=other.constructor;if(objCtor!=othCtor&&\"constructor\"in object&&\"constructor\"in other&&!(\"function\"==typeof objCtor&&objCtor instanceof objCtor&&\"function\"==typeof othCtor&&othCtor instanceof othCtor))return!1}return!0}function getCallback(func,thisArg,argCount){var result=lodash.callback||callback;return result=result===callback?baseCallback:result,argCount?result(func,thisArg,argCount):result}function getIndexOf(collection,target,fromIndex){var result=lodash.indexOf||indexOf;return result=result===indexOf?baseIndexOf:result,collection?result(collection,target,fromIndex):result}function initCloneArray(array){var length=array.length,result=new array.constructor(length);return length&&\"string\"==typeof array[0]&&hasOwnProperty.call(array,\"index\")&&(result.index=array.index,result.input=array.input),result}function initCloneObject(object){var Ctor=object.constructor;return\"function\"==typeof Ctor&&Ctor instanceof Ctor||(Ctor=Object),new Ctor}function initCloneByTag(object,tag,isDeep){var Ctor=object.constructor;switch(tag){case arrayBufferTag:return bufferClone(object);case boolTag:case dateTag:return new Ctor(+object);case float32Tag:case float64Tag:case int8Tag:case int16Tag:case int32Tag:case uint8Tag:case uint8ClampedTag:case uint16Tag:case uint32Tag:var buffer=object.buffer;return new Ctor(isDeep?bufferClone(buffer):buffer,object.byteOffset,object.length);case numberTag:case stringTag:return new Ctor(object);case regexpTag:var result=new Ctor(object.source,reFlags.exec(object));result.lastIndex=object.lastIndex}return result}function isIndex(value,length){return value=+value,length=null==length?MAX_SAFE_INTEGER:length,value>-1&&0==value%1&&length>value}function isIterateeCall(value,index,object){if(!isObject(object))return!1;var type=typeof index;if(\"number\"==type)var length=getLength(object),prereq=isLength(length)&&isIndex(index,length);else prereq=\"string\"==type&&index in object;if(prereq){var other=object[index];return value===value?value===other:other!==other}return!1}function isKey(value,object){var type=typeof value;if(\"string\"==type&&reIsPlainProp.test(value)||\"number\"==type)return!0;if(isArray(value))return!1;var result=!reIsDeepProp.test(value);return result||null!=object&&value in toObject(object)}function isLength(value){return\"number\"==typeof value&&value>-1&&0==value%1&&MAX_SAFE_INTEGER>=value}function isStrictComparable(value){return value===value&&(0===value?1/value>0:!isObject(value))}function shimIsPlainObject(value){var Ctor;if(lodash.support,!isObjectLike(value)||objToString.call(value)!=objectTag||!hasOwnProperty.call(value,\"constructor\")&&(Ctor=value.constructor,\"function\"==typeof Ctor&&!(Ctor instanceof Ctor)))return!1;var result;return baseForIn(value,function(subValue,key){result=key}),result===undefined||hasOwnProperty.call(value,result)}function shimKeys(object){for(var props=keysIn(object),propsLength=props.length,length=propsLength&&object.length,support=lodash.support,allowIndexes=length&&isLength(length)&&(isArray(object)||support.nonEnumArgs&&isArguments(object)),index=-1,result=[];propsLength>++index;){var key=props[index];(allowIndexes&&isIndex(key,length)||hasOwnProperty.call(object,key))&&result.push(key)}return result}function toObject(value){return isObject(value)?value:Object(value)}function toPath(value){if(isArray(value))return value;var result=[];return baseToString(value).replace(rePropName,function(match,number,quote,string){result.push(quote?string.replace(reEscapeChar,\"$1\"):number||match)}),result}function indexOf(array,value,fromIndex){var length=array?array.length:0;if(!length)return-1;if(\"number\"==typeof fromIndex)fromIndex=0>fromIndex?nativeMax(length+fromIndex,0):fromIndex;else if(fromIndex){var index=binaryIndex(array,value),other=array[index];return(value===value?value===other:other!==other)?index:-1}return baseIndexOf(array,value,fromIndex||0)}function last(array){var length=array?array.length:0;return length?array[length-1]:undefined}function slice(array,start,end){var length=array?array.length:0;return length?(end&&\"number\"!=typeof end&&isIterateeCall(array,start,end)&&(start=0,end=length),baseSlice(array,start,end)):[]}function unzip(array){for(var index=-1,length=(array&&array.length&&arrayMax(arrayMap(array,getLength)))>>>0,result=Array(length);length>++index;)result[index]=arrayMap(array,baseProperty(index));return result}function includes(collection,target,fromIndex,guard){var length=collection?getLength(collection):0;return isLength(length)||(collection=values(collection),length=collection.length),length?(fromIndex=\"number\"!=typeof fromIndex||guard&&isIterateeCall(target,fromIndex,guard)?0:0>fromIndex?nativeMax(length+fromIndex,0):fromIndex||0,\"string\"==typeof collection||!isArray(collection)&&isString(collection)?length>fromIndex&&collection.indexOf(target,fromIndex)>-1:getIndexOf(collection,target,fromIndex)>-1):!1}function reject(collection,predicate,thisArg){var func=isArray(collection)?arrayFilter:baseFilter;return predicate=getCallback(predicate,thisArg,3),func(collection,function(value,index,collection){return!predicate(value,index,collection)})}function some(collection,predicate,thisArg){var func=isArray(collection)?arraySome:baseSome;return thisArg&&isIterateeCall(collection,predicate,thisArg)&&(predicate=null),(\"function\"!=typeof predicate||thisArg!==undefined)&&(predicate=getCallback(predicate,thisArg,3)),func(collection,predicate)}function restParam(func,start){if(\"function\"!=typeof func)throw new TypeError(FUNC_ERROR_TEXT);return start=nativeMax(start===undefined?func.length-1:+start||0,0),function(){for(var args=arguments,index=-1,length=nativeMax(args.length-start,0),rest=Array(length);length>++index;)rest[index]=args[start+index];switch(start){case 0:return func.call(this,rest);case 1:return func.call(this,args[0],rest);case 2:return func.call(this,args[0],args[1],rest)}var otherArgs=Array(start+1);for(index=-1;start>++index;)otherArgs[index]=args[index];return otherArgs[start]=rest,func.apply(this,otherArgs)}}function clone(value,isDeep,customizer,thisArg){return isDeep&&\"boolean\"!=typeof isDeep&&isIterateeCall(value,isDeep,customizer)?isDeep=!1:\"function\"==typeof isDeep&&(thisArg=customizer,customizer=isDeep,isDeep=!1),customizer=\"function\"==typeof customizer&&bindCallback(customizer,thisArg,1),baseClone(value,isDeep,customizer)}function isArguments(value){var length=isObjectLike(value)?value.length:undefined;return isLength(length)&&objToString.call(value)==argsTag}function isEmpty(value){if(null==value)return!0;var length=getLength(value);return isLength(length)&&(isArray(value)||isString(value)||isArguments(value)||isObjectLike(value)&&isFunction(value.splice))?!length:!keys(value).length}function isObject(value){var type=typeof value;return\"function\"==type||!!value&&\"object\"==type}function isNative(value){return null==value?!1:objToString.call(value)==funcTag?reIsNative.test(fnToString.call(value)):isObjectLike(value)&&reIsHostCtor.test(value)}function isNumber(value){return\"number\"==typeof value||isObjectLike(value)&&objToString.call(value)==numberTag}function isString(value){return\"string\"==typeof value||isObjectLike(value)&&objToString.call(value)==stringTag}function isTypedArray(value){return isObjectLike(value)&&isLength(value.length)&&!!typedArrayTags[objToString.call(value)]}function toPlainObject(value){return baseCopy(value,keysIn(value))}function has(object,path){if(null==object)return!1;var result=hasOwnProperty.call(object,path);return result||isKey(path)||(path=toPath(path),object=1==path.length?object:baseGet(object,baseSlice(path,0,-1)),path=last(path),result=null!=object&&hasOwnProperty.call(object,path)),result}function keysIn(object){if(null==object)return[];isObject(object)||(object=Object(object));var length=object.length;length=length&&isLength(length)&&(isArray(object)||support.nonEnumArgs&&isArguments(object))&&length||0;for(var Ctor=object.constructor,index=-1,isProto=\"function\"==typeof Ctor&&Ctor.prototype===object,result=Array(length),skipIndexes=length>0;length>++index;)result[index]=index+\"\";for(var key in object)skipIndexes&&isIndex(key,length)||\"constructor\"==key&&(isProto||!hasOwnProperty.call(object,key))||result.push(key);return result}function values(object){return baseValues(object,keys(object))}function escapeRegExp(string){return string=baseToString(string),string&&reHasRegExpChars.test(string)?string.replace(reRegExpChars,\"\\\\$&\"):string}function callback(func,thisArg,guard){return guard&&isIterateeCall(func,thisArg,guard)&&(thisArg=null),baseCallback(func,thisArg)}function constant(value){return function(){return value}}function identity(value){return value}function property(path){return isKey(path)?baseProperty(path):basePropertyDeep(path)}var undefined,VERSION=\"3.7.0\",FUNC_ERROR_TEXT=\"Expected a function\",argsTag=\"[object Arguments]\",arrayTag=\"[object Array]\",boolTag=\"[object Boolean]\",dateTag=\"[object Date]\",errorTag=\"[object Error]\",funcTag=\"[object Function]\",mapTag=\"[object Map]\",numberTag=\"[object Number]\",objectTag=\"[object Object]\",regexpTag=\"[object RegExp]\",setTag=\"[object Set]\",stringTag=\"[object String]\",weakMapTag=\"[object WeakMap]\",arrayBufferTag=\"[object ArrayBuffer]\",float32Tag=\"[object Float32Array]\",float64Tag=\"[object Float64Array]\",int8Tag=\"[object Int8Array]\",int16Tag=\"[object Int16Array]\",int32Tag=\"[object Int32Array]\",uint8Tag=\"[object Uint8Array]\",uint8ClampedTag=\"[object Uint8ClampedArray]\",uint16Tag=\"[object Uint16Array]\",uint32Tag=\"[object Uint32Array]\",reIsDeepProp=/\\.|\\[(?:[^[\\]]+|([\"'])(?:(?!\\1)[^\\n\\\\]|\\\\.)*?)\\1\\]/,reIsPlainProp=/^\\w*$/,rePropName=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\n\\\\]|\\\\.)*?)\\2)\\]/g,reRegExpChars=/[.*+?^${}()|[\\]\\/\\\\]/g,reHasRegExpChars=RegExp(reRegExpChars.source),reEscapeChar=/\\\\(\\\\)?/g,reFlags=/\\w*$/,reIsHostCtor=/^\\[object .+?Constructor\\]$/,typedArrayTags={};typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=!0,typedArrayTags[argsTag]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag]=typedArrayTags[mapTag]=typedArrayTags[numberTag]=typedArrayTags[objectTag]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag]=typedArrayTags[weakMapTag]=!1;var cloneableTags={};cloneableTags[argsTag]=cloneableTags[arrayTag]=cloneableTags[arrayBufferTag]=cloneableTags[boolTag]=cloneableTags[dateTag]=cloneableTags[float32Tag]=cloneableTags[float64Tag]=cloneableTags[int8Tag]=cloneableTags[int16Tag]=cloneableTags[int32Tag]=cloneableTags[numberTag]=cloneableTags[objectTag]=cloneableTags[regexpTag]=cloneableTags[stringTag]=cloneableTags[uint8Tag]=cloneableTags[uint8ClampedTag]=cloneableTags[uint16Tag]=cloneableTags[uint32Tag]=!0,cloneableTags[errorTag]=cloneableTags[funcTag]=cloneableTags[mapTag]=cloneableTags[setTag]=cloneableTags[weakMapTag]=!1;var objectTypes={\"function\":!0,object:!0},freeExports=objectTypes[typeof exports]&&exports&&!exports.nodeType&&exports,freeModule=objectTypes[typeof module]&&module&&!module.nodeType&&module,freeGlobal=freeExports&&freeModule&&\"object\"==typeof global&&global&&global.Object&&global,freeSelf=objectTypes[typeof self]&&self&&self.Object&&self,freeWindow=objectTypes[typeof window]&&window&&window.Object&&window,moduleExports=freeModule&&freeModule.exports===freeExports&&freeExports,root=freeGlobal||freeWindow!==(this&&this.window)&&freeWindow||freeSelf||this,arrayProto=Array.prototype,objectProto=Object.prototype,fnToString=Function.prototype.toString,hasOwnProperty=objectProto.hasOwnProperty,objToString=objectProto.toString,reIsNative=RegExp(\"^\"+escapeRegExp(objToString).replace(/toString|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),ArrayBuffer=isNative(ArrayBuffer=root.ArrayBuffer)&&ArrayBuffer,bufferSlice=isNative(bufferSlice=ArrayBuffer&&new ArrayBuffer(0).slice)&&bufferSlice,floor=Math.floor,getOwnPropertySymbols=isNative(getOwnPropertySymbols=Object.getOwnPropertySymbols)&&getOwnPropertySymbols,getPrototypeOf=isNative(getPrototypeOf=Object.getPrototypeOf)&&getPrototypeOf,push=arrayProto.push,preventExtensions=isNative(Object.preventExtensions=Object.preventExtensions)&&preventExtensions,propertyIsEnumerable=objectProto.propertyIsEnumerable,Uint8Array=isNative(Uint8Array=root.Uint8Array)&&Uint8Array,Float64Array=function(){try{var func=isNative(func=root.Float64Array)&&func,result=new func(new ArrayBuffer(10),0,1)&&func}catch(e){}return result}(),nativeAssign=function(){var object={1:0},func=preventExtensions&&isNative(func=Object.assign)&&func;try{func(preventExtensions(object),\"xo\")}catch(e){}return!object[1]&&func}(),nativeIsArray=isNative(nativeIsArray=Array.isArray)&&nativeIsArray,nativeKeys=isNative(nativeKeys=Object.keys)&&nativeKeys,nativeMax=Math.max,nativeMin=Math.min,NEGATIVE_INFINITY=Number.NEGATIVE_INFINITY,MAX_ARRAY_LENGTH=Math.pow(2,32)-1,MAX_ARRAY_INDEX=MAX_ARRAY_LENGTH-1,HALF_MAX_ARRAY_LENGTH=MAX_ARRAY_LENGTH>>>1,FLOAT64_BYTES_PER_ELEMENT=Float64Array?Float64Array.BYTES_PER_ELEMENT:0,MAX_SAFE_INTEGER=Math.pow(2,53)-1,support=lodash.support={};(function(x){var Ctor=function(){this.x=x},props=[];Ctor.prototype={valueOf:x,y:x};for(var key in new Ctor)props.push(key);support.funcDecomp=/\\bthis\\b/.test(function(){return this}),support.funcNames=\"string\"==typeof Function.name;try{support.nonEnumArgs=!propertyIsEnumerable.call(arguments,1)}catch(e){support.nonEnumArgs=!0}})(1,0);var baseAssign=nativeAssign||function(object,source){return null==source?object:baseCopy(source,getSymbols(source),baseCopy(source,keys(source),object))},baseEach=createBaseEach(baseForOwn),baseFor=createBaseFor();bufferSlice||(bufferClone=ArrayBuffer&&Uint8Array?function(buffer){var byteLength=buffer.byteLength,floatLength=Float64Array?floor(byteLength/FLOAT64_BYTES_PER_ELEMENT):0,offset=floatLength*FLOAT64_BYTES_PER_ELEMENT,result=new ArrayBuffer(byteLength);if(floatLength){var view=new Float64Array(result,0,floatLength);view.set(new Float64Array(buffer,0,floatLength))}return byteLength!=offset&&(view=new Uint8Array(result,offset),view.set(new Uint8Array(buffer,offset))),result}:constant(null));var getLength=baseProperty(\"length\"),getSymbols=getOwnPropertySymbols?function(object){return getOwnPropertySymbols(toObject(object))}:constant([]),findLastIndex=createFindIndex(!0),zip=restParam(unzip),forEach=createForEach(arrayEach,baseEach),isArray=nativeIsArray||function(value){return isObjectLike(value)&&isLength(value.length)&&objToString.call(value)==arrayTag},isFunction=baseIsFunction(/x/)||Uint8Array&&!baseIsFunction(Uint8Array)?function(value){return objToString.call(value)==funcTag}:baseIsFunction,isPlainObject=getPrototypeOf?function(value){if(!value||objToString.call(value)!=objectTag)return!1;var valueOf=value.valueOf,objProto=isNative(valueOf)&&(objProto=getPrototypeOf(valueOf))&&getPrototypeOf(objProto);return objProto?value==objProto||getPrototypeOf(value)==objProto:shimIsPlainObject(value)}:shimIsPlainObject,assign=createAssigner(function(object,source,customizer){return customizer?assignWith(object,source,customizer):baseAssign(object,source)}),keys=nativeKeys?function(object){if(object)var Ctor=object.constructor,length=object.length;return\"function\"==typeof Ctor&&Ctor.prototype===object||\"function\"!=typeof object&&isLength(length)?shimKeys(object):isObject(object)?nativeKeys(object):[]}:shimKeys,merge=createAssigner(baseMerge);lodash.assign=assign,lodash.callback=callback,lodash.constant=constant,lodash.forEach=forEach,lodash.keys=keys,lodash.keysIn=keysIn,lodash.merge=merge,lodash.property=property,lodash.reject=reject,lodash.restParam=restParam,lodash.slice=slice,lodash.toPlainObject=toPlainObject,lodash.unzip=unzip,lodash.values=values,lodash.zip=zip,lodash.each=forEach,lodash.extend=assign,lodash.iteratee=callback,lodash.clone=clone,lodash.escapeRegExp=escapeRegExp,lodash.findLastIndex=findLastIndex,lodash.has=has,lodash.identity=identity,lodash.includes=includes,lodash.indexOf=indexOf,lodash.isArguments=isArguments,lodash.isArray=isArray,lodash.isEmpty=isEmpty,lodash.isFunction=isFunction,lodash.isNative=isNative,lodash.isNumber=isNumber,lodash.isObject=isObject,lodash.isPlainObject=isPlainObject,lodash.isString=isString,lodash.isTypedArray=isTypedArray,lodash.last=last,lodash.some=some,lodash.any=some,lodash.contains=includes,lodash.include=includes,lodash.VERSION=VERSION,freeExports&&freeModule?moduleExports?(freeModule.exports=lodash)._=lodash:freeExports._=lodash:root._=lodash\n}).call(this)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],\"/node_modules/jshint/src/jshint.js\":[function(_dereq_,module,exports){var _=_dereq_(\"../lodash\"),events=_dereq_(\"events\"),vars=_dereq_(\"./vars.js\"),messages=_dereq_(\"./messages.js\"),Lexer=_dereq_(\"./lex.js\").Lexer,reg=_dereq_(\"./reg.js\"),state=_dereq_(\"./state.js\").state,style=_dereq_(\"./style.js\"),options=_dereq_(\"./options.js\"),scopeManager=_dereq_(\"./scope-manager.js\"),JSHINT=function(){\"use strict\";function checkOption(name,t){return name=name.trim(),/^[+-]W\\d{3}$/g.test(name)?!0:-1!==options.validNames.indexOf(name)||\"jslint\"===t.type||_.has(options.removed,name)?!0:(error(\"E001\",t,name),!1)}function isString(obj){return\"[object String]\"===Object.prototype.toString.call(obj)}function isIdentifier(tkn,value){return tkn?tkn.identifier&&tkn.value===value?!0:!1:!1}function isReserved(token){if(!token.reserved)return!1;var meta=token.meta;if(meta&&meta.isFutureReservedWord&&state.inES5()){if(!meta.es5)return!1;if(meta.strictOnly&&!state.option.strict&&!state.isStrict())return!1;if(token.isProperty)return!1}return!0}function supplant(str,data){return str.replace(/\\{([^{}]*)\\}/g,function(a,b){var r=data[b];return\"string\"==typeof r||\"number\"==typeof r?r:a})}function combine(dest,src){Object.keys(src).forEach(function(name){_.has(JSHINT.blacklist,name)||(dest[name]=src[name])})}function processenforceall(){if(state.option.enforceall){for(var enforceopt in options.bool.enforcing)void 0!==state.option[enforceopt]||options.noenforceall[enforceopt]||(state.option[enforceopt]=!0);for(var relaxopt in options.bool.relaxing)void 0===state.option[relaxopt]&&(state.option[relaxopt]=!1)}}function assume(){processenforceall(),state.option.esversion||state.option.moz||(state.option.esversion=state.option.es3?3:state.option.esnext?6:5),state.inES5()&&combine(predefined,vars.ecmaIdentifiers[5]),state.inES6()&&combine(predefined,vars.ecmaIdentifiers[6]),state.option.module&&(state.option.strict===!0&&(state.option.strict=\"global\"),state.inES6()||warning(\"W134\",state.tokens.next,\"module\",6)),state.option.couch&&combine(predefined,vars.couch),state.option.qunit&&combine(predefined,vars.qunit),state.option.rhino&&combine(predefined,vars.rhino),state.option.shelljs&&(combine(predefined,vars.shelljs),combine(predefined,vars.node)),state.option.typed&&combine(predefined,vars.typed),state.option.phantom&&(combine(predefined,vars.phantom),state.option.strict===!0&&(state.option.strict=\"global\")),state.option.prototypejs&&combine(predefined,vars.prototypejs),state.option.node&&(combine(predefined,vars.node),combine(predefined,vars.typed),state.option.strict===!0&&(state.option.strict=\"global\")),state.option.devel&&combine(predefined,vars.devel),state.option.dojo&&combine(predefined,vars.dojo),state.option.browser&&(combine(predefined,vars.browser),combine(predefined,vars.typed)),state.option.browserify&&(combine(predefined,vars.browser),combine(predefined,vars.typed),combine(predefined,vars.browserify),state.option.strict===!0&&(state.option.strict=\"global\")),state.option.nonstandard&&combine(predefined,vars.nonstandard),state.option.jasmine&&combine(predefined,vars.jasmine),state.option.jquery&&combine(predefined,vars.jquery),state.option.mootools&&combine(predefined,vars.mootools),state.option.worker&&combine(predefined,vars.worker),state.option.wsh&&combine(predefined,vars.wsh),state.option.globalstrict&&state.option.strict!==!1&&(state.option.strict=\"global\"),state.option.yui&&combine(predefined,vars.yui),state.option.mocha&&combine(predefined,vars.mocha)}function quit(code,line,chr){var percentage=Math.floor(100*(line/state.lines.length)),message=messages.errors[code].desc;throw{name:\"JSHintError\",line:line,character:chr,message:message+\" (\"+percentage+\"% scanned).\",raw:message,code:code}}function removeIgnoredMessages(){var ignored=state.ignoredLines;_.isEmpty(ignored)||(JSHINT.errors=_.reject(JSHINT.errors,function(err){return ignored[err.line]}))}function warning(code,t,a,b,c,d){var ch,l,w,msg;if(/^W\\d{3}$/.test(code)){if(state.ignored[code])return;msg=messages.warnings[code]}else/E\\d{3}/.test(code)?msg=messages.errors[code]:/I\\d{3}/.test(code)&&(msg=messages.info[code]);return t=t||state.tokens.next||{},\"(end)\"===t.id&&(t=state.tokens.curr),l=t.line||0,ch=t.from||0,w={id:\"(error)\",raw:msg.desc,code:msg.code,evidence:state.lines[l-1]||\"\",line:l,character:ch,scope:JSHINT.scope,a:a,b:b,c:c,d:d},w.reason=supplant(msg.desc,w),JSHINT.errors.push(w),removeIgnoredMessages(),JSHINT.errors.length>=state.option.maxerr&&quit(\"E043\",l,ch),w}function warningAt(m,l,ch,a,b,c,d){return warning(m,{line:l,from:ch},a,b,c,d)}function error(m,t,a,b,c,d){warning(m,t,a,b,c,d)}function errorAt(m,l,ch,a,b,c,d){return error(m,{line:l,from:ch},a,b,c,d)}function addInternalSrc(elem,src){var i;return i={id:\"(internal)\",elem:elem,value:src},JSHINT.internals.push(i),i}function doOption(){var nt=state.tokens.next,body=nt.body.match(/(-\\s+)?[^\\s,:]+(?:\\s*:\\s*(-\\s+)?[^\\s,]+)?/g)||[],predef={};if(\"globals\"===nt.type){body.forEach(function(g,idx){g=g.split(\":\");var key=(g[0]||\"\").trim(),val=(g[1]||\"\").trim();if(\"-\"===key||!key.length){if(idx>0&&idx===body.length-1)return;return error(\"E002\",nt),void 0}\"-\"===key.charAt(0)?(key=key.slice(1),val=!1,JSHINT.blacklist[key]=key,delete predefined[key]):predef[key]=\"true\"===val}),combine(predefined,predef);for(var key in predef)_.has(predef,key)&&(declared[key]=nt)}\"exported\"===nt.type&&body.forEach(function(e,idx){if(!e.length){if(idx>0&&idx===body.length-1)return;return error(\"E002\",nt),void 0}state.funct[\"(scope)\"].addExported(e)}),\"members\"===nt.type&&(membersOnly=membersOnly||{},body.forEach(function(m){var ch1=m.charAt(0),ch2=m.charAt(m.length-1);ch1!==ch2||'\"'!==ch1&&\"'\"!==ch1||(m=m.substr(1,m.length-2).replace('\\\\\"','\"')),membersOnly[m]=!1}));var numvals=[\"maxstatements\",\"maxparams\",\"maxdepth\",\"maxcomplexity\",\"maxerr\",\"maxlen\",\"indent\"];(\"jshint\"===nt.type||\"jslint\"===nt.type)&&(body.forEach(function(g){g=g.split(\":\");var key=(g[0]||\"\").trim(),val=(g[1]||\"\").trim();if(checkOption(key,nt))if(numvals.indexOf(key)>=0)if(\"false\"!==val){if(val=+val,\"number\"!=typeof val||!isFinite(val)||0>=val||Math.floor(val)!==val)return error(\"E032\",nt,g[1].trim()),void 0;state.option[key]=val}else state.option[key]=\"indent\"===key?4:!1;else{if(\"validthis\"===key)return state.funct[\"(global)\"]?void error(\"E009\"):\"true\"!==val&&\"false\"!==val?void error(\"E002\",nt):(state.option.validthis=\"true\"===val,void 0);if(\"quotmark\"!==key)if(\"shadow\"!==key)if(\"unused\"!==key)if(\"latedef\"!==key)if(\"ignore\"!==key)if(\"strict\"!==key){\"module\"===key&&(hasParsedCode(state.funct)||error(\"E055\",state.tokens.next,\"module\"));var esversions={es3:3,es5:5,esnext:6};if(!_.has(esversions,key)){if(\"esversion\"===key){switch(val){case\"5\":state.inES5(!0)&&warning(\"I003\");case\"3\":case\"6\":state.option.moz=!1,state.option.esversion=+val;break;case\"2015\":state.option.moz=!1,state.option.esversion=6;break;default:error(\"E002\",nt)}return hasParsedCode(state.funct)||error(\"E055\",state.tokens.next,\"esversion\"),void 0}var match=/^([+-])(W\\d{3})$/g.exec(key);if(match)return state.ignored[match[2]]=\"-\"===match[1],void 0;var tn;return\"true\"===val||\"false\"===val?(\"jslint\"===nt.type?(tn=options.renamed[key]||key,state.option[tn]=\"true\"===val,void 0!==options.inverted[tn]&&(state.option[tn]=!state.option[tn])):state.option[key]=\"true\"===val,\"newcap\"===key&&(state.option[\"(explicitNewcap)\"]=!0),void 0):(error(\"E002\",nt),void 0)}switch(val){case\"true\":state.option.moz=!1,state.option.esversion=esversions[key];break;case\"false\":state.option.moz||(state.option.esversion=5);break;default:error(\"E002\",nt)}}else switch(val){case\"true\":state.option.strict=!0;break;case\"false\":state.option.strict=!1;break;case\"func\":case\"global\":case\"implied\":state.option.strict=val;break;default:error(\"E002\",nt)}else switch(val){case\"line\":state.ignoredLines[nt.line]=!0,removeIgnoredMessages();break;default:error(\"E002\",nt)}else switch(val){case\"true\":state.option.latedef=!0;break;case\"false\":state.option.latedef=!1;break;case\"nofunc\":state.option.latedef=\"nofunc\";break;default:error(\"E002\",nt)}else switch(val){case\"true\":state.option.unused=!0;break;case\"false\":state.option.unused=!1;break;case\"vars\":case\"strict\":state.option.unused=val;break;default:error(\"E002\",nt)}else switch(val){case\"true\":state.option.shadow=!0;break;case\"outer\":state.option.shadow=\"outer\";break;case\"false\":case\"inner\":state.option.shadow=\"inner\";break;default:error(\"E002\",nt)}else switch(val){case\"true\":case\"false\":state.option.quotmark=\"true\"===val;break;case\"double\":case\"single\":state.option.quotmark=val;break;default:error(\"E002\",nt)}}}),assume())}function peek(p){var t,i=p||0,j=lookahead.length;if(j>i)return lookahead[i];for(;i>=j;)t=lookahead[j],t||(t=lookahead[j]=lex.token()),j+=1;return t||\"(end)\"!==state.tokens.next.id?t:state.tokens.next}function peekIgnoreEOL(){var t,i=0;do t=peek(i++);while(\"(endline)\"===t.id);return t}function advance(id,t){switch(state.tokens.curr.id){case\"(number)\":\".\"===state.tokens.next.id&&warning(\"W005\",state.tokens.curr);break;case\"-\":(\"-\"===state.tokens.next.id||\"--\"===state.tokens.next.id)&&warning(\"W006\");break;case\"+\":(\"+\"===state.tokens.next.id||\"++\"===state.tokens.next.id)&&warning(\"W007\")}for(id&&state.tokens.next.id!==id&&(t?\"(end)\"===state.tokens.next.id?error(\"E019\",t,t.id):error(\"E020\",state.tokens.next,id,t.id,t.line,state.tokens.next.value):(\"(identifier)\"!==state.tokens.next.type||state.tokens.next.value!==id)&&warning(\"W116\",state.tokens.next,id,state.tokens.next.value)),state.tokens.prev=state.tokens.curr,state.tokens.curr=state.tokens.next;;){if(state.tokens.next=lookahead.shift()||lex.token(),state.tokens.next||quit(\"E041\",state.tokens.curr.line),\"(end)\"===state.tokens.next.id||\"(error)\"===state.tokens.next.id)return;if(state.tokens.next.check&&state.tokens.next.check(),state.tokens.next.isSpecial)\"falls through\"===state.tokens.next.type?state.tokens.curr.caseFallsThrough=!0:doOption();else if(\"(endline)\"!==state.tokens.next.id)break}}function isInfix(token){return token.infix||!token.identifier&&!token.template&&!!token.led}function isEndOfExpr(){var curr=state.tokens.curr,next=state.tokens.next;return\";\"===next.id||\"}\"===next.id||\":\"===next.id?!0:isInfix(next)===isInfix(curr)||\"yield\"===curr.id&&state.inMoz()?curr.line!==startLine(next):!1}function isBeginOfExpr(prev){return!prev.left&&\"unary\"!==prev.arity}function expression(rbp,initial){var left,isArray=!1,isObject=!1,isLetExpr=!1;state.nameStack.push(),initial||\"let\"!==state.tokens.next.value||\"(\"!==peek(0).value||(state.inMoz()||warning(\"W118\",state.tokens.next,\"let expressions\"),isLetExpr=!0,state.funct[\"(scope)\"].stack(),advance(\"let\"),advance(\"(\"),state.tokens.prev.fud(),advance(\")\")),\"(end)\"===state.tokens.next.id&&error(\"E006\",state.tokens.curr);var isDangerous=state.option.asi&&state.tokens.prev.line!==startLine(state.tokens.curr)&&_.contains([\"]\",\")\"],state.tokens.prev.id)&&_.contains([\"[\",\"(\"],state.tokens.curr.id);if(isDangerous&&warning(\"W014\",state.tokens.curr,state.tokens.curr.id),advance(),initial&&(state.funct[\"(verb)\"]=state.tokens.curr.value,state.tokens.curr.beginsStmt=!0),initial===!0&&state.tokens.curr.fud)left=state.tokens.curr.fud();else for(state.tokens.curr.nud?left=state.tokens.curr.nud():error(\"E030\",state.tokens.curr,state.tokens.curr.id);(state.tokens.next.lbp>rbp||\"(template)\"===state.tokens.next.type)&&!isEndOfExpr();)isArray=\"Array\"===state.tokens.curr.value,isObject=\"Object\"===state.tokens.curr.value,left&&(left.value||left.first&&left.first.value)&&(\"new\"!==left.value||left.first&&left.first.value&&\".\"===left.first.value)&&(isArray=!1,left.value!==state.tokens.curr.value&&(isObject=!1)),advance(),isArray&&\"(\"===state.tokens.curr.id&&\")\"===state.tokens.next.id&&warning(\"W009\",state.tokens.curr),isObject&&\"(\"===state.tokens.curr.id&&\")\"===state.tokens.next.id&&warning(\"W010\",state.tokens.curr),left&&state.tokens.curr.led?left=state.tokens.curr.led(left):error(\"E033\",state.tokens.curr,state.tokens.curr.id);return isLetExpr&&state.funct[\"(scope)\"].unstack(),state.nameStack.pop(),left}function startLine(token){return token.startLine||token.line}function nobreaknonadjacent(left,right){left=left||state.tokens.curr,right=right||state.tokens.next,state.option.laxbreak||left.line===startLine(right)||warning(\"W014\",right,right.value)}function nolinebreak(t){t=t||state.tokens.curr,t.line!==startLine(state.tokens.next)&&warning(\"E022\",t,t.value)}function nobreakcomma(left,right){left.line!==startLine(right)&&(state.option.laxcomma||(comma.first&&(warning(\"I001\"),comma.first=!1),warning(\"W014\",left,right.value)))}function comma(opts){if(opts=opts||{},opts.peek?nobreakcomma(state.tokens.prev,state.tokens.curr):(nobreakcomma(state.tokens.curr,state.tokens.next),advance(\",\")),state.tokens.next.identifier&&(!opts.property||!state.inES5()))switch(state.tokens.next.value){case\"break\":case\"case\":case\"catch\":case\"continue\":case\"default\":case\"do\":case\"else\":case\"finally\":case\"for\":case\"if\":case\"in\":case\"instanceof\":case\"return\":case\"switch\":case\"throw\":case\"try\":case\"var\":case\"let\":case\"while\":case\"with\":return error(\"E024\",state.tokens.next,state.tokens.next.value),!1}if(\"(punctuator)\"===state.tokens.next.type)switch(state.tokens.next.value){case\"}\":case\"]\":case\",\":if(opts.allowTrailing)return!0;case\")\":return error(\"E024\",state.tokens.next,state.tokens.next.value),!1}return!0}function symbol(s,p){var x=state.syntax[s];return x&&\"object\"==typeof x||(state.syntax[s]=x={id:s,lbp:p,value:s}),x}function delim(s){var x=symbol(s,0);return x.delim=!0,x}function stmt(s,f){var x=delim(s);return x.identifier=x.reserved=!0,x.fud=f,x}function blockstmt(s,f){var x=stmt(s,f);return x.block=!0,x}function reserveName(x){var c=x.id.charAt(0);return(c>=\"a\"&&\"z\">=c||c>=\"A\"&&\"Z\">=c)&&(x.identifier=x.reserved=!0),x}function prefix(s,f){var x=symbol(s,150);return reserveName(x),x.nud=\"function\"==typeof f?f:function(){return this.arity=\"unary\",this.right=expression(150),(\"++\"===this.id||\"--\"===this.id)&&(state.option.plusplus?warning(\"W016\",this,this.id):!this.right||this.right.identifier&&!isReserved(this.right)||\".\"===this.right.id||\"[\"===this.right.id||warning(\"W017\",this),this.right&&this.right.isMetaProperty?error(\"E031\",this):this.right&&this.right.identifier&&state.funct[\"(scope)\"].block.modify(this.right.value,this)),this},x}function type(s,f){var x=delim(s);return x.type=s,x.nud=f,x}function reserve(name,func){var x=type(name,func);return x.identifier=!0,x.reserved=!0,x}function FutureReservedWord(name,meta){var x=type(name,meta&&meta.nud||function(){return this});return meta=meta||{},meta.isFutureReservedWord=!0,x.value=name,x.identifier=!0,x.reserved=!0,x.meta=meta,x}function reservevar(s,v){return reserve(s,function(){return\"function\"==typeof v&&v(this),this})}function infix(s,f,p,w){var x=symbol(s,p);return reserveName(x),x.infix=!0,x.led=function(left){return w||nobreaknonadjacent(state.tokens.prev,state.tokens.curr),\"in\"!==s&&\"instanceof\"!==s||\"!\"!==left.id||warning(\"W018\",left,\"!\"),\"function\"==typeof f?f(left,this):(this.left=left,this.right=expression(p),this)},x}function application(s){var x=symbol(s,42);return x.led=function(left){return nobreaknonadjacent(state.tokens.prev,state.tokens.curr),this.left=left,this.right=doFunction({type:\"arrow\",loneArg:left}),this},x}function relation(s,f){var x=symbol(s,100);return x.led=function(left){nobreaknonadjacent(state.tokens.prev,state.tokens.curr),this.left=left;var right=this.right=expression(100);return isIdentifier(left,\"NaN\")||isIdentifier(right,\"NaN\")?warning(\"W019\",this):f&&f.apply(this,[left,right]),left&&right||quit(\"E041\",state.tokens.curr.line),\"!\"===left.id&&warning(\"W018\",left,\"!\"),\"!\"===right.id&&warning(\"W018\",right,\"!\"),this},x}function isPoorRelation(node){return node&&(\"(number)\"===node.type&&0===+node.value||\"(string)\"===node.type&&\"\"===node.value||\"null\"===node.type&&!state.option.eqnull||\"true\"===node.type||\"false\"===node.type||\"undefined\"===node.type)}function isTypoTypeof(left,right,state){var values;return state.option.notypeof?!1:left&&right?(values=state.inES6()?typeofValues.es6:typeofValues.es3,\"(identifier)\"===right.type&&\"typeof\"===right.value&&\"(string)\"===left.type?!_.contains(values,left.value):!1):!1}function isGlobalEval(left,state){var isGlobal=!1;return\"this\"===left.type&&null===state.funct[\"(context)\"]?isGlobal=!0:\"(identifier)\"===left.type&&(state.option.node&&\"global\"===left.value?isGlobal=!0:!state.option.browser||\"window\"!==left.value&&\"document\"!==left.value||(isGlobal=!0)),isGlobal}function findNativePrototype(left){function walkPrototype(obj){return\"object\"==typeof obj?\"prototype\"===obj.right?obj:walkPrototype(obj.left):void 0}function walkNative(obj){for(;!obj.identifier&&\"object\"==typeof obj.left;)obj=obj.left;return obj.identifier&&natives.indexOf(obj.value)>=0?obj.value:void 0}var natives=[\"Array\",\"ArrayBuffer\",\"Boolean\",\"Collator\",\"DataView\",\"Date\",\"DateTimeFormat\",\"Error\",\"EvalError\",\"Float32Array\",\"Float64Array\",\"Function\",\"Infinity\",\"Intl\",\"Int16Array\",\"Int32Array\",\"Int8Array\",\"Iterator\",\"Number\",\"NumberFormat\",\"Object\",\"RangeError\",\"ReferenceError\",\"RegExp\",\"StopIteration\",\"String\",\"SyntaxError\",\"TypeError\",\"Uint16Array\",\"Uint32Array\",\"Uint8Array\",\"Uint8ClampedArray\",\"URIError\"],prototype=walkPrototype(left);return prototype?walkNative(prototype):void 0}function checkLeftSideAssign(left,assignToken,options){var allowDestructuring=options&&options.allowDestructuring;if(assignToken=assignToken||left,state.option.freeze){var nativeObject=findNativePrototype(left);nativeObject&&warning(\"W121\",left,nativeObject)}return left.identifier&&!left.isMetaProperty&&state.funct[\"(scope)\"].block.reassign(left.value,left),\".\"===left.id?((!left.left||\"arguments\"===left.left.value&&!state.isStrict())&&warning(\"E031\",assignToken),state.nameStack.set(state.tokens.prev),!0):\"{\"===left.id||\"[\"===left.id?(allowDestructuring&&state.tokens.curr.left.destructAssign?state.tokens.curr.left.destructAssign.forEach(function(t){t.id&&state.funct[\"(scope)\"].block.modify(t.id,t.token)}):\"{\"!==left.id&&left.left?\"arguments\"!==left.left.value||state.isStrict()||warning(\"E031\",assignToken):warning(\"E031\",assignToken),\"[\"===left.id&&state.nameStack.set(left.right),!0):left.isMetaProperty?(error(\"E031\",assignToken),!0):left.identifier&&!isReserved(left)?(\"exception\"===state.funct[\"(scope)\"].labeltype(left.value)&&warning(\"W022\",left),state.nameStack.set(left),!0):(left===state.syntax[\"function\"]&&warning(\"W023\",state.tokens.curr),!1)}function assignop(s,f,p){var x=infix(s,\"function\"==typeof f?f:function(left,that){return that.left=left,left&&checkLeftSideAssign(left,that,{allowDestructuring:!0})?(that.right=expression(10),that):(error(\"E031\",that),void 0)},p);return x.exps=!0,x.assign=!0,x}function bitwise(s,f,p){var x=symbol(s,p);return reserveName(x),x.led=\"function\"==typeof f?f:function(left){return state.option.bitwise&&warning(\"W016\",this,this.id),this.left=left,this.right=expression(p),this},x}function bitwiseassignop(s){return assignop(s,function(left,that){return state.option.bitwise&&warning(\"W016\",that,that.id),left&&checkLeftSideAssign(left,that)?(that.right=expression(10),that):(error(\"E031\",that),void 0)},20)}function suffix(s){var x=symbol(s,150);return x.led=function(left){return state.option.plusplus?warning(\"W016\",this,this.id):left.identifier&&!isReserved(left)||\".\"===left.id||\"[\"===left.id||warning(\"W017\",this),left.isMetaProperty?error(\"E031\",this):left&&left.identifier&&state.funct[\"(scope)\"].block.modify(left.value,left),this.left=left,this},x}function optionalidentifier(fnparam,prop,preserve){if(state.tokens.next.identifier){preserve||advance();var curr=state.tokens.curr,val=state.tokens.curr.value;return isReserved(curr)?prop&&state.inES5()?val:fnparam&&\"undefined\"===val?val:(warning(\"W024\",state.tokens.curr,state.tokens.curr.id),val):val}}function identifier(fnparam,prop){var i=optionalidentifier(fnparam,prop,!1);if(i)return i;if(\"...\"===state.tokens.next.value){if(state.inES6(!0)||warning(\"W119\",state.tokens.next,\"spread/rest operator\",\"6\"),advance(),checkPunctuator(state.tokens.next,\"...\"))for(warning(\"E024\",state.tokens.next,\"...\");checkPunctuator(state.tokens.next,\"...\");)advance();return state.tokens.next.identifier?identifier(fnparam,prop):(warning(\"E024\",state.tokens.curr,\"...\"),void 0)}error(\"E030\",state.tokens.next,state.tokens.next.value),\";\"!==state.tokens.next.id&&advance()}function reachable(controlToken){var t,i=0;if(\";\"===state.tokens.next.id&&!controlToken.inBracelessBlock)for(;;){do t=peek(i),i+=1;while(\"(end)\"!==t.id&&\"(comment)\"===t.id);if(t.reach)return;if(\"(endline)\"!==t.id){if(\"function\"===t.id){state.option.latedef===!0&&warning(\"W026\",t);break}warning(\"W027\",t,t.value,controlToken.value);break}}}function parseFinalSemicolon(){if(\";\"!==state.tokens.next.id){if(state.tokens.next.isUnclosed)return advance();var sameLine=startLine(state.tokens.next)===state.tokens.curr.line&&\"(end)\"!==state.tokens.next.id,blockEnd=checkPunctuator(state.tokens.next,\"}\");sameLine&&!blockEnd?errorAt(\"E058\",state.tokens.curr.line,state.tokens.curr.character):state.option.asi||(blockEnd&&!state.option.lastsemic||!sameLine)&&warningAt(\"W033\",state.tokens.curr.line,state.tokens.curr.character)}else advance(\";\")}function statement(){var r,i=indent,t=state.tokens.next,hasOwnScope=!1;if(\";\"===t.id)return advance(\";\"),void 0;var res=isReserved(t);if(res&&t.meta&&t.meta.isFutureReservedWord&&\":\"===peek().id&&(warning(\"W024\",t,t.id),res=!1),t.identifier&&!res&&\":\"===peek().id&&(advance(),advance(\":\"),hasOwnScope=!0,state.funct[\"(scope)\"].stack(),state.funct[\"(scope)\"].block.addBreakLabel(t.value,{token:state.tokens.curr}),state.tokens.next.labelled||\"{\"===state.tokens.next.value||warning(\"W028\",state.tokens.next,t.value,state.tokens.next.value),state.tokens.next.label=t.value,t=state.tokens.next),\"{\"===t.id){var iscase=\"case\"===state.funct[\"(verb)\"]&&\":\"===state.tokens.curr.value;return block(!0,!0,!1,!1,iscase),void 0}return r=expression(0,!0),!r||r.identifier&&\"function\"===r.value||\"(punctuator)\"===r.type&&r.left&&r.left.identifier&&\"function\"===r.left.value||state.isStrict()||\"global\"!==state.option.strict||warning(\"E007\"),t.block||(state.option.expr||r&&r.exps?state.option.nonew&&r&&r.left&&\"(\"===r.id&&\"new\"===r.left.id&&warning(\"W031\",t):warning(\"W030\",state.tokens.curr),parseFinalSemicolon()),indent=i,hasOwnScope&&state.funct[\"(scope)\"].unstack(),r}function statements(){for(var p,a=[];!state.tokens.next.reach&&\"(end)\"!==state.tokens.next.id;)\";\"===state.tokens.next.id?(p=peek(),(!p||\"(\"!==p.id&&\"[\"!==p.id)&&warning(\"W032\"),advance(\";\")):a.push(statement());return a}function directives(){for(var i,p,pn;\"(string)\"===state.tokens.next.id;){if(p=peek(0),\"(endline)\"===p.id){i=1;do pn=peek(i++);while(\"(endline)\"===pn.id);if(\";\"===pn.id)p=pn;else{if(\"[\"===pn.value||\".\"===pn.value)break;state.option.asi&&\"(\"!==pn.value||warning(\"W033\",state.tokens.next)}}else{if(\".\"===p.id||\"[\"===p.id)break;\";\"!==p.id&&warning(\"W033\",p)}advance();var directive=state.tokens.curr.value;(state.directive[directive]||\"use strict\"===directive&&\"implied\"===state.option.strict)&&warning(\"W034\",state.tokens.curr,directive),state.directive[directive]=!0,\";\"===p.id&&advance(\";\")}state.isStrict()&&(state.option[\"(explicitNewcap)\"]||(state.option.newcap=!0),state.option.undef=!0)}function block(ordinary,stmt,isfunc,isfatarrow,iscase){var a,m,t,line,d,b=inblock,old_indent=indent;inblock=ordinary,t=state.tokens.next;var metrics=state.funct[\"(metrics)\"];if(metrics.nestedBlockDepth+=1,metrics.verifyMaxNestedBlockDepthPerFunction(),\"{\"===state.tokens.next.id){if(advance(\"{\"),state.funct[\"(scope)\"].stack(),line=state.tokens.curr.line,\"}\"!==state.tokens.next.id){for(indent+=state.option.indent;!ordinary&&state.tokens.next.from>indent;)indent+=state.option.indent;if(isfunc){m={};for(d in state.directive)_.has(state.directive,d)&&(m[d]=state.directive[d]);directives(),state.option.strict&&state.funct[\"(context)\"][\"(global)\"]&&(m[\"use strict\"]||state.isStrict()||warning(\"E007\"))}a=statements(),metrics.statementCount+=a.length,indent-=state.option.indent}advance(\"}\",t),isfunc&&(state.funct[\"(scope)\"].validateParams(),m&&(state.directive=m)),state.funct[\"(scope)\"].unstack(),indent=old_indent}else if(ordinary)state.funct[\"(noblockscopedvar)\"]=\"for\"!==state.tokens.next.id,state.funct[\"(scope)\"].stack(),(!stmt||state.option.curly)&&warning(\"W116\",state.tokens.next,\"{\",state.tokens.next.value),state.tokens.next.inBracelessBlock=!0,indent+=state.option.indent,a=[statement()],indent-=state.option.indent,state.funct[\"(scope)\"].unstack(),delete state.funct[\"(noblockscopedvar)\"];else if(isfunc){if(state.funct[\"(scope)\"].stack(),m={},!stmt||isfatarrow||state.inMoz()||error(\"W118\",state.tokens.curr,\"function closure expressions\"),!stmt)for(d in state.directive)_.has(state.directive,d)&&(m[d]=state.directive[d]);expression(10),state.option.strict&&state.funct[\"(context)\"][\"(global)\"]&&(m[\"use strict\"]||state.isStrict()||warning(\"E007\")),state.funct[\"(scope)\"].unstack()}else error(\"E021\",state.tokens.next,\"{\",state.tokens.next.value);switch(state.funct[\"(verb)\"]){case\"break\":case\"continue\":case\"return\":case\"throw\":if(iscase)break;default:state.funct[\"(verb)\"]=null}return inblock=b,!ordinary||!state.option.noempty||a&&0!==a.length||warning(\"W035\",state.tokens.prev),metrics.nestedBlockDepth-=1,a}function countMember(m){membersOnly&&\"boolean\"!=typeof membersOnly[m]&&warning(\"W036\",state.tokens.curr,m),\"number\"==typeof member[m]?member[m]+=1:member[m]=1}function comprehensiveArrayExpression(){var res={};res.exps=!0,state.funct[\"(comparray)\"].stack();var reversed=!1;return\"for\"!==state.tokens.next.value&&(reversed=!0,state.inMoz()||warning(\"W116\",state.tokens.next,\"for\",state.tokens.next.value),state.funct[\"(comparray)\"].setState(\"use\"),res.right=expression(10)),advance(\"for\"),\"each\"===state.tokens.next.value&&(advance(\"each\"),state.inMoz()||warning(\"W118\",state.tokens.curr,\"for each\")),advance(\"(\"),state.funct[\"(comparray)\"].setState(\"define\"),res.left=expression(130),_.contains([\"in\",\"of\"],state.tokens.next.value)?advance():error(\"E045\",state.tokens.curr),state.funct[\"(comparray)\"].setState(\"generate\"),expression(10),advance(\")\"),\"if\"===state.tokens.next.value&&(advance(\"if\"),advance(\"(\"),state.funct[\"(comparray)\"].setState(\"filter\"),res.filter=expression(10),advance(\")\")),reversed||(state.funct[\"(comparray)\"].setState(\"use\"),res.right=expression(10)),advance(\"]\"),state.funct[\"(comparray)\"].unstack(),res}function isMethod(){return state.funct[\"(statement)\"]&&\"class\"===state.funct[\"(statement)\"].type||state.funct[\"(context)\"]&&\"class\"===state.funct[\"(context)\"][\"(verb)\"]}function isPropertyName(token){return token.identifier||\"(string)\"===token.id||\"(number)\"===token.id}function propertyName(preserveOrToken){var id,preserve=!0;return\"object\"==typeof preserveOrToken?id=preserveOrToken:(preserve=preserveOrToken,id=optionalidentifier(!1,!0,preserve)),id?\"object\"==typeof id&&(\"(string)\"===id.id||\"(identifier)\"===id.id?id=id.value:\"(number)\"===id.id&&(id=\"\"+id.value)):\"(string)\"===state.tokens.next.id?(id=state.tokens.next.value,preserve||advance()):\"(number)\"===state.tokens.next.id&&(id=\"\"+state.tokens.next.value,preserve||advance()),\"hasOwnProperty\"===id&&warning(\"W001\"),id}function functionparams(options){function addParam(addParamArgs){state.funct[\"(scope)\"].addParam.apply(state.funct[\"(scope)\"],addParamArgs)}var next,ident,t,paramsIds=[],tokens=[],pastDefault=!1,pastRest=!1,arity=0,loneArg=options&&options.loneArg;if(loneArg&&loneArg.identifier===!0)return state.funct[\"(scope)\"].addParam(loneArg.value,loneArg),{arity:1,params:[loneArg.value]};if(next=state.tokens.next,options&&options.parsedOpening||advance(\"(\"),\")\"===state.tokens.next.id)return advance(\")\"),void 0;for(;;){arity++;var currentParams=[];if(_.contains([\"{\",\"[\"],state.tokens.next.id)){tokens=destructuringPattern();for(t in tokens)t=tokens[t],t.id&&(paramsIds.push(t.id),currentParams.push([t.id,t.token]))}else if(checkPunctuator(state.tokens.next,\"...\")&&(pastRest=!0),ident=identifier(!0))paramsIds.push(ident),currentParams.push([ident,state.tokens.curr]);else for(;!checkPunctuators(state.tokens.next,[\",\",\")\"]);)advance();if(pastDefault&&\"=\"!==state.tokens.next.id&&error(\"W138\",state.tokens.current),\"=\"===state.tokens.next.id&&(state.inES6()||warning(\"W119\",state.tokens.next,\"default parameters\",\"6\"),advance(\"=\"),pastDefault=!0,expression(10)),currentParams.forEach(addParam),\",\"!==state.tokens.next.id)return advance(\")\",next),{arity:arity,params:paramsIds};pastRest&&warning(\"W131\",state.tokens.next),comma()}}function functor(name,token,overwrites){var funct={\"(name)\":name,\"(breakage)\":0,\"(loopage)\":0,\"(tokens)\":{},\"(properties)\":{},\"(catch)\":!1,\"(global)\":!1,\"(line)\":null,\"(character)\":null,\"(metrics)\":null,\"(statement)\":null,\"(context)\":null,\"(scope)\":null,\"(comparray)\":null,\"(generator)\":null,\"(arrow)\":null,\"(params)\":null};return token&&_.extend(funct,{\"(line)\":token.line,\"(character)\":token.character,\"(metrics)\":createMetrics(token)}),_.extend(funct,overwrites),funct[\"(context)\"]&&(funct[\"(scope)\"]=funct[\"(context)\"][\"(scope)\"],funct[\"(comparray)\"]=funct[\"(context)\"][\"(comparray)\"]),funct}function isFunctor(token){return\"(scope)\"in token}function hasParsedCode(funct){return funct[\"(global)\"]&&!funct[\"(verb)\"]}function doTemplateLiteral(left){function end(){if(state.tokens.curr.template&&state.tokens.curr.tail&&state.tokens.curr.context===ctx)return!0;var complete=state.tokens.next.template&&state.tokens.next.tail&&state.tokens.next.context===ctx;return complete&&advance(),complete||state.tokens.next.isUnclosed}var ctx=this.context,noSubst=this.noSubst,depth=this.depth;if(!noSubst)for(;!end();)!state.tokens.next.template||state.tokens.next.depth>depth?expression(0):advance();return{id:\"(template)\",type:\"(template)\",tag:left}}function doFunction(options){var f,token,name,statement,classExprBinding,isGenerator,isArrow,ignoreLoopFunc,oldOption=state.option,oldIgnored=state.ignored;options&&(name=options.name,statement=options.statement,classExprBinding=options.classExprBinding,isGenerator=\"generator\"===options.type,isArrow=\"arrow\"===options.type,ignoreLoopFunc=options.ignoreLoopFunc),state.option=Object.create(state.option),state.ignored=Object.create(state.ignored),state.funct=functor(name||state.nameStack.infer(),state.tokens.next,{\"(statement)\":statement,\"(context)\":state.funct,\"(arrow)\":isArrow,\"(generator)\":isGenerator}),f=state.funct,token=state.tokens.curr,token.funct=state.funct,functions.push(state.funct),state.funct[\"(scope)\"].stack(\"functionouter\");var internallyAccessibleName=name||classExprBinding;internallyAccessibleName&&state.funct[\"(scope)\"].block.add(internallyAccessibleName,classExprBinding?\"class\":\"function\",state.tokens.curr,!1),state.funct[\"(scope)\"].stack(\"functionparams\");var paramsInfo=functionparams(options);return paramsInfo?(state.funct[\"(params)\"]=paramsInfo.params,state.funct[\"(metrics)\"].arity=paramsInfo.arity,state.funct[\"(metrics)\"].verifyMaxParametersPerFunction()):state.funct[\"(metrics)\"].arity=0,isArrow&&(state.inES6(!0)||warning(\"W119\",state.tokens.curr,\"arrow function syntax (=>)\",\"6\"),options.loneArg||advance(\"=>\")),block(!1,!0,!0,isArrow),!state.option.noyield&&isGenerator&&\"yielded\"!==state.funct[\"(generator)\"]&&warning(\"W124\",state.tokens.curr),state.funct[\"(metrics)\"].verifyMaxStatementsPerFunction(),state.funct[\"(metrics)\"].verifyMaxComplexityPerFunction(),state.funct[\"(unusedOption)\"]=state.option.unused,state.option=oldOption,state.ignored=oldIgnored,state.funct[\"(last)\"]=state.tokens.curr.line,state.funct[\"(lastcharacter)\"]=state.tokens.curr.character,state.funct[\"(scope)\"].unstack(),state.funct[\"(scope)\"].unstack(),state.funct=state.funct[\"(context)\"],ignoreLoopFunc||state.option.loopfunc||!state.funct[\"(loopage)\"]||f[\"(isCapturing)\"]&&warning(\"W083\",token),f}function createMetrics(functionStartToken){return{statementCount:0,nestedBlockDepth:-1,ComplexityCount:1,arity:0,verifyMaxStatementsPerFunction:function(){state.option.maxstatements&&this.statementCount>state.option.maxstatements&&warning(\"W071\",functionStartToken,this.statementCount)\n},verifyMaxParametersPerFunction:function(){_.isNumber(state.option.maxparams)&&this.arity>state.option.maxparams&&warning(\"W072\",functionStartToken,this.arity)},verifyMaxNestedBlockDepthPerFunction:function(){state.option.maxdepth&&this.nestedBlockDepth>0&&this.nestedBlockDepth===state.option.maxdepth+1&&warning(\"W073\",null,this.nestedBlockDepth)},verifyMaxComplexityPerFunction:function(){var max=state.option.maxcomplexity,cc=this.ComplexityCount;max&&cc>max&&warning(\"W074\",functionStartToken,cc)}}}function increaseComplexityCount(){state.funct[\"(metrics)\"].ComplexityCount+=1}function checkCondAssignment(expr){var id,paren;switch(expr&&(id=expr.id,paren=expr.paren,\",\"===id&&(expr=expr.exprs[expr.exprs.length-1])&&(id=expr.id,paren=paren||expr.paren)),id){case\"=\":case\"+=\":case\"-=\":case\"*=\":case\"%=\":case\"&=\":case\"|=\":case\"^=\":case\"/=\":paren||state.option.boss||warning(\"W084\")}}function checkProperties(props){if(state.inES5())for(var name in props)props[name]&&props[name].setterToken&&!props[name].getterToken&&warning(\"W078\",props[name].setterToken)}function metaProperty(name,c){if(checkPunctuator(state.tokens.next,\".\")){var left=state.tokens.curr.id;advance(\".\");var id=identifier();return state.tokens.curr.isMetaProperty=!0,name!==id?error(\"E057\",state.tokens.prev,left,id):c(),state.tokens.curr}}function destructuringPattern(options){var isAssignment=options&&options.assignment;return state.inES6()||warning(\"W104\",state.tokens.curr,isAssignment?\"destructuring assignment\":\"destructuring binding\",\"6\"),destructuringPatternRecursive(options)}function destructuringPatternRecursive(options){var ids,identifiers=[],openingParsed=options&&options.openingParsed,isAssignment=options&&options.assignment,recursiveOptions=isAssignment?{assignment:isAssignment}:null,firstToken=openingParsed?state.tokens.curr:state.tokens.next,nextInnerDE=function(){var ident;if(checkPunctuators(state.tokens.next,[\"[\",\"{\"])){ids=destructuringPatternRecursive(recursiveOptions);for(var id in ids)id=ids[id],identifiers.push({id:id.id,token:id.token})}else if(checkPunctuator(state.tokens.next,\",\"))identifiers.push({id:null,token:state.tokens.curr});else{if(!checkPunctuator(state.tokens.next,\"(\")){var is_rest=checkPunctuator(state.tokens.next,\"...\");if(isAssignment){var identifierToken=is_rest?peek(0):state.tokens.next;identifierToken.identifier||warning(\"E030\",identifierToken,identifierToken.value);var assignTarget=expression(155);assignTarget&&(checkLeftSideAssign(assignTarget),assignTarget.identifier&&(ident=assignTarget.value))}else ident=identifier();return ident&&identifiers.push({id:ident,token:state.tokens.curr}),is_rest}advance(\"(\"),nextInnerDE(),advance(\")\")}return!1},assignmentProperty=function(){var id;checkPunctuator(state.tokens.next,\"[\")?(advance(\"[\"),expression(10),advance(\"]\"),advance(\":\"),nextInnerDE()):\"(string)\"===state.tokens.next.id||\"(number)\"===state.tokens.next.id?(advance(),advance(\":\"),nextInnerDE()):(id=identifier(),checkPunctuator(state.tokens.next,\":\")?(advance(\":\"),nextInnerDE()):id&&(isAssignment&&checkLeftSideAssign(state.tokens.curr),identifiers.push({id:id,token:state.tokens.curr})))};if(checkPunctuator(firstToken,\"[\")){openingParsed||advance(\"[\"),checkPunctuator(state.tokens.next,\"]\")&&warning(\"W137\",state.tokens.curr);for(var element_after_rest=!1;!checkPunctuator(state.tokens.next,\"]\");)nextInnerDE()&&!element_after_rest&&checkPunctuator(state.tokens.next,\",\")&&(warning(\"W130\",state.tokens.next),element_after_rest=!0),checkPunctuator(state.tokens.next,\"=\")&&(checkPunctuator(state.tokens.prev,\"...\")?advance(\"]\"):advance(\"=\"),\"undefined\"===state.tokens.next.id&&warning(\"W080\",state.tokens.prev,state.tokens.prev.value),expression(10)),checkPunctuator(state.tokens.next,\"]\")||advance(\",\");advance(\"]\")}else if(checkPunctuator(firstToken,\"{\")){for(openingParsed||advance(\"{\"),checkPunctuator(state.tokens.next,\"}\")&&warning(\"W137\",state.tokens.curr);!checkPunctuator(state.tokens.next,\"}\")&&(assignmentProperty(),checkPunctuator(state.tokens.next,\"=\")&&(advance(\"=\"),\"undefined\"===state.tokens.next.id&&warning(\"W080\",state.tokens.prev,state.tokens.prev.value),expression(10)),checkPunctuator(state.tokens.next,\"}\")||(advance(\",\"),!checkPunctuator(state.tokens.next,\"}\"))););advance(\"}\")}return identifiers}function destructuringPatternMatch(tokens,value){var first=value.first;first&&_.zip(tokens,Array.isArray(first)?first:[first]).forEach(function(val){var token=val[0],value=val[1];token&&value?token.first=value:token&&token.first&&!value&&warning(\"W080\",token.first,token.first.value)})}function blockVariableStatement(type,statement,context){var tokens,lone,value,letblock,prefix=context&&context.prefix,inexport=context&&context.inexport,isLet=\"let\"===type,isConst=\"const\"===type;for(state.inES6()||warning(\"W104\",state.tokens.curr,type,\"6\"),isLet&&\"(\"===state.tokens.next.value?(state.inMoz()||warning(\"W118\",state.tokens.next,\"let block\"),advance(\"(\"),state.funct[\"(scope)\"].stack(),letblock=!0):state.funct[\"(noblockscopedvar)\"]&&error(\"E048\",state.tokens.curr,isConst?\"Const\":\"Let\"),statement.first=[];;){var names=[];_.contains([\"{\",\"[\"],state.tokens.next.value)?(tokens=destructuringPattern(),lone=!1):(tokens=[{id:identifier(),token:state.tokens.curr}],lone=!0),!prefix&&isConst&&\"=\"!==state.tokens.next.id&&warning(\"E012\",state.tokens.curr,state.tokens.curr.value);for(var t in tokens)tokens.hasOwnProperty(t)&&(t=tokens[t],state.funct[\"(scope)\"].block.isGlobal()&&predefined[t.id]===!1&&warning(\"W079\",t.token,t.id),t.id&&!state.funct[\"(noblockscopedvar)\"]&&(state.funct[\"(scope)\"].addlabel(t.id,{type:type,token:t.token}),names.push(t.token),lone&&inexport&&state.funct[\"(scope)\"].setExported(t.token.value,t.token)));if(\"=\"===state.tokens.next.id&&(advance(\"=\"),prefix||\"undefined\"!==state.tokens.next.id||warning(\"W080\",state.tokens.prev,state.tokens.prev.value),!prefix&&\"=\"===peek(0).id&&state.tokens.next.identifier&&warning(\"W120\",state.tokens.next,state.tokens.next.value),value=expression(prefix?120:10),lone?tokens[0].first=value:destructuringPatternMatch(names,value)),statement.first=statement.first.concat(names),\",\"!==state.tokens.next.id)break;comma()}return letblock&&(advance(\")\"),block(!0,!0),statement.block=!0,state.funct[\"(scope)\"].unstack()),statement}function classdef(isStatement){return state.inES6()||warning(\"W104\",state.tokens.curr,\"class\",\"6\"),isStatement?(this.name=identifier(),state.funct[\"(scope)\"].addlabel(this.name,{type:\"class\",token:state.tokens.curr})):state.tokens.next.identifier&&\"extends\"!==state.tokens.next.value?(this.name=identifier(),this.namedExpr=!0):this.name=state.nameStack.infer(),classtail(this),this}function classtail(c){var wasInClassBody=state.inClassBody;\"extends\"===state.tokens.next.value&&(advance(\"extends\"),c.heritage=expression(10)),state.inClassBody=!0,advance(\"{\"),c.body=classbody(c),advance(\"}\"),state.inClassBody=wasInClassBody}function classbody(c){for(var name,isStatic,isGenerator,getset,computed,props=Object.create(null),staticProps=Object.create(null),i=0;\"}\"!==state.tokens.next.id;++i)if(name=state.tokens.next,isStatic=!1,isGenerator=!1,getset=null,\";\"!==name.id){if(\"*\"===name.id&&(isGenerator=!0,advance(\"*\"),name=state.tokens.next),\"[\"===name.id)name=computedPropertyName(),computed=!0;else{if(!isPropertyName(name)){warning(\"W052\",state.tokens.next,state.tokens.next.value||state.tokens.next.type),advance();continue}advance(),computed=!1,name.identifier&&\"static\"===name.value&&(checkPunctuator(state.tokens.next,\"*\")&&(isGenerator=!0,advance(\"*\")),(isPropertyName(state.tokens.next)||\"[\"===state.tokens.next.id)&&(computed=\"[\"===state.tokens.next.id,isStatic=!0,name=state.tokens.next,\"[\"===state.tokens.next.id?name=computedPropertyName():advance())),!name.identifier||\"get\"!==name.value&&\"set\"!==name.value||(isPropertyName(state.tokens.next)||\"[\"===state.tokens.next.id)&&(computed=\"[\"===state.tokens.next.id,getset=name,name=state.tokens.next,\"[\"===state.tokens.next.id?name=computedPropertyName():advance())}if(!checkPunctuator(state.tokens.next,\"(\")){for(error(\"E054\",state.tokens.next,state.tokens.next.value);\"}\"!==state.tokens.next.id&&!checkPunctuator(state.tokens.next,\"(\");)advance();\"(\"!==state.tokens.next.value&&doFunction({statement:c})}if(computed||(getset?saveAccessor(getset.value,isStatic?staticProps:props,name.value,name,!0,isStatic):(\"constructor\"===name.value?state.nameStack.set(c):state.nameStack.set(name),saveProperty(isStatic?staticProps:props,name.value,name,!0,isStatic))),getset&&\"constructor\"===name.value){var propDesc=\"get\"===getset.value?\"class getter method\":\"class setter method\";error(\"E049\",name,propDesc,\"constructor\")}else\"prototype\"===name.value&&error(\"E049\",name,\"class method\",\"prototype\");propertyName(name),doFunction({statement:c,type:isGenerator?\"generator\":null,classExprBinding:c.namedExpr?c.name:null})}else warning(\"W032\"),advance(\";\");checkProperties(props)}function saveProperty(props,name,tkn,isClass,isStatic){var msg=[\"key\",\"class method\",\"static class method\"];msg=msg[(isClass||!1)+(isStatic||!1)],tkn.identifier&&(name=tkn.value),props[name]&&\"__proto__\"!==name?warning(\"W075\",state.tokens.next,msg,name):props[name]=Object.create(null),props[name].basic=!0,props[name].basictkn=tkn}function saveAccessor(accessorType,props,name,tkn,isClass,isStatic){var flagName=\"get\"===accessorType?\"getterToken\":\"setterToken\",msg=\"\";isClass?(isStatic&&(msg+=\"static \"),msg+=accessorType+\"ter method\"):msg=\"key\",state.tokens.curr.accessorType=accessorType,state.nameStack.set(tkn),props[name]?(props[name].basic||props[name][flagName])&&\"__proto__\"!==name&&warning(\"W075\",state.tokens.next,msg,name):props[name]=Object.create(null),props[name][flagName]=tkn}function computedPropertyName(){advance(\"[\"),state.inES6()||warning(\"W119\",state.tokens.curr,\"computed property names\",\"6\");var value=expression(10);return advance(\"]\"),value}function checkPunctuators(token,values){return\"(punctuator)\"===token.type?_.contains(values,token.value):!1}function checkPunctuator(token,value){return\"(punctuator)\"===token.type&&token.value===value}function destructuringAssignOrJsonValue(){var block=lookupBlockType();block.notJson?(!state.inES6()&&block.isDestAssign&&warning(\"W104\",state.tokens.curr,\"destructuring assignment\",\"6\"),statements()):(state.option.laxbreak=!0,state.jsonMode=!0,jsonValue())}function jsonValue(){function jsonObject(){var o={},t=state.tokens.next;if(advance(\"{\"),\"}\"!==state.tokens.next.id)for(;;){if(\"(end)\"===state.tokens.next.id)error(\"E026\",state.tokens.next,t.line);else{if(\"}\"===state.tokens.next.id){warning(\"W094\",state.tokens.curr);break}\",\"===state.tokens.next.id?error(\"E028\",state.tokens.next):\"(string)\"!==state.tokens.next.id&&warning(\"W095\",state.tokens.next,state.tokens.next.value)}if(o[state.tokens.next.value]===!0?warning(\"W075\",state.tokens.next,\"key\",state.tokens.next.value):\"__proto__\"===state.tokens.next.value&&!state.option.proto||\"__iterator__\"===state.tokens.next.value&&!state.option.iterator?warning(\"W096\",state.tokens.next,state.tokens.next.value):o[state.tokens.next.value]=!0,advance(),advance(\":\"),jsonValue(),\",\"!==state.tokens.next.id)break;advance(\",\")}advance(\"}\")}function jsonArray(){var t=state.tokens.next;if(advance(\"[\"),\"]\"!==state.tokens.next.id)for(;;){if(\"(end)\"===state.tokens.next.id)error(\"E027\",state.tokens.next,t.line);else{if(\"]\"===state.tokens.next.id){warning(\"W094\",state.tokens.curr);break}\",\"===state.tokens.next.id&&error(\"E028\",state.tokens.next)}if(jsonValue(),\",\"!==state.tokens.next.id)break;advance(\",\")}advance(\"]\")}switch(state.tokens.next.id){case\"{\":jsonObject();break;case\"[\":jsonArray();break;case\"true\":case\"false\":case\"null\":case\"(number)\":case\"(string)\":advance();break;case\"-\":advance(\"-\"),advance(\"(number)\");break;default:error(\"E003\",state.tokens.next)}}var api,declared,functions,inblock,indent,lookahead,lex,member,membersOnly,predefined,stack,urls,bang={\"<\":!0,\"<=\":!0,\"==\":!0,\"===\":!0,\"!==\":!0,\"!=\":!0,\">\":!0,\">=\":!0,\"+\":!0,\"-\":!0,\"*\":!0,\"/\":!0,\"%\":!0},functionicity=[\"closure\",\"exception\",\"global\",\"label\",\"outer\",\"unused\",\"var\"],extraModules=[],emitter=new events.EventEmitter,typeofValues={};typeofValues.legacy=[\"xml\",\"unknown\"],typeofValues.es3=[\"undefined\",\"boolean\",\"number\",\"string\",\"function\",\"object\"],typeofValues.es3=typeofValues.es3.concat(typeofValues.legacy),typeofValues.es6=typeofValues.es3.concat(\"symbol\"),type(\"(number)\",function(){return this}),type(\"(string)\",function(){return this}),state.syntax[\"(identifier)\"]={type:\"(identifier)\",lbp:0,identifier:!0,nud:function(){var v=this.value;return\"=>\"===state.tokens.next.id?this:(state.funct[\"(comparray)\"].check(v)||state.funct[\"(scope)\"].block.use(v,state.tokens.curr),this)},led:function(){error(\"E033\",state.tokens.next,state.tokens.next.value)}};var baseTemplateSyntax={lbp:0,identifier:!1,template:!0};state.syntax[\"(template)\"]=_.extend({type:\"(template)\",nud:doTemplateLiteral,led:doTemplateLiteral,noSubst:!1},baseTemplateSyntax),state.syntax[\"(template middle)\"]=_.extend({type:\"(template middle)\",middle:!0,noSubst:!1},baseTemplateSyntax),state.syntax[\"(template tail)\"]=_.extend({type:\"(template tail)\",tail:!0,noSubst:!1},baseTemplateSyntax),state.syntax[\"(no subst template)\"]=_.extend({type:\"(template)\",nud:doTemplateLiteral,led:doTemplateLiteral,noSubst:!0,tail:!0},baseTemplateSyntax),type(\"(regexp)\",function(){return this}),delim(\"(endline)\"),delim(\"(begin)\"),delim(\"(end)\").reach=!0,delim(\"(error)\").reach=!0,delim(\"}\").reach=!0,delim(\")\"),delim(\"]\"),delim('\"').reach=!0,delim(\"'\").reach=!0,delim(\";\"),delim(\":\").reach=!0,delim(\"#\"),reserve(\"else\"),reserve(\"case\").reach=!0,reserve(\"catch\"),reserve(\"default\").reach=!0,reserve(\"finally\"),reservevar(\"arguments\",function(x){state.isStrict()&&state.funct[\"(global)\"]&&warning(\"E008\",x)}),reservevar(\"eval\"),reservevar(\"false\"),reservevar(\"Infinity\"),reservevar(\"null\"),reservevar(\"this\",function(x){state.isStrict()&&!isMethod()&&!state.option.validthis&&(state.funct[\"(statement)\"]&&state.funct[\"(name)\"].charAt(0)>\"Z\"||state.funct[\"(global)\"])&&warning(\"W040\",x)}),reservevar(\"true\"),reservevar(\"undefined\"),assignop(\"=\",\"assign\",20),assignop(\"+=\",\"assignadd\",20),assignop(\"-=\",\"assignsub\",20),assignop(\"*=\",\"assignmult\",20),assignop(\"/=\",\"assigndiv\",20).nud=function(){error(\"E014\")},assignop(\"%=\",\"assignmod\",20),bitwiseassignop(\"&=\"),bitwiseassignop(\"|=\"),bitwiseassignop(\"^=\"),bitwiseassignop(\"<<=\"),bitwiseassignop(\">>=\"),bitwiseassignop(\">>>=\"),infix(\",\",function(left,that){var expr;if(that.exprs=[left],state.option.nocomma&&warning(\"W127\"),!comma({peek:!0}))return that;for(;;){if(!(expr=expression(10)))break;if(that.exprs.push(expr),\",\"!==state.tokens.next.value||!comma())break}return that},10,!0),infix(\"?\",function(left,that){return increaseComplexityCount(),that.left=left,that.right=expression(10),advance(\":\"),that[\"else\"]=expression(10),that},30);var orPrecendence=40;infix(\"||\",function(left,that){return increaseComplexityCount(),that.left=left,that.right=expression(orPrecendence),that},orPrecendence),infix(\"&&\",\"and\",50),bitwise(\"|\",\"bitor\",70),bitwise(\"^\",\"bitxor\",80),bitwise(\"&\",\"bitand\",90),relation(\"==\",function(left,right){var eqnull=state.option.eqnull&&(\"null\"===(left&&left.value)||\"null\"===(right&&right.value));switch(!0){case!eqnull&&state.option.eqeqeq:this.from=this.character,warning(\"W116\",this,\"===\",\"==\");break;case isPoorRelation(left):warning(\"W041\",this,\"===\",left.value);break;case isPoorRelation(right):warning(\"W041\",this,\"===\",right.value);break;case isTypoTypeof(right,left,state):warning(\"W122\",this,right.value);break;case isTypoTypeof(left,right,state):warning(\"W122\",this,left.value)}return this}),relation(\"===\",function(left,right){return isTypoTypeof(right,left,state)?warning(\"W122\",this,right.value):isTypoTypeof(left,right,state)&&warning(\"W122\",this,left.value),this}),relation(\"!=\",function(left,right){var eqnull=state.option.eqnull&&(\"null\"===(left&&left.value)||\"null\"===(right&&right.value));return!eqnull&&state.option.eqeqeq?(this.from=this.character,warning(\"W116\",this,\"!==\",\"!=\")):isPoorRelation(left)?warning(\"W041\",this,\"!==\",left.value):isPoorRelation(right)?warning(\"W041\",this,\"!==\",right.value):isTypoTypeof(right,left,state)?warning(\"W122\",this,right.value):isTypoTypeof(left,right,state)&&warning(\"W122\",this,left.value),this}),relation(\"!==\",function(left,right){return isTypoTypeof(right,left,state)?warning(\"W122\",this,right.value):isTypoTypeof(left,right,state)&&warning(\"W122\",this,left.value),this}),relation(\"<\"),relation(\">\"),relation(\"<=\"),relation(\">=\"),bitwise(\"<<\",\"shiftleft\",120),bitwise(\">>\",\"shiftright\",120),bitwise(\">>>\",\"shiftrightunsigned\",120),infix(\"in\",\"in\",120),infix(\"instanceof\",\"instanceof\",120),infix(\"+\",function(left,that){var right;return that.left=left,that.right=right=expression(130),left&&right&&\"(string)\"===left.id&&\"(string)\"===right.id?(left.value+=right.value,left.character=right.character,!state.option.scripturl&®.javascriptURL.test(left.value)&&warning(\"W050\",left),left):that},130),prefix(\"+\",\"num\"),prefix(\"+++\",function(){return warning(\"W007\"),this.arity=\"unary\",this.right=expression(150),this}),infix(\"+++\",function(left){return warning(\"W007\"),this.left=left,this.right=expression(130),this},130),infix(\"-\",\"sub\",130),prefix(\"-\",\"neg\"),prefix(\"---\",function(){return warning(\"W006\"),this.arity=\"unary\",this.right=expression(150),this}),infix(\"---\",function(left){return warning(\"W006\"),this.left=left,this.right=expression(130),this},130),infix(\"*\",\"mult\",140),infix(\"/\",\"div\",140),infix(\"%\",\"mod\",140),suffix(\"++\"),prefix(\"++\",\"preinc\"),state.syntax[\"++\"].exps=!0,suffix(\"--\"),prefix(\"--\",\"predec\"),state.syntax[\"--\"].exps=!0,prefix(\"delete\",function(){var p=expression(10);return p?(\".\"!==p.id&&\"[\"!==p.id&&warning(\"W051\"),this.first=p,p.identifier&&!state.isStrict()&&(p.forgiveUndef=!0),this):this}).exps=!0,prefix(\"~\",function(){return state.option.bitwise&&warning(\"W016\",this,\"~\"),this.arity=\"unary\",this.right=expression(150),this}),prefix(\"...\",function(){return state.inES6(!0)||warning(\"W119\",this,\"spread/rest operator\",\"6\"),state.tokens.next.identifier||\"(string)\"===state.tokens.next.type||checkPunctuators(state.tokens.next,[\"[\",\"(\"])||error(\"E030\",state.tokens.next,state.tokens.next.value),expression(150),this}),prefix(\"!\",function(){return this.arity=\"unary\",this.right=expression(150),this.right||quit(\"E041\",this.line||0),bang[this.right.id]===!0&&warning(\"W018\",this,\"!\"),this}),prefix(\"typeof\",function(){var p=expression(150);return this.first=this.right=p,p||quit(\"E041\",this.line||0,this.character||0),p.identifier&&(p.forgiveUndef=!0),this}),prefix(\"new\",function(){var mp=metaProperty(\"target\",function(){state.inES6(!0)||warning(\"W119\",state.tokens.prev,\"new.target\",\"6\");for(var inFunction,c=state.funct;c&&(inFunction=!c[\"(global)\"],c[\"(arrow)\"]);)c=c[\"(context)\"];inFunction||warning(\"W136\",state.tokens.prev,\"new.target\")});if(mp)return mp;var i,c=expression(155);if(c&&\"function\"!==c.id)if(c.identifier)switch(c[\"new\"]=!0,c.value){case\"Number\":case\"String\":case\"Boolean\":case\"Math\":case\"JSON\":warning(\"W053\",state.tokens.prev,c.value);break;case\"Symbol\":state.inES6()&&warning(\"W053\",state.tokens.prev,c.value);break;case\"Function\":state.option.evil||warning(\"W054\");break;case\"Date\":case\"RegExp\":case\"this\":break;default:\"function\"!==c.id&&(i=c.value.substr(0,1),state.option.newcap&&(\"A\">i||i>\"Z\")&&!state.funct[\"(scope)\"].isPredefined(c.value)&&warning(\"W055\",state.tokens.curr))}else\".\"!==c.id&&\"[\"!==c.id&&\"(\"!==c.id&&warning(\"W056\",state.tokens.curr);else state.option.supernew||warning(\"W057\",this);return\"(\"===state.tokens.next.id||state.option.supernew||warning(\"W058\",state.tokens.curr,state.tokens.curr.value),this.first=this.right=c,this}),state.syntax[\"new\"].exps=!0,prefix(\"void\").exps=!0,infix(\".\",function(left,that){var m=identifier(!1,!0);return\"string\"==typeof m&&countMember(m),that.left=left,that.right=m,m&&\"hasOwnProperty\"===m&&\"=\"===state.tokens.next.value&&warning(\"W001\"),!left||\"arguments\"!==left.value||\"callee\"!==m&&\"caller\"!==m?state.option.evil||!left||\"document\"!==left.value||\"write\"!==m&&\"writeln\"!==m||warning(\"W060\",left):state.option.noarg?warning(\"W059\",left,m):state.isStrict()&&error(\"E008\"),state.option.evil||\"eval\"!==m&&\"execScript\"!==m||isGlobalEval(left,state)&&warning(\"W061\"),that},160,!0),infix(\"(\",function(left,that){state.option.immed&&left&&!left.immed&&\"function\"===left.id&&warning(\"W062\");var n=0,p=[];if(left&&\"(identifier)\"===left.type&&left.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)&&-1===\"Array Number String Boolean Date Object Error Symbol\".indexOf(left.value)&&(\"Math\"===left.value?warning(\"W063\",left):state.option.newcap&&warning(\"W064\",left)),\")\"!==state.tokens.next.id)for(;p[p.length]=expression(10),n+=1,\",\"===state.tokens.next.id;)comma();return advance(\")\"),\"object\"==typeof left&&(state.inES5()||\"parseInt\"!==left.value||1!==n||warning(\"W065\",state.tokens.curr),state.option.evil||(\"eval\"===left.value||\"Function\"===left.value||\"execScript\"===left.value?(warning(\"W061\",left),p[0]&&\"(string)\"===[0].id&&addInternalSrc(left,p[0].value)):!p[0]||\"(string)\"!==p[0].id||\"setTimeout\"!==left.value&&\"setInterval\"!==left.value?!p[0]||\"(string)\"!==p[0].id||\".\"!==left.value||\"window\"!==left.left.value||\"setTimeout\"!==left.right&&\"setInterval\"!==left.right||(warning(\"W066\",left),addInternalSrc(left,p[0].value)):(warning(\"W066\",left),addInternalSrc(left,p[0].value))),left.identifier||\".\"===left.id||\"[\"===left.id||\"=>\"===left.id||\"(\"===left.id||\"&&\"===left.id||\"||\"===left.id||\"?\"===left.id||state.inES6()&&left[\"(name)\"]||warning(\"W067\",that)),that.left=left,that},155,!0).exps=!0,prefix(\"(\",function(){var pn1,ret,triggerFnExpr,first,last,pn=state.tokens.next,i=-1,parens=1,opening=state.tokens.curr,preceeding=state.tokens.prev,isNecessary=!state.option.singleGroups;do\"(\"===pn.value?parens+=1:\")\"===pn.value&&(parens-=1),i+=1,pn1=pn,pn=peek(i);while((0!==parens||\")\"!==pn1.value)&&\";\"!==pn.value&&\"(end)\"!==pn.type);if(\"function\"===state.tokens.next.id&&(triggerFnExpr=state.tokens.next.immed=!0),\"=>\"===pn.value)return doFunction({type:\"arrow\",parsedOpening:!0});var exprs=[];if(\")\"!==state.tokens.next.id)for(;exprs.push(expression(10)),\",\"===state.tokens.next.id;)state.option.nocomma&&warning(\"W127\"),comma();return advance(\")\",this),state.option.immed&&exprs[0]&&\"function\"===exprs[0].id&&\"(\"!==state.tokens.next.id&&\".\"!==state.tokens.next.id&&\"[\"!==state.tokens.next.id&&warning(\"W068\",this),exprs.length?(exprs.length>1?(ret=Object.create(state.syntax[\",\"]),ret.exprs=exprs,first=exprs[0],last=exprs[exprs.length-1],isNecessary||(isNecessary=preceeding.assign||preceeding.delim)):(ret=first=last=exprs[0],isNecessary||(isNecessary=opening.beginsStmt&&(\"{\"===ret.id||triggerFnExpr||isFunctor(ret))||triggerFnExpr&&(!isEndOfExpr()||\"}\"!==state.tokens.prev.id)||isFunctor(ret)&&!isEndOfExpr()||\"{\"===ret.id&&\"=>\"===preceeding.id||\"(number)\"===ret.type&&checkPunctuator(pn,\".\")&&/^\\d+$/.test(ret.value))),ret&&(!isNecessary&&(first.left||first.right||ret.exprs)&&(isNecessary=!isBeginOfExpr(preceeding)&&first.lbp<=preceeding.lbp||!isEndOfExpr()&&last.lbp\"),infix(\"[\",function(left,that){var s,e=expression(10);return e&&\"(string)\"===e.type&&(state.option.evil||\"eval\"!==e.value&&\"execScript\"!==e.value||isGlobalEval(left,state)&&warning(\"W061\"),countMember(e.value),!state.option.sub&®.identifier.test(e.value)&&(s=state.syntax[e.value],s&&isReserved(s)||warning(\"W069\",state.tokens.prev,e.value))),advance(\"]\",that),e&&\"hasOwnProperty\"===e.value&&\"=\"===state.tokens.next.value&&warning(\"W001\"),that.left=left,that.right=e,that},160,!0),prefix(\"[\",function(){var blocktype=lookupBlockType();if(blocktype.isCompArray)return state.option.esnext||state.inMoz()||warning(\"W118\",state.tokens.curr,\"array comprehension\"),comprehensiveArrayExpression();if(blocktype.isDestAssign)return this.destructAssign=destructuringPattern({openingParsed:!0,assignment:!0}),this;var b=state.tokens.curr.line!==startLine(state.tokens.next);for(this.first=[],b&&(indent+=state.option.indent,state.tokens.next.from===indent+state.option.indent&&(indent+=state.option.indent));\"(end)\"!==state.tokens.next.id;){for(;\",\"===state.tokens.next.id;){if(!state.option.elision){if(state.inES5()){warning(\"W128\");do advance(\",\");while(\",\"===state.tokens.next.id);continue}warning(\"W070\")}advance(\",\")}if(\"]\"===state.tokens.next.id)break;if(this.first.push(expression(10)),\",\"!==state.tokens.next.id)break;if(comma({allowTrailing:!0}),\"]\"===state.tokens.next.id&&!state.inES5()){warning(\"W070\",state.tokens.curr);break}}return b&&(indent-=state.option.indent),advance(\"]\",this),this}),function(x){x.nud=function(){var b,f,i,p,t,nextVal,isGeneratorMethod=!1,props=Object.create(null);b=state.tokens.curr.line!==startLine(state.tokens.next),b&&(indent+=state.option.indent,state.tokens.next.from===indent+state.option.indent&&(indent+=state.option.indent));var blocktype=lookupBlockType();if(blocktype.isDestAssign)return this.destructAssign=destructuringPattern({openingParsed:!0,assignment:!0}),this;for(;\"}\"!==state.tokens.next.id;){if(nextVal=state.tokens.next.value,!state.tokens.next.identifier||\",\"!==peekIgnoreEOL().id&&\"}\"!==peekIgnoreEOL().id)if(\":\"===peek().id||\"get\"!==nextVal&&\"set\"!==nextVal){if(\"*\"===state.tokens.next.value&&\"(punctuator)\"===state.tokens.next.type?(state.inES6()||warning(\"W104\",state.tokens.next,\"generator functions\",\"6\"),advance(\"*\"),isGeneratorMethod=!0):isGeneratorMethod=!1,\"[\"===state.tokens.next.id)i=computedPropertyName(),state.nameStack.set(i);else if(state.nameStack.set(state.tokens.next),i=propertyName(),saveProperty(props,i,state.tokens.next),\"string\"!=typeof i)break;\"(\"===state.tokens.next.value?(state.inES6()||warning(\"W104\",state.tokens.curr,\"concise methods\",\"6\"),doFunction({type:isGeneratorMethod?\"generator\":null})):(advance(\":\"),expression(10))}else advance(nextVal),state.inES5()||error(\"E034\"),i=propertyName(),i||state.inES6()||error(\"E035\"),i&&saveAccessor(nextVal,props,i,state.tokens.curr),t=state.tokens.next,f=doFunction(),p=f[\"(params)\"],\"get\"===nextVal&&i&&p?warning(\"W076\",t,p[0],i):\"set\"!==nextVal||!i||p&&1===p.length||warning(\"W077\",t,i);else state.inES6()||warning(\"W104\",state.tokens.next,\"object short notation\",\"6\"),i=propertyName(!0),saveProperty(props,i,state.tokens.next),expression(10);if(countMember(i),\",\"!==state.tokens.next.id)break;comma({allowTrailing:!0,property:!0}),\",\"===state.tokens.next.id?warning(\"W070\",state.tokens.curr):\"}\"!==state.tokens.next.id||state.inES5()||warning(\"W070\",state.tokens.curr)}return b&&(indent-=state.option.indent),advance(\"}\",this),checkProperties(props),this},x.fud=function(){error(\"E036\",state.tokens.curr)}}(delim(\"{\"));var conststatement=stmt(\"const\",function(context){return blockVariableStatement(\"const\",this,context)});conststatement.exps=!0;var letstatement=stmt(\"let\",function(context){return blockVariableStatement(\"let\",this,context)});letstatement.exps=!0;var varstatement=stmt(\"var\",function(context){var tokens,lone,value,prefix=context&&context.prefix,inexport=context&&context.inexport,implied=context&&context.implied,report=!(context&&context.ignore);for(this.first=[];;){var names=[];_.contains([\"{\",\"[\"],state.tokens.next.value)?(tokens=destructuringPattern(),lone=!1):(tokens=[{id:identifier(),token:state.tokens.curr}],lone=!0),prefix&&implied||!report||!state.option.varstmt||warning(\"W132\",this),this.first=this.first.concat(names);for(var t in tokens)tokens.hasOwnProperty(t)&&(t=tokens[t],!implied&&state.funct[\"(global)\"]&&(predefined[t.id]===!1?warning(\"W079\",t.token,t.id):state.option.futurehostile===!1&&(!state.inES5()&&vars.ecmaIdentifiers[5][t.id]===!1||!state.inES6()&&vars.ecmaIdentifiers[6][t.id]===!1)&&warning(\"W129\",t.token,t.id)),t.id&&(\"for\"===implied?(state.funct[\"(scope)\"].has(t.id)||report&&warning(\"W088\",t.token,t.id),state.funct[\"(scope)\"].block.use(t.id,t.token)):(state.funct[\"(scope)\"].addlabel(t.id,{type:\"var\",token:t.token}),lone&&inexport&&state.funct[\"(scope)\"].setExported(t.id,t.token)),names.push(t.token)));if(\"=\"===state.tokens.next.id&&(state.nameStack.set(state.tokens.curr),advance(\"=\"),prefix||!report||state.funct[\"(loopage)\"]||\"undefined\"!==state.tokens.next.id||warning(\"W080\",state.tokens.prev,state.tokens.prev.value),\"=\"===peek(0).id&&state.tokens.next.identifier&&(!prefix&&report&&!state.funct[\"(params)\"]||-1===state.funct[\"(params)\"].indexOf(state.tokens.next.value))&&warning(\"W120\",state.tokens.next,state.tokens.next.value),value=expression(prefix?120:10),lone?tokens[0].first=value:destructuringPatternMatch(names,value)),\",\"!==state.tokens.next.id)break;comma()}return this});varstatement.exps=!0,blockstmt(\"class\",function(){return classdef.call(this,!0)}),blockstmt(\"function\",function(context){var inexport=context&&context.inexport,generator=!1;\"*\"===state.tokens.next.value&&(advance(\"*\"),state.inES6({strict:!0})?generator=!0:warning(\"W119\",state.tokens.curr,\"function*\",\"6\")),inblock&&warning(\"W082\",state.tokens.curr);var i=optionalidentifier();return state.funct[\"(scope)\"].addlabel(i,{type:\"function\",token:state.tokens.curr}),void 0===i?warning(\"W025\"):inexport&&state.funct[\"(scope)\"].setExported(i,state.tokens.prev),doFunction({name:i,statement:this,type:generator?\"generator\":null,ignoreLoopFunc:inblock}),\"(\"===state.tokens.next.id&&state.tokens.next.line===state.tokens.curr.line&&error(\"E039\"),this}),prefix(\"function\",function(){var generator=!1;\"*\"===state.tokens.next.value&&(state.inES6()||warning(\"W119\",state.tokens.curr,\"function*\",\"6\"),advance(\"*\"),generator=!0);var i=optionalidentifier();return doFunction({name:i,type:generator?\"generator\":null}),this}),blockstmt(\"if\",function(){var t=state.tokens.next;increaseComplexityCount(),state.condition=!0,advance(\"(\");var expr=expression(0);checkCondAssignment(expr);var forinifcheck=null;state.option.forin&&state.forinifcheckneeded&&(state.forinifcheckneeded=!1,forinifcheck=state.forinifchecks[state.forinifchecks.length-1],forinifcheck.type=\"(punctuator)\"===expr.type&&\"!\"===expr.value?\"(negative)\":\"(positive)\"),advance(\")\",t),state.condition=!1;var s=block(!0,!0);return forinifcheck&&\"(negative)\"===forinifcheck.type&&s&&s[0]&&\"(identifier)\"===s[0].type&&\"continue\"===s[0].value&&(forinifcheck.type=\"(negative-with-continue)\"),\"else\"===state.tokens.next.id&&(advance(\"else\"),\"if\"===state.tokens.next.id||\"switch\"===state.tokens.next.id?statement():block(!0,!0)),this}),blockstmt(\"try\",function(){function doCatch(){if(advance(\"catch\"),advance(\"(\"),state.funct[\"(scope)\"].stack(\"catchparams\"),checkPunctuators(state.tokens.next,[\"[\",\"{\"])){var tokens=destructuringPattern();_.each(tokens,function(token){token.id&&state.funct[\"(scope)\"].addParam(token.id,token,\"exception\")})}else\"(identifier)\"!==state.tokens.next.type?warning(\"E030\",state.tokens.next,state.tokens.next.value):state.funct[\"(scope)\"].addParam(identifier(),state.tokens.curr,\"exception\");\"if\"===state.tokens.next.value&&(state.inMoz()||warning(\"W118\",state.tokens.curr,\"catch filter\"),advance(\"if\"),expression(0)),advance(\")\"),block(!1),state.funct[\"(scope)\"].unstack()}var b;for(block(!0);\"catch\"===state.tokens.next.id;)increaseComplexityCount(),b&&!state.inMoz()&&warning(\"W118\",state.tokens.next,\"multiple catch blocks\"),doCatch(),b=!0;return\"finally\"===state.tokens.next.id?(advance(\"finally\"),block(!0),void 0):(b||error(\"E021\",state.tokens.next,\"catch\",state.tokens.next.value),this)}),blockstmt(\"while\",function(){var t=state.tokens.next;return state.funct[\"(breakage)\"]+=1,state.funct[\"(loopage)\"]+=1,increaseComplexityCount(),advance(\"(\"),checkCondAssignment(expression(0)),advance(\")\",t),block(!0,!0),state.funct[\"(breakage)\"]-=1,state.funct[\"(loopage)\"]-=1,this}).labelled=!0,blockstmt(\"with\",function(){var t=state.tokens.next;return state.isStrict()?error(\"E010\",state.tokens.curr):state.option.withstmt||warning(\"W085\",state.tokens.curr),advance(\"(\"),expression(0),advance(\")\",t),block(!0,!0),this}),blockstmt(\"switch\",function(){var t=state.tokens.next,g=!1,noindent=!1;\nfor(state.funct[\"(breakage)\"]+=1,advance(\"(\"),checkCondAssignment(expression(0)),advance(\")\",t),t=state.tokens.next,advance(\"{\"),state.tokens.next.from===indent&&(noindent=!0),noindent||(indent+=state.option.indent),this.cases=[];;)switch(state.tokens.next.id){case\"case\":switch(state.funct[\"(verb)\"]){case\"yield\":case\"break\":case\"case\":case\"continue\":case\"return\":case\"switch\":case\"throw\":break;default:state.tokens.curr.caseFallsThrough||warning(\"W086\",state.tokens.curr,\"case\")}advance(\"case\"),this.cases.push(expression(0)),increaseComplexityCount(),g=!0,advance(\":\"),state.funct[\"(verb)\"]=\"case\";break;case\"default\":switch(state.funct[\"(verb)\"]){case\"yield\":case\"break\":case\"continue\":case\"return\":case\"throw\":break;default:this.cases.length&&(state.tokens.curr.caseFallsThrough||warning(\"W086\",state.tokens.curr,\"default\"))}advance(\"default\"),g=!0,advance(\":\");break;case\"}\":return noindent||(indent-=state.option.indent),advance(\"}\",t),state.funct[\"(breakage)\"]-=1,state.funct[\"(verb)\"]=void 0,void 0;case\"(end)\":return error(\"E023\",state.tokens.next,\"}\"),void 0;default:if(indent+=state.option.indent,g)switch(state.tokens.curr.id){case\",\":return error(\"E040\"),void 0;case\":\":g=!1,statements();break;default:return error(\"E025\",state.tokens.curr),void 0}else{if(\":\"!==state.tokens.curr.id)return error(\"E021\",state.tokens.next,\"case\",state.tokens.next.value),void 0;advance(\":\"),error(\"E024\",state.tokens.curr,\":\"),statements()}indent-=state.option.indent}return this}).labelled=!0,stmt(\"debugger\",function(){return state.option.debug||warning(\"W087\",this),this}).exps=!0,function(){var x=stmt(\"do\",function(){state.funct[\"(breakage)\"]+=1,state.funct[\"(loopage)\"]+=1,increaseComplexityCount(),this.first=block(!0,!0),advance(\"while\");var t=state.tokens.next;return advance(\"(\"),checkCondAssignment(expression(0)),advance(\")\",t),state.funct[\"(breakage)\"]-=1,state.funct[\"(loopage)\"]-=1,this});x.labelled=!0,x.exps=!0}(),blockstmt(\"for\",function(){var s,t=state.tokens.next,letscope=!1,foreachtok=null;\"each\"===t.value&&(foreachtok=t,advance(\"each\"),state.inMoz()||warning(\"W118\",state.tokens.curr,\"for each\")),increaseComplexityCount(),advance(\"(\");var nextop,comma,initializer,i=0,inof=[\"in\",\"of\"],level=0;checkPunctuators(state.tokens.next,[\"{\",\"[\"])&&++level;do{if(nextop=peek(i),++i,checkPunctuators(nextop,[\"{\",\"[\"])?++level:checkPunctuators(nextop,[\"}\",\"]\"])&&--level,0>level)break;0===level&&(!comma&&checkPunctuator(nextop,\",\")?comma=nextop:!initializer&&checkPunctuator(nextop,\"=\")&&(initializer=nextop))}while(level>0||!_.contains(inof,nextop.value)&&\";\"!==nextop.value&&\"(end)\"!==nextop.type);if(_.contains(inof,nextop.value)){state.inES6()||\"of\"!==nextop.value||warning(\"W104\",nextop,\"for of\",\"6\");var ok=!(initializer||comma);if(initializer&&error(\"W133\",comma,nextop.value,\"initializer is forbidden\"),comma&&error(\"W133\",comma,nextop.value,\"more than one ForBinding\"),\"var\"===state.tokens.next.id?(advance(\"var\"),state.tokens.curr.fud({prefix:!0})):\"let\"===state.tokens.next.id||\"const\"===state.tokens.next.id?(advance(state.tokens.next.id),letscope=!0,state.funct[\"(scope)\"].stack(),state.tokens.curr.fud({prefix:!0})):Object.create(varstatement).fud({prefix:!0,implied:\"for\",ignore:!ok}),advance(nextop.value),expression(20),advance(\")\",t),\"in\"===nextop.value&&state.option.forin&&(state.forinifcheckneeded=!0,void 0===state.forinifchecks&&(state.forinifchecks=[]),state.forinifchecks.push({type:\"(none)\"})),state.funct[\"(breakage)\"]+=1,state.funct[\"(loopage)\"]+=1,s=block(!0,!0),\"in\"===nextop.value&&state.option.forin){if(state.forinifchecks&&state.forinifchecks.length>0){var check=state.forinifchecks.pop();(s&&s.length>0&&(\"object\"!=typeof s[0]||\"if\"!==s[0].value)||\"(positive)\"===check.type&&s.length>1||\"(negative)\"===check.type)&&warning(\"W089\",this)}state.forinifcheckneeded=!1}state.funct[\"(breakage)\"]-=1,state.funct[\"(loopage)\"]-=1}else{if(foreachtok&&error(\"E045\",foreachtok),\";\"!==state.tokens.next.id)if(\"var\"===state.tokens.next.id)advance(\"var\"),state.tokens.curr.fud();else if(\"let\"===state.tokens.next.id)advance(\"let\"),letscope=!0,state.funct[\"(scope)\"].stack(),state.tokens.curr.fud();else for(;expression(0,\"for\"),\",\"===state.tokens.next.id;)comma();if(nolinebreak(state.tokens.curr),advance(\";\"),state.funct[\"(loopage)\"]+=1,\";\"!==state.tokens.next.id&&checkCondAssignment(expression(0)),nolinebreak(state.tokens.curr),advance(\";\"),\";\"===state.tokens.next.id&&error(\"E021\",state.tokens.next,\")\",\";\"),\")\"!==state.tokens.next.id)for(;expression(0,\"for\"),\",\"===state.tokens.next.id;)comma();advance(\")\",t),state.funct[\"(breakage)\"]+=1,block(!0,!0),state.funct[\"(breakage)\"]-=1,state.funct[\"(loopage)\"]-=1}return letscope&&state.funct[\"(scope)\"].unstack(),this}).labelled=!0,stmt(\"break\",function(){var v=state.tokens.next.value;return state.option.asi||nolinebreak(this),\";\"===state.tokens.next.id||state.tokens.next.reach||state.tokens.curr.line!==startLine(state.tokens.next)?0===state.funct[\"(breakage)\"]&&warning(\"W052\",state.tokens.next,this.value):(state.funct[\"(scope)\"].funct.hasBreakLabel(v)||warning(\"W090\",state.tokens.next,v),this.first=state.tokens.next,advance()),reachable(this),this}).exps=!0,stmt(\"continue\",function(){var v=state.tokens.next.value;return 0===state.funct[\"(breakage)\"]&&warning(\"W052\",state.tokens.next,this.value),state.funct[\"(loopage)\"]||warning(\"W052\",state.tokens.next,this.value),state.option.asi||nolinebreak(this),\";\"===state.tokens.next.id||state.tokens.next.reach||state.tokens.curr.line===startLine(state.tokens.next)&&(state.funct[\"(scope)\"].funct.hasBreakLabel(v)||warning(\"W090\",state.tokens.next,v),this.first=state.tokens.next,advance()),reachable(this),this}).exps=!0,stmt(\"return\",function(){return this.line===startLine(state.tokens.next)?\";\"===state.tokens.next.id||state.tokens.next.reach||(this.first=expression(0),!this.first||\"(punctuator)\"!==this.first.type||\"=\"!==this.first.value||this.first.paren||state.option.boss||warningAt(\"W093\",this.first.line,this.first.character)):\"(punctuator)\"===state.tokens.next.type&&[\"[\",\"{\",\"+\",\"-\"].indexOf(state.tokens.next.value)>-1&&nolinebreak(this),reachable(this),this}).exps=!0,function(x){x.exps=!0,x.lbp=25}(prefix(\"yield\",function(){var prev=state.tokens.prev;state.inES6(!0)&&!state.funct[\"(generator)\"]?\"(catch)\"===state.funct[\"(name)\"]&&state.funct[\"(context)\"][\"(generator)\"]||error(\"E046\",state.tokens.curr,\"yield\"):state.inES6()||warning(\"W104\",state.tokens.curr,\"yield\",\"6\"),state.funct[\"(generator)\"]=\"yielded\";var delegatingYield=!1;return\"*\"===state.tokens.next.value&&(delegatingYield=!0,advance(\"*\")),this.line!==startLine(state.tokens.next)&&state.inMoz()?state.option.asi||nolinebreak(this):((delegatingYield||\";\"!==state.tokens.next.id&&!state.option.asi&&!state.tokens.next.reach&&state.tokens.next.nud)&&(nobreaknonadjacent(state.tokens.curr,state.tokens.next),this.first=expression(10),\"(punctuator)\"!==this.first.type||\"=\"!==this.first.value||this.first.paren||state.option.boss||warningAt(\"W093\",this.first.line,this.first.character)),state.inMoz()&&\")\"!==state.tokens.next.id&&(prev.lbp>30||!prev.assign&&!isEndOfExpr()||\"yield\"===prev.id)&&error(\"E050\",this)),this})),stmt(\"throw\",function(){return nolinebreak(this),this.first=expression(20),reachable(this),this}).exps=!0,stmt(\"import\",function(){if(state.inES6()||warning(\"W119\",state.tokens.curr,\"import\",\"6\"),\"(string)\"===state.tokens.next.type)return advance(\"(string)\"),this;if(state.tokens.next.identifier){if(this.name=identifier(),state.funct[\"(scope)\"].addlabel(this.name,{type:\"const\",token:state.tokens.curr}),\",\"!==state.tokens.next.value)return advance(\"from\"),advance(\"(string)\"),this;advance(\",\")}if(\"*\"===state.tokens.next.id)advance(\"*\"),advance(\"as\"),state.tokens.next.identifier&&(this.name=identifier(),state.funct[\"(scope)\"].addlabel(this.name,{type:\"const\",token:state.tokens.curr}));else for(advance(\"{\");;){if(\"}\"===state.tokens.next.value){advance(\"}\");break}var importName;if(\"default\"===state.tokens.next.type?(importName=\"default\",advance(\"default\")):importName=identifier(),\"as\"===state.tokens.next.value&&(advance(\"as\"),importName=identifier()),state.funct[\"(scope)\"].addlabel(importName,{type:\"const\",token:state.tokens.curr}),\",\"!==state.tokens.next.value){if(\"}\"===state.tokens.next.value){advance(\"}\");break}error(\"E024\",state.tokens.next,state.tokens.next.value);break}advance(\",\")}return advance(\"from\"),advance(\"(string)\"),this}).exps=!0,stmt(\"export\",function(){var token,identifier,ok=!0;if(state.inES6()||(warning(\"W119\",state.tokens.curr,\"export\",\"6\"),ok=!1),state.funct[\"(scope)\"].block.isGlobal()||(error(\"E053\",state.tokens.curr),ok=!1),\"*\"===state.tokens.next.value)return advance(\"*\"),advance(\"from\"),advance(\"(string)\"),this;if(\"default\"===state.tokens.next.type){state.nameStack.set(state.tokens.next),advance(\"default\");var exportType=state.tokens.next.id;return(\"function\"===exportType||\"class\"===exportType)&&(this.block=!0),token=peek(),expression(10),identifier=token.value,this.block&&(state.funct[\"(scope)\"].addlabel(identifier,{type:exportType,token:token}),state.funct[\"(scope)\"].setExported(identifier,token)),this}if(\"{\"===state.tokens.next.value){advance(\"{\");for(var exportedTokens=[];;){if(state.tokens.next.identifier||error(\"E030\",state.tokens.next,state.tokens.next.value),advance(),exportedTokens.push(state.tokens.curr),\"as\"===state.tokens.next.value&&(advance(\"as\"),state.tokens.next.identifier||error(\"E030\",state.tokens.next,state.tokens.next.value),advance()),\",\"!==state.tokens.next.value){if(\"}\"===state.tokens.next.value){advance(\"}\");break}error(\"E024\",state.tokens.next,state.tokens.next.value);break}advance(\",\")}return\"from\"===state.tokens.next.value?(advance(\"from\"),advance(\"(string)\")):ok&&exportedTokens.forEach(function(token){state.funct[\"(scope)\"].setExported(token.value,token)}),this}if(\"var\"===state.tokens.next.id)advance(\"var\"),state.tokens.curr.fud({inexport:!0});else if(\"let\"===state.tokens.next.id)advance(\"let\"),state.tokens.curr.fud({inexport:!0});else if(\"const\"===state.tokens.next.id)advance(\"const\"),state.tokens.curr.fud({inexport:!0});else if(\"function\"===state.tokens.next.id)this.block=!0,advance(\"function\"),state.syntax[\"function\"].fud({inexport:!0});else if(\"class\"===state.tokens.next.id){this.block=!0,advance(\"class\");var classNameToken=state.tokens.next;state.syntax[\"class\"].fud(),state.funct[\"(scope)\"].setExported(classNameToken.value,classNameToken)}else error(\"E024\",state.tokens.next,state.tokens.next.value);return this}).exps=!0,FutureReservedWord(\"abstract\"),FutureReservedWord(\"boolean\"),FutureReservedWord(\"byte\"),FutureReservedWord(\"char\"),FutureReservedWord(\"class\",{es5:!0,nud:classdef}),FutureReservedWord(\"double\"),FutureReservedWord(\"enum\",{es5:!0}),FutureReservedWord(\"export\",{es5:!0}),FutureReservedWord(\"extends\",{es5:!0}),FutureReservedWord(\"final\"),FutureReservedWord(\"float\"),FutureReservedWord(\"goto\"),FutureReservedWord(\"implements\",{es5:!0,strictOnly:!0}),FutureReservedWord(\"import\",{es5:!0}),FutureReservedWord(\"int\"),FutureReservedWord(\"interface\",{es5:!0,strictOnly:!0}),FutureReservedWord(\"long\"),FutureReservedWord(\"native\"),FutureReservedWord(\"package\",{es5:!0,strictOnly:!0}),FutureReservedWord(\"private\",{es5:!0,strictOnly:!0}),FutureReservedWord(\"protected\",{es5:!0,strictOnly:!0}),FutureReservedWord(\"public\",{es5:!0,strictOnly:!0}),FutureReservedWord(\"short\"),FutureReservedWord(\"static\",{es5:!0,strictOnly:!0}),FutureReservedWord(\"super\",{es5:!0}),FutureReservedWord(\"synchronized\"),FutureReservedWord(\"transient\"),FutureReservedWord(\"volatile\");var lookupBlockType=function(){var pn,pn1,prev,i=-1,bracketStack=0,ret={};checkPunctuators(state.tokens.curr,[\"[\",\"{\"])&&(bracketStack+=1);do{if(prev=-1===i?state.tokens.curr:pn,pn=-1===i?state.tokens.next:peek(i),pn1=peek(i+1),i+=1,checkPunctuators(pn,[\"[\",\"{\"])?bracketStack+=1:checkPunctuators(pn,[\"]\",\"}\"])&&(bracketStack-=1),1===bracketStack&&pn.identifier&&\"for\"===pn.value&&!checkPunctuator(prev,\".\")){ret.isCompArray=!0,ret.notJson=!0;break}if(0===bracketStack&&checkPunctuators(pn,[\"}\",\"]\"])){if(\"=\"===pn1.value){ret.isDestAssign=!0,ret.notJson=!0;break}if(\".\"===pn1.value){ret.notJson=!0;break}}checkPunctuator(pn,\";\")&&(ret.isBlock=!0,ret.notJson=!0)}while(bracketStack>0&&\"(end)\"!==pn.id);return ret},arrayComprehension=function(){function declare(v){var l=_current.variables.filter(function(elt){return elt.value===v?(elt.undef=!1,v):void 0}).length;return 0!==l}function use(v){var l=_current.variables.filter(function(elt){return elt.value!==v||elt.undef?void 0:(elt.unused===!0&&(elt.unused=!1),v)}).length;return 0===l}var _current,CompArray=function(){this.mode=\"use\",this.variables=[]},_carrays=[];return{stack:function(){_current=new CompArray,_carrays.push(_current)},unstack:function(){_current.variables.filter(function(v){v.unused&&warning(\"W098\",v.token,v.raw_text||v.value),v.undef&&state.funct[\"(scope)\"].block.use(v.value,v.token)}),_carrays.splice(-1,1),_current=_carrays[_carrays.length-1]},setState:function(s){_.contains([\"use\",\"define\",\"generate\",\"filter\"],s)&&(_current.mode=s)},check:function(v){return _current?_current&&\"use\"===_current.mode?(use(v)&&_current.variables.push({funct:state.funct,token:state.tokens.curr,value:v,undef:!0,unused:!1}),!0):_current&&\"define\"===_current.mode?(declare(v)||_current.variables.push({funct:state.funct,token:state.tokens.curr,value:v,undef:!1,unused:!0}),!0):_current&&\"generate\"===_current.mode?(state.funct[\"(scope)\"].block.use(v,state.tokens.curr),!0):_current&&\"filter\"===_current.mode?(use(v)&&state.funct[\"(scope)\"].block.use(v,state.tokens.curr),!0):!1:void 0}}},escapeRegex=function(str){return str.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")},itself=function(s,o,g){function each(obj,cb){obj&&(Array.isArray(obj)||\"object\"!=typeof obj||(obj=Object.keys(obj)),obj.forEach(cb))}var i,k,x,reIgnoreStr,reIgnore,optionKeys,newOptionObj={},newIgnoredObj={};o=_.clone(o),state.reset(),o&&o.scope?JSHINT.scope=o.scope:(JSHINT.errors=[],JSHINT.undefs=[],JSHINT.internals=[],JSHINT.blacklist={},JSHINT.scope=\"(main)\"),predefined=Object.create(null),combine(predefined,vars.ecmaIdentifiers[3]),combine(predefined,vars.reservedVars),combine(predefined,g||{}),declared=Object.create(null);var exported=Object.create(null);if(o)for(each(o.predef||null,function(item){var slice,prop;\"-\"===item[0]?(slice=item.slice(1),JSHINT.blacklist[slice]=slice,delete predefined[slice]):(prop=Object.getOwnPropertyDescriptor(o.predef,item),predefined[item]=prop?prop.value:!1)}),each(o.exported||null,function(item){exported[item]=!0}),delete o.predef,delete o.exported,optionKeys=Object.keys(o),x=0;optionKeys.length>x;x++)if(/^-W\\d{3}$/g.test(optionKeys[x]))newIgnoredObj[optionKeys[x].slice(1)]=!0;else{var optionKey=optionKeys[x];newOptionObj[optionKey]=o[optionKey],(\"esversion\"===optionKey&&5===o[optionKey]||\"es5\"===optionKey&&o[optionKey])&&warning(\"I003\"),\"newcap\"===optionKeys[x]&&o[optionKey]===!1&&(newOptionObj[\"(explicitNewcap)\"]=!0)}state.option=newOptionObj,state.ignored=newIgnoredObj,state.option.indent=state.option.indent||4,state.option.maxerr=state.option.maxerr||50,indent=1;var scopeManagerInst=scopeManager(state,predefined,exported,declared);if(scopeManagerInst.on(\"warning\",function(ev){warning.apply(null,[ev.code,ev.token].concat(ev.data))}),scopeManagerInst.on(\"error\",function(ev){error.apply(null,[ev.code,ev.token].concat(ev.data))}),state.funct=functor(\"(global)\",null,{\"(global)\":!0,\"(scope)\":scopeManagerInst,\"(comparray)\":arrayComprehension(),\"(metrics)\":createMetrics(state.tokens.next)}),functions=[state.funct],urls=[],stack=null,member={},membersOnly=null,inblock=!1,lookahead=[],!isString(s)&&!Array.isArray(s))return errorAt(\"E004\",0),!1;api={get isJSON(){return state.jsonMode},getOption:function(name){return state.option[name]||null},getCache:function(name){return state.cache[name]},setCache:function(name,value){state.cache[name]=value},warn:function(code,data){warningAt.apply(null,[code,data.line,data.char].concat(data.data))},on:function(names,listener){names.split(\" \").forEach(function(name){emitter.on(name,listener)}.bind(this))}},emitter.removeAllListeners(),(extraModules||[]).forEach(function(func){func(api)}),state.tokens.prev=state.tokens.curr=state.tokens.next=state.syntax[\"(begin)\"],o&&o.ignoreDelimiters&&(Array.isArray(o.ignoreDelimiters)||(o.ignoreDelimiters=[o.ignoreDelimiters]),o.ignoreDelimiters.forEach(function(delimiterPair){delimiterPair.start&&delimiterPair.end&&(reIgnoreStr=escapeRegex(delimiterPair.start)+\"[\\\\s\\\\S]*?\"+escapeRegex(delimiterPair.end),reIgnore=RegExp(reIgnoreStr,\"ig\"),s=s.replace(reIgnore,function(match){return match.replace(/./g,\" \")}))})),lex=new Lexer(s),lex.on(\"warning\",function(ev){warningAt.apply(null,[ev.code,ev.line,ev.character].concat(ev.data))}),lex.on(\"error\",function(ev){errorAt.apply(null,[ev.code,ev.line,ev.character].concat(ev.data))}),lex.on(\"fatal\",function(ev){quit(\"E041\",ev.line,ev.from)}),lex.on(\"Identifier\",function(ev){emitter.emit(\"Identifier\",ev)}),lex.on(\"String\",function(ev){emitter.emit(\"String\",ev)}),lex.on(\"Number\",function(ev){emitter.emit(\"Number\",ev)}),lex.start();for(var name in o)_.has(o,name)&&checkOption(name,state.tokens.curr);assume(),combine(predefined,g||{}),comma.first=!0;try{switch(advance(),state.tokens.next.id){case\"{\":case\"[\":destructuringAssignOrJsonValue();break;default:directives(),state.directive[\"use strict\"]&&\"global\"!==state.option.strict&&warning(\"W097\",state.tokens.prev),statements()}\"(end)\"!==state.tokens.next.id&&quit(\"E041\",state.tokens.curr.line),state.funct[\"(scope)\"].unstack()}catch(err){if(!err||\"JSHintError\"!==err.name)throw err;var nt=state.tokens.next||{};JSHINT.errors.push({scope:\"(main)\",raw:err.raw,code:err.code,reason:err.message,line:err.line||nt.line,character:err.character||nt.from},null)}if(\"(main)\"===JSHINT.scope)for(o=o||{},i=0;JSHINT.internals.length>i;i+=1)k=JSHINT.internals[i],o.scope=k.elem,itself(k.value,o,g);return 0===JSHINT.errors.length};return itself.addModule=function(func){extraModules.push(func)},itself.addModule(style.register),itself.data=function(){var fu,f,i,j,n,globals,data={functions:[],options:state.option};itself.errors.length&&(data.errors=itself.errors),state.jsonMode&&(data.json=!0);var impliedGlobals=state.funct[\"(scope)\"].getImpliedGlobals();for(impliedGlobals.length>0&&(data.implieds=impliedGlobals),urls.length>0&&(data.urls=urls),globals=state.funct[\"(scope)\"].getUsedOrDefinedGlobals(),globals.length>0&&(data.globals=globals),i=1;functions.length>i;i+=1){for(f=functions[i],fu={},j=0;functionicity.length>j;j+=1)fu[functionicity[j]]=[];for(j=0;functionicity.length>j;j+=1)0===fu[functionicity[j]].length&&delete fu[functionicity[j]];fu.name=f[\"(name)\"],fu.param=f[\"(params)\"],fu.line=f[\"(line)\"],fu.character=f[\"(character)\"],fu.last=f[\"(last)\"],fu.lastcharacter=f[\"(lastcharacter)\"],fu.metrics={complexity:f[\"(metrics)\"].ComplexityCount,parameters:f[\"(metrics)\"].arity,statements:f[\"(metrics)\"].statementCount},data.functions.push(fu)}var unuseds=state.funct[\"(scope)\"].getUnuseds();unuseds.length>0&&(data.unused=unuseds);for(n in member)if(\"number\"==typeof member[n]){data.member=member;break}return data},itself.jshint=itself,itself}();\"object\"==typeof exports&&exports&&(exports.JSHINT=JSHINT)},{\"../lodash\":\"/node_modules/jshint/lodash.js\",\"./lex.js\":\"/node_modules/jshint/src/lex.js\",\"./messages.js\":\"/node_modules/jshint/src/messages.js\",\"./options.js\":\"/node_modules/jshint/src/options.js\",\"./reg.js\":\"/node_modules/jshint/src/reg.js\",\"./scope-manager.js\":\"/node_modules/jshint/src/scope-manager.js\",\"./state.js\":\"/node_modules/jshint/src/state.js\",\"./style.js\":\"/node_modules/jshint/src/style.js\",\"./vars.js\":\"/node_modules/jshint/src/vars.js\",events:\"/node_modules/browserify/node_modules/events/events.js\"}],\"/node_modules/jshint/src/lex.js\":[function(_dereq_,module,exports){\"use strict\";function asyncTrigger(){var _checks=[];return{push:function(fn){_checks.push(fn)},check:function(){for(var check=0;_checks.length>check;++check)_checks[check]();_checks.splice(0,_checks.length)}}}function Lexer(source){var lines=source;\"string\"==typeof lines&&(lines=lines.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\").split(\"\\n\")),lines[0]&&\"#!\"===lines[0].substr(0,2)&&(-1!==lines[0].indexOf(\"node\")&&(state.option.node=!0),lines[0]=\"\"),this.emitter=new events.EventEmitter,this.source=source,this.setLines(lines),this.prereg=!0,this.line=0,this.char=1,this.from=1,this.input=\"\",this.inComment=!1,this.context=[],this.templateStarts=[];for(var i=0;state.option.indent>i;i+=1)state.tab+=\" \";this.ignoreLinterErrors=!1}var _=_dereq_(\"../lodash\"),events=_dereq_(\"events\"),reg=_dereq_(\"./reg.js\"),state=_dereq_(\"./state.js\").state,unicodeData=_dereq_(\"../data/ascii-identifier-data.js\"),asciiIdentifierStartTable=unicodeData.asciiIdentifierStartTable,asciiIdentifierPartTable=unicodeData.asciiIdentifierPartTable,Token={Identifier:1,Punctuator:2,NumericLiteral:3,StringLiteral:4,Comment:5,Keyword:6,NullLiteral:7,BooleanLiteral:8,RegExp:9,TemplateHead:10,TemplateMiddle:11,TemplateTail:12,NoSubstTemplate:13},Context={Block:1,Template:2};Lexer.prototype={_lines:[],inContext:function(ctxType){return this.context.length>0&&this.context[this.context.length-1].type===ctxType},pushContext:function(ctxType){this.context.push({type:ctxType})},popContext:function(){return this.context.pop()},isContext:function(context){return this.context.length>0&&this.context[this.context.length-1]===context},currentContext:function(){return this.context.length>0&&this.context[this.context.length-1]},getLines:function(){return this._lines=state.lines,this._lines},setLines:function(val){this._lines=val,state.lines=this._lines},peek:function(i){return this.input.charAt(i||0)},skip:function(i){i=i||1,this.char+=i,this.input=this.input.slice(i)},on:function(names,listener){names.split(\" \").forEach(function(name){this.emitter.on(name,listener)}.bind(this))},trigger:function(){this.emitter.emit.apply(this.emitter,Array.prototype.slice.call(arguments))},triggerAsync:function(type,args,checks,fn){checks.push(function(){fn()&&this.trigger(type,args)}.bind(this))},scanPunctuator:function(){var ch2,ch3,ch4,ch1=this.peek();switch(ch1){case\".\":if(/^[0-9]$/.test(this.peek(1)))return null;if(\".\"===this.peek(1)&&\".\"===this.peek(2))return{type:Token.Punctuator,value:\"...\"};case\"(\":case\")\":case\";\":case\",\":case\"[\":case\"]\":case\":\":case\"~\":case\"?\":return{type:Token.Punctuator,value:ch1};case\"{\":return this.pushContext(Context.Block),{type:Token.Punctuator,value:ch1};case\"}\":return this.inContext(Context.Block)&&this.popContext(),{type:Token.Punctuator,value:ch1};case\"#\":return{type:Token.Punctuator,value:ch1};case\"\":return null}return ch2=this.peek(1),ch3=this.peek(2),ch4=this.peek(3),\">\"===ch1&&\">\"===ch2&&\">\"===ch3&&\"=\"===ch4?{type:Token.Punctuator,value:\">>>=\"}:\"=\"===ch1&&\"=\"===ch2&&\"=\"===ch3?{type:Token.Punctuator,value:\"===\"}:\"!\"===ch1&&\"=\"===ch2&&\"=\"===ch3?{type:Token.Punctuator,value:\"!==\"}:\">\"===ch1&&\">\"===ch2&&\">\"===ch3?{type:Token.Punctuator,value:\">>>\"}:\"<\"===ch1&&\"<\"===ch2&&\"=\"===ch3?{type:Token.Punctuator,value:\"<<=\"}:\">\"===ch1&&\">\"===ch2&&\"=\"===ch3?{type:Token.Punctuator,value:\">>=\"}:\"=\"===ch1&&\">\"===ch2?{type:Token.Punctuator,value:ch1+ch2}:ch1===ch2&&\"+-<>&|\".indexOf(ch1)>=0?{type:Token.Punctuator,value:ch1+ch2}:\"<>=!+-*%&|^\".indexOf(ch1)>=0?\"=\"===ch2?{type:Token.Punctuator,value:ch1+ch2}:{type:Token.Punctuator,value:ch1}:\"/\"===ch1?\"=\"===ch2?{type:Token.Punctuator,value:\"/=\"}:{type:Token.Punctuator,value:\"/\"}:null},scanComments:function(){function commentToken(label,body,opt){var special=[\"jshint\",\"jslint\",\"members\",\"member\",\"globals\",\"global\",\"exported\"],isSpecial=!1,value=label+body,commentType=\"plain\";return opt=opt||{},opt.isMultiline&&(value+=\"*/\"),body=body.replace(/\\n/g,\" \"),\"/*\"===label&®.fallsThrough.test(body)&&(isSpecial=!0,commentType=\"falls through\"),special.forEach(function(str){if(!isSpecial&&(\"//\"!==label||\"jshint\"===str)&&(\" \"===body.charAt(str.length)&&body.substr(0,str.length)===str&&(isSpecial=!0,label+=str,body=body.substr(str.length)),isSpecial||\" \"!==body.charAt(0)||\" \"!==body.charAt(str.length+1)||body.substr(1,str.length)!==str||(isSpecial=!0,label=label+\" \"+str,body=body.substr(str.length+1)),isSpecial))switch(str){case\"member\":commentType=\"members\";break;case\"global\":commentType=\"globals\";break;default:var options=body.split(\":\").map(function(v){return v.replace(/^\\s+/,\"\").replace(/\\s+$/,\"\")});if(2===options.length)switch(options[0]){case\"ignore\":switch(options[1]){case\"start\":self.ignoringLinterErrors=!0,isSpecial=!1;break;case\"end\":self.ignoringLinterErrors=!1,isSpecial=!1}}commentType=str}}),{type:Token.Comment,commentType:commentType,value:value,body:body,isSpecial:isSpecial,isMultiline:opt.isMultiline||!1,isMalformed:opt.isMalformed||!1}}var ch1=this.peek(),ch2=this.peek(1),rest=this.input.substr(2),startLine=this.line,startChar=this.char,self=this;if(\"*\"===ch1&&\"/\"===ch2)return this.trigger(\"error\",{code:\"E018\",line:startLine,character:startChar}),this.skip(2),null;if(\"/\"!==ch1||\"*\"!==ch2&&\"/\"!==ch2)return null;if(\"/\"===ch2)return this.skip(this.input.length),commentToken(\"//\",rest);var body=\"\";if(\"*\"===ch2){for(this.inComment=!0,this.skip(2);\"*\"!==this.peek()||\"/\"!==this.peek(1);)if(\"\"===this.peek()){if(body+=\"\\n\",!this.nextLine())return this.trigger(\"error\",{code:\"E017\",line:startLine,character:startChar}),this.inComment=!1,commentToken(\"/*\",body,{isMultiline:!0,isMalformed:!0})}else body+=this.peek(),this.skip();return this.skip(2),this.inComment=!1,commentToken(\"/*\",body,{isMultiline:!0})}},scanKeyword:function(){var result=/^[a-zA-Z_$][a-zA-Z0-9_$]*/.exec(this.input),keywords=[\"if\",\"in\",\"do\",\"var\",\"for\",\"new\",\"try\",\"let\",\"this\",\"else\",\"case\",\"void\",\"with\",\"enum\",\"while\",\"break\",\"catch\",\"throw\",\"const\",\"yield\",\"class\",\"super\",\"return\",\"typeof\",\"delete\",\"switch\",\"export\",\"import\",\"default\",\"finally\",\"extends\",\"function\",\"continue\",\"debugger\",\"instanceof\"];return result&&keywords.indexOf(result[0])>=0?{type:Token.Keyword,value:result[0]}:null},scanIdentifier:function(){function isNonAsciiIdentifierStart(code){return code>256}function isNonAsciiIdentifierPart(code){return code>256}function isHexDigit(str){return/^[0-9a-fA-F]$/.test(str)}function removeEscapeSequences(id){return id.replace(/\\\\u([0-9a-fA-F]{4})/g,function(m0,codepoint){return String.fromCharCode(parseInt(codepoint,16))})}var type,char,id=\"\",index=0,readUnicodeEscapeSequence=function(){if(index+=1,\"u\"!==this.peek(index))return null;var code,ch1=this.peek(index+1),ch2=this.peek(index+2),ch3=this.peek(index+3),ch4=this.peek(index+4);return isHexDigit(ch1)&&isHexDigit(ch2)&&isHexDigit(ch3)&&isHexDigit(ch4)?(code=parseInt(ch1+ch2+ch3+ch4,16),asciiIdentifierPartTable[code]||isNonAsciiIdentifierPart(code)?(index+=5,\"\\\\u\"+ch1+ch2+ch3+ch4):null):null}.bind(this),getIdentifierStart=function(){var chr=this.peek(index),code=chr.charCodeAt(0);return 92===code?readUnicodeEscapeSequence():128>code?asciiIdentifierStartTable[code]?(index+=1,chr):null:isNonAsciiIdentifierStart(code)?(index+=1,chr):null}.bind(this),getIdentifierPart=function(){var chr=this.peek(index),code=chr.charCodeAt(0);return 92===code?readUnicodeEscapeSequence():128>code?asciiIdentifierPartTable[code]?(index+=1,chr):null:isNonAsciiIdentifierPart(code)?(index+=1,chr):null}.bind(this);if(char=getIdentifierStart(),null===char)return null;for(id=char;char=getIdentifierPart(),null!==char;)id+=char;switch(id){case\"true\":case\"false\":type=Token.BooleanLiteral;break;case\"null\":type=Token.NullLiteral;break;default:type=Token.Identifier}return{type:type,value:removeEscapeSequences(id),text:id,tokenLength:id.length}},scanNumericLiteral:function(){function isDecimalDigit(str){return/^[0-9]$/.test(str)}function isOctalDigit(str){return/^[0-7]$/.test(str)}function isBinaryDigit(str){return/^[01]$/.test(str)}function isHexDigit(str){return/^[0-9a-fA-F]$/.test(str)}function isIdentifierStart(ch){return\"$\"===ch||\"_\"===ch||\"\\\\\"===ch||ch>=\"a\"&&\"z\">=ch||ch>=\"A\"&&\"Z\">=ch}var bad,index=0,value=\"\",length=this.input.length,char=this.peek(index),isAllowedDigit=isDecimalDigit,base=10,isLegacy=!1;if(\".\"!==char&&!isDecimalDigit(char))return null;if(\".\"!==char){for(value=this.peek(index),index+=1,char=this.peek(index),\"0\"===value&&((\"x\"===char||\"X\"===char)&&(isAllowedDigit=isHexDigit,base=16,index+=1,value+=char),(\"o\"===char||\"O\"===char)&&(isAllowedDigit=isOctalDigit,base=8,state.inES6(!0)||this.trigger(\"warning\",{code:\"W119\",line:this.line,character:this.char,data:[\"Octal integer literal\",\"6\"]}),index+=1,value+=char),(\"b\"===char||\"B\"===char)&&(isAllowedDigit=isBinaryDigit,base=2,state.inES6(!0)||this.trigger(\"warning\",{code:\"W119\",line:this.line,character:this.char,data:[\"Binary integer literal\",\"6\"]}),index+=1,value+=char),isOctalDigit(char)&&(isAllowedDigit=isOctalDigit,base=8,isLegacy=!0,bad=!1,index+=1,value+=char),!isOctalDigit(char)&&isDecimalDigit(char)&&(index+=1,value+=char));length>index;){if(char=this.peek(index),isLegacy&&isDecimalDigit(char))bad=!0;else if(!isAllowedDigit(char))break;value+=char,index+=1}if(isAllowedDigit!==isDecimalDigit)return!isLegacy&&2>=value.length?{type:Token.NumericLiteral,value:value,isMalformed:!0}:length>index&&(char=this.peek(index),isIdentifierStart(char))?null:{type:Token.NumericLiteral,value:value,base:base,isLegacy:isLegacy,isMalformed:!1}}if(\".\"===char)for(value+=char,index+=1;length>index&&(char=this.peek(index),isDecimalDigit(char));)value+=char,index+=1;if(\"e\"===char||\"E\"===char){if(value+=char,index+=1,char=this.peek(index),(\"+\"===char||\"-\"===char)&&(value+=this.peek(index),index+=1),char=this.peek(index),!isDecimalDigit(char))return null;for(value+=char,index+=1;length>index&&(char=this.peek(index),isDecimalDigit(char));)value+=char,index+=1}return length>index&&(char=this.peek(index),isIdentifierStart(char))?null:{type:Token.NumericLiteral,value:value,base:base,isMalformed:!isFinite(value)}},scanEscapeSequence:function(checks){var allowNewLine=!1,jump=1;this.skip();var char=this.peek();switch(char){case\"'\":this.triggerAsync(\"warning\",{code:\"W114\",line:this.line,character:this.char,data:[\"\\\\'\"]},checks,function(){return state.jsonMode});break;case\"b\":char=\"\\\\b\";break;case\"f\":char=\"\\\\f\";break;case\"n\":char=\"\\\\n\";break;case\"r\":char=\"\\\\r\";break;case\"t\":char=\"\\\\t\";break;case\"0\":char=\"\\\\0\";var n=parseInt(this.peek(1),10);this.triggerAsync(\"warning\",{code:\"W115\",line:this.line,character:this.char},checks,function(){return n>=0&&7>=n&&state.isStrict()});break;case\"u\":var hexCode=this.input.substr(1,4),code=parseInt(hexCode,16);isNaN(code)&&this.trigger(\"warning\",{code:\"W052\",line:this.line,character:this.char,data:[\"u\"+hexCode]}),char=String.fromCharCode(code),jump=5;break;case\"v\":this.triggerAsync(\"warning\",{code:\"W114\",line:this.line,character:this.char,data:[\"\\\\v\"]},checks,function(){return state.jsonMode}),char=\"\u000b\";break;case\"x\":var x=parseInt(this.input.substr(1,2),16);this.triggerAsync(\"warning\",{code:\"W114\",line:this.line,character:this.char,data:[\"\\\\x-\"]},checks,function(){return state.jsonMode}),char=String.fromCharCode(x),jump=3;break;case\"\\\\\":char=\"\\\\\\\\\";break;case'\"':char='\\\\\"';break;case\"/\":break;case\"\":allowNewLine=!0,char=\"\"}return{\"char\":char,jump:jump,allowNewLine:allowNewLine}},scanTemplateLiteral:function(checks){var tokenType,ch,value=\"\",startLine=this.line,startChar=this.char,depth=this.templateStarts.length;if(!state.inES6(!0))return null;if(\"`\"===this.peek())tokenType=Token.TemplateHead,this.templateStarts.push({line:this.line,\"char\":this.char}),depth=this.templateStarts.length,this.skip(1),this.pushContext(Context.Template);else{if(!this.inContext(Context.Template)||\"}\"!==this.peek())return null;tokenType=Token.TemplateMiddle}for(;\"`\"!==this.peek();){for(;\"\"===(ch=this.peek());)if(value+=\"\\n\",!this.nextLine()){var startPos=this.templateStarts.pop();return this.trigger(\"error\",{code:\"E052\",line:startPos.line,character:startPos.char}),{type:tokenType,value:value,startLine:startLine,startChar:startChar,isUnclosed:!0,depth:depth,context:this.popContext()}}if(\"$\"===ch&&\"{\"===this.peek(1))return value+=\"${\",this.skip(2),{type:tokenType,value:value,startLine:startLine,startChar:startChar,isUnclosed:!1,depth:depth,context:this.currentContext()};\nif(\"\\\\\"===ch){var escape=this.scanEscapeSequence(checks);value+=escape.char,this.skip(escape.jump)}else\"`\"!==ch&&(value+=ch,this.skip(1))}return tokenType=tokenType===Token.TemplateHead?Token.NoSubstTemplate:Token.TemplateTail,this.skip(1),this.templateStarts.pop(),{type:tokenType,value:value,startLine:startLine,startChar:startChar,isUnclosed:!1,depth:depth,context:this.popContext()}},scanStringLiteral:function(checks){var quote=this.peek();if('\"'!==quote&&\"'\"!==quote)return null;this.triggerAsync(\"warning\",{code:\"W108\",line:this.line,character:this.char},checks,function(){return state.jsonMode&&'\"'!==quote});var value=\"\",startLine=this.line,startChar=this.char,allowNewLine=!1;for(this.skip();this.peek()!==quote;)if(\"\"===this.peek()){if(allowNewLine?(allowNewLine=!1,this.triggerAsync(\"warning\",{code:\"W043\",line:this.line,character:this.char},checks,function(){return!state.option.multistr}),this.triggerAsync(\"warning\",{code:\"W042\",line:this.line,character:this.char},checks,function(){return state.jsonMode&&state.option.multistr})):this.trigger(\"warning\",{code:\"W112\",line:this.line,character:this.char}),!this.nextLine())return this.trigger(\"error\",{code:\"E029\",line:startLine,character:startChar}),{type:Token.StringLiteral,value:value,startLine:startLine,startChar:startChar,isUnclosed:!0,quote:quote}}else{allowNewLine=!1;var char=this.peek(),jump=1;if(\" \">char&&this.trigger(\"warning\",{code:\"W113\",line:this.line,character:this.char,data:[\"\"]}),\"\\\\\"===char){var parsed=this.scanEscapeSequence(checks);char=parsed.char,jump=parsed.jump,allowNewLine=parsed.allowNewLine}value+=char,this.skip(jump)}return this.skip(),{type:Token.StringLiteral,value:value,startLine:startLine,startChar:startChar,isUnclosed:!1,quote:quote}},scanRegExp:function(){var terminated,index=0,length=this.input.length,char=this.peek(),value=char,body=\"\",flags=[],malformed=!1,isCharSet=!1,scanUnexpectedChars=function(){\" \">char&&(malformed=!0,this.trigger(\"warning\",{code:\"W048\",line:this.line,character:this.char})),\"<\"===char&&(malformed=!0,this.trigger(\"warning\",{code:\"W049\",line:this.line,character:this.char,data:[char]}))}.bind(this);if(!this.prereg||\"/\"!==char)return null;for(index+=1,terminated=!1;length>index;)if(char=this.peek(index),value+=char,body+=char,isCharSet)\"]\"===char&&(\"\\\\\"!==this.peek(index-1)||\"\\\\\"===this.peek(index-2))&&(isCharSet=!1),\"\\\\\"===char&&(index+=1,char=this.peek(index),body+=char,value+=char,scanUnexpectedChars()),index+=1;else{if(\"\\\\\"===char){if(index+=1,char=this.peek(index),body+=char,value+=char,scanUnexpectedChars(),\"/\"===char){index+=1;continue}if(\"[\"===char){index+=1;continue}}if(\"[\"!==char){if(\"/\"===char){body=body.substr(0,body.length-1),terminated=!0,index+=1;break}index+=1}else isCharSet=!0,index+=1}if(!terminated)return this.trigger(\"error\",{code:\"E015\",line:this.line,character:this.from}),void this.trigger(\"fatal\",{line:this.line,from:this.from});for(;length>index&&(char=this.peek(index),/[gim]/.test(char));)flags.push(char),value+=char,index+=1;try{RegExp(body,flags.join(\"\"))}catch(err){malformed=!0,this.trigger(\"error\",{code:\"E016\",line:this.line,character:this.char,data:[err.message]})}return{type:Token.RegExp,value:value,flags:flags,isMalformed:malformed}},scanNonBreakingSpaces:function(){return state.option.nonbsp?this.input.search(/(\\u00A0)/):-1},scanUnsafeChars:function(){return this.input.search(reg.unsafeChars)},next:function(checks){this.from=this.char;var start;if(/\\s/.test(this.peek()))for(start=this.char;/\\s/.test(this.peek());)this.from+=1,this.skip();var match=this.scanComments()||this.scanStringLiteral(checks)||this.scanTemplateLiteral(checks);return match?match:(match=this.scanRegExp()||this.scanPunctuator()||this.scanKeyword()||this.scanIdentifier()||this.scanNumericLiteral(),match?(this.skip(match.tokenLength||match.value.length),match):null)},nextLine:function(){var char;if(this.line>=this.getLines().length)return!1;this.input=this.getLines()[this.line],this.line+=1,this.char=1,this.from=1;var inputTrimmed=this.input.trim(),startsWith=function(){return _.some(arguments,function(prefix){return 0===inputTrimmed.indexOf(prefix)})},endsWith=function(){return _.some(arguments,function(suffix){return-1!==inputTrimmed.indexOf(suffix,inputTrimmed.length-suffix.length)})};if(this.ignoringLinterErrors===!0&&(startsWith(\"/*\",\"//\")||this.inComment&&endsWith(\"*/\")||(this.input=\"\")),char=this.scanNonBreakingSpaces(),char>=0&&this.trigger(\"warning\",{code:\"W125\",line:this.line,character:char+1}),this.input=this.input.replace(/\\t/g,state.tab),char=this.scanUnsafeChars(),char>=0&&this.trigger(\"warning\",{code:\"W100\",line:this.line,character:char}),!this.ignoringLinterErrors&&state.option.maxlen&&state.option.maxlen=0;--i){var scopeLabels=_scopeStack[i][\"(labels)\"];if(scopeLabels[labelName])return scopeLabels}}function usedSoFarInCurrentFunction(labelName){for(var i=_scopeStack.length-1;i>=0;i--){var current=_scopeStack[i];if(current[\"(usages)\"][labelName])return current[\"(usages)\"][labelName];if(current===_currentFunctBody)break}return!1}function _checkOuterShadow(labelName,token){if(\"outer\"===state.option.shadow)for(var isGlobal=\"global\"===_currentFunctBody[\"(type)\"],isNewFunction=\"functionparams\"===_current[\"(type)\"],outsideCurrentFunction=!isGlobal,i=0;_scopeStack.length>i;i++){var stackItem=_scopeStack[i];isNewFunction||_scopeStack[i+1]!==_currentFunctBody||(outsideCurrentFunction=!1),outsideCurrentFunction&&stackItem[\"(labels)\"][labelName]&&warning(\"W123\",token,labelName),stackItem[\"(breakLabels)\"][labelName]&&warning(\"W123\",token,labelName)}}function _latedefWarning(type,labelName,token){state.option.latedef&&(state.option.latedef===!0&&\"function\"===type||\"function\"!==type)&&warning(\"W003\",token,labelName)}var _current,_scopeStack=[];_newScope(\"global\"),_current[\"(predefined)\"]=predefined;var _currentFunctBody=_current,usedPredefinedAndGlobals=Object.create(null),impliedGlobals=Object.create(null),unuseds=[],emitter=new events.EventEmitter,_getUnusedOption=function(unused_opt){return void 0===unused_opt&&(unused_opt=state.option.unused),unused_opt===!0&&(unused_opt=\"last-param\"),unused_opt},_warnUnused=function(name,tkn,type,unused_opt){var line=tkn.line,chr=tkn.from,raw_name=tkn.raw_text||name;unused_opt=_getUnusedOption(unused_opt);var warnable_types={vars:[\"var\"],\"last-param\":[\"var\",\"param\"],strict:[\"var\",\"param\",\"last-param\"]};unused_opt&&warnable_types[unused_opt]&&-1!==warnable_types[unused_opt].indexOf(type)&&warning(\"W098\",{line:line,from:chr},raw_name),(unused_opt||\"var\"===type)&&unuseds.push({name:name,line:line,character:chr})},scopeManagerInst={on:function(names,listener){names.split(\" \").forEach(function(name){emitter.on(name,listener)})},isPredefined:function(labelName){return!this.has(labelName)&&_.has(_scopeStack[0][\"(predefined)\"],labelName)},stack:function(type){var previousScope=_current;_newScope(type),type||\"functionparams\"!==previousScope[\"(type)\"]||(_current[\"(isFuncBody)\"]=!0,_current[\"(context)\"]=_currentFunctBody,_currentFunctBody=_current)},unstack:function(){var i,j,subScope=_scopeStack.length>1?_scopeStack[_scopeStack.length-2]:null,isUnstackingFunctionBody=_current===_currentFunctBody,isUnstackingFunctionParams=\"functionparams\"===_current[\"(type)\"],isUnstackingFunctionOuter=\"functionouter\"===_current[\"(type)\"],currentUsages=_current[\"(usages)\"],currentLabels=_current[\"(labels)\"],usedLabelNameList=Object.keys(currentUsages);for(currentUsages.__proto__&&-1===usedLabelNameList.indexOf(\"__proto__\")&&usedLabelNameList.push(\"__proto__\"),i=0;usedLabelNameList.length>i;i++){var usedLabelName=usedLabelNameList[i],usage=currentUsages[usedLabelName],usedLabel=currentLabels[usedLabelName];if(usedLabel){var usedLabelType=usedLabel[\"(type)\"];if(usedLabel[\"(useOutsideOfScope)\"]&&!state.option.funcscope){var usedTokens=usage[\"(tokens)\"];if(usedTokens)for(j=0;usedTokens.length>j;j++)usedLabel[\"(function)\"]===usedTokens[j][\"(function)\"]&&error(\"W038\",usedTokens[j],usedLabelName)}if(_current[\"(labels)\"][usedLabelName][\"(unused)\"]=!1,\"const\"===usedLabelType&&usage[\"(modified)\"])for(j=0;usage[\"(modified)\"].length>j;j++)error(\"E013\",usage[\"(modified)\"][j],usedLabelName);if((\"function\"===usedLabelType||\"class\"===usedLabelType)&&usage[\"(reassigned)\"])for(j=0;usage[\"(reassigned)\"].length>j;j++)error(\"W021\",usage[\"(reassigned)\"][j],usedLabelName,usedLabelType)}else if(isUnstackingFunctionOuter&&(state.funct[\"(isCapturing)\"]=!0),subScope)if(subScope[\"(usages)\"][usedLabelName]){var subScopeUsage=subScope[\"(usages)\"][usedLabelName];subScopeUsage[\"(modified)\"]=subScopeUsage[\"(modified)\"].concat(usage[\"(modified)\"]),subScopeUsage[\"(tokens)\"]=subScopeUsage[\"(tokens)\"].concat(usage[\"(tokens)\"]),subScopeUsage[\"(reassigned)\"]=subScopeUsage[\"(reassigned)\"].concat(usage[\"(reassigned)\"]),subScopeUsage[\"(onlyUsedSubFunction)\"]=!1}else subScope[\"(usages)\"][usedLabelName]=usage,isUnstackingFunctionBody&&(subScope[\"(usages)\"][usedLabelName][\"(onlyUsedSubFunction)\"]=!0);else if(\"boolean\"==typeof _current[\"(predefined)\"][usedLabelName]){if(delete declared[usedLabelName],usedPredefinedAndGlobals[usedLabelName]=marker,_current[\"(predefined)\"][usedLabelName]===!1&&usage[\"(reassigned)\"])for(j=0;usage[\"(reassigned)\"].length>j;j++)warning(\"W020\",usage[\"(reassigned)\"][j])}else if(usage[\"(tokens)\"])for(j=0;usage[\"(tokens)\"].length>j;j++){var undefinedToken=usage[\"(tokens)\"][j];undefinedToken.forgiveUndef||(state.option.undef&&!undefinedToken.ignoreUndef&&warning(\"W117\",undefinedToken,usedLabelName),impliedGlobals[usedLabelName]?impliedGlobals[usedLabelName].line.push(undefinedToken.line):impliedGlobals[usedLabelName]={name:usedLabelName,line:[undefinedToken.line]})}}if(subScope||Object.keys(declared).forEach(function(labelNotUsed){_warnUnused(labelNotUsed,declared[labelNotUsed],\"var\")}),subScope&&!isUnstackingFunctionBody&&!isUnstackingFunctionParams&&!isUnstackingFunctionOuter){var labelNames=Object.keys(currentLabels);for(i=0;labelNames.length>i;i++){var defLabelName=labelNames[i];currentLabels[defLabelName][\"(blockscoped)\"]||\"exception\"===currentLabels[defLabelName][\"(type)\"]||this.funct.has(defLabelName,{excludeCurrent:!0})||(subScope[\"(labels)\"][defLabelName]=currentLabels[defLabelName],\"global\"!==_currentFunctBody[\"(type)\"]&&(subScope[\"(labels)\"][defLabelName][\"(useOutsideOfScope)\"]=!0),delete currentLabels[defLabelName])}}_checkForUnused(),_scopeStack.pop(),isUnstackingFunctionBody&&(_currentFunctBody=_scopeStack[_.findLastIndex(_scopeStack,function(scope){return scope[\"(isFuncBody)\"]||\"global\"===scope[\"(type)\"]})]),_current=subScope},addParam:function(labelName,token,type){if(type=type||\"param\",\"exception\"===type){var previouslyDefinedLabelType=this.funct.labeltype(labelName);previouslyDefinedLabelType&&\"exception\"!==previouslyDefinedLabelType&&(state.option.node||warning(\"W002\",state.tokens.next,labelName))}if(_.has(_current[\"(labels)\"],labelName)?_current[\"(labels)\"][labelName].duplicated=!0:(_checkOuterShadow(labelName,token,type),_current[\"(labels)\"][labelName]={\"(type)\":type,\"(token)\":token,\"(unused)\":!0},_current[\"(params)\"].push(labelName)),_.has(_current[\"(usages)\"],labelName)){var usage=_current[\"(usages)\"][labelName];usage[\"(onlyUsedSubFunction)\"]?_latedefWarning(type,labelName,token):warning(\"E056\",token,labelName,type)}},validateParams:function(){if(\"global\"!==_currentFunctBody[\"(type)\"]){var isStrict=state.isStrict(),currentFunctParamScope=_currentFunctBody[\"(parent)\"];currentFunctParamScope[\"(params)\"]&¤tFunctParamScope[\"(params)\"].forEach(function(labelName){var label=currentFunctParamScope[\"(labels)\"][labelName];label&&label.duplicated&&(isStrict?warning(\"E011\",label[\"(token)\"],labelName):state.option.shadow!==!0&&warning(\"W004\",label[\"(token)\"],labelName))})}},getUsedOrDefinedGlobals:function(){var list=Object.keys(usedPredefinedAndGlobals);return usedPredefinedAndGlobals.__proto__===marker&&-1===list.indexOf(\"__proto__\")&&list.push(\"__proto__\"),list},getImpliedGlobals:function(){var values=_.values(impliedGlobals),hasProto=!1;return impliedGlobals.__proto__&&(hasProto=values.some(function(value){return\"__proto__\"===value.name}),hasProto||values.push(impliedGlobals.__proto__)),values},getUnuseds:function(){return unuseds},has:function(labelName){return Boolean(_getLabel(labelName))},labeltype:function(labelName){var scopeLabels=_getLabel(labelName);return scopeLabels?scopeLabels[labelName][\"(type)\"]:null},addExported:function(labelName){var globalLabels=_scopeStack[0][\"(labels)\"];if(_.has(declared,labelName))delete declared[labelName];else if(_.has(globalLabels,labelName))globalLabels[labelName][\"(unused)\"]=!1;else{for(var i=1;_scopeStack.length>i;i++){var scope=_scopeStack[i];if(scope[\"(type)\"])break;if(_.has(scope[\"(labels)\"],labelName)&&!scope[\"(labels)\"][labelName][\"(blockscoped)\"])return scope[\"(labels)\"][labelName][\"(unused)\"]=!1,void 0}exported[labelName]=!0}},setExported:function(labelName,token){this.block.use(labelName,token)\n},addlabel:function(labelName,opts){var type=opts.type,token=opts.token,isblockscoped=\"let\"===type||\"const\"===type||\"class\"===type,isexported=\"global\"===(isblockscoped?_current:_currentFunctBody)[\"(type)\"]&&_.has(exported,labelName);if(_checkOuterShadow(labelName,token,type),isblockscoped){var declaredInCurrentScope=_current[\"(labels)\"][labelName];if(declaredInCurrentScope||_current!==_currentFunctBody||\"global\"===_current[\"(type)\"]||(declaredInCurrentScope=!!_currentFunctBody[\"(parent)\"][\"(labels)\"][labelName]),!declaredInCurrentScope&&_current[\"(usages)\"][labelName]){var usage=_current[\"(usages)\"][labelName];usage[\"(onlyUsedSubFunction)\"]?_latedefWarning(type,labelName,token):warning(\"E056\",token,labelName,type)}declaredInCurrentScope?warning(\"E011\",token,labelName):\"outer\"===state.option.shadow&&scopeManagerInst.funct.has(labelName)&&warning(\"W004\",token,labelName),scopeManagerInst.block.add(labelName,type,token,!isexported)}else{var declaredInCurrentFunctionScope=scopeManagerInst.funct.has(labelName);!declaredInCurrentFunctionScope&&usedSoFarInCurrentFunction(labelName)&&_latedefWarning(type,labelName,token),scopeManagerInst.funct.has(labelName,{onlyBlockscoped:!0})?warning(\"E011\",token,labelName):state.option.shadow!==!0&&declaredInCurrentFunctionScope&&\"__proto__\"!==labelName&&\"global\"!==_currentFunctBody[\"(type)\"]&&warning(\"W004\",token,labelName),scopeManagerInst.funct.add(labelName,type,token,!isexported),\"global\"===_currentFunctBody[\"(type)\"]&&(usedPredefinedAndGlobals[labelName]=marker)}},funct:{labeltype:function(labelName,options){for(var onlyBlockscoped=options&&options.onlyBlockscoped,excludeParams=options&&options.excludeParams,currentScopeIndex=_scopeStack.length-(options&&options.excludeCurrent?2:1),i=currentScopeIndex;i>=0;i--){var current=_scopeStack[i];if(current[\"(labels)\"][labelName]&&(!onlyBlockscoped||current[\"(labels)\"][labelName][\"(blockscoped)\"]))return current[\"(labels)\"][labelName][\"(type)\"];var scopeCheck=excludeParams?_scopeStack[i-1]:current;if(scopeCheck&&\"functionparams\"===scopeCheck[\"(type)\"])return null}return null},hasBreakLabel:function(labelName){for(var i=_scopeStack.length-1;i>=0;i--){var current=_scopeStack[i];if(current[\"(breakLabels)\"][labelName])return!0;if(\"functionparams\"===current[\"(type)\"])return!1}return!1},has:function(labelName,options){return Boolean(this.labeltype(labelName,options))},add:function(labelName,type,tok,unused){_current[\"(labels)\"][labelName]={\"(type)\":type,\"(token)\":tok,\"(blockscoped)\":!1,\"(function)\":_currentFunctBody,\"(unused)\":unused}}},block:{isGlobal:function(){return\"global\"===_current[\"(type)\"]},use:function(labelName,token){var paramScope=_currentFunctBody[\"(parent)\"];paramScope&¶mScope[\"(labels)\"][labelName]&&\"param\"===paramScope[\"(labels)\"][labelName][\"(type)\"]&&(scopeManagerInst.funct.has(labelName,{excludeParams:!0,onlyBlockscoped:!0})||(paramScope[\"(labels)\"][labelName][\"(unused)\"]=!1)),token&&(state.ignored.W117||state.option.undef===!1)&&(token.ignoreUndef=!0),_setupUsages(labelName),token&&(token[\"(function)\"]=_currentFunctBody,_current[\"(usages)\"][labelName][\"(tokens)\"].push(token))},reassign:function(labelName,token){this.modify(labelName,token),_current[\"(usages)\"][labelName][\"(reassigned)\"].push(token)},modify:function(labelName,token){_setupUsages(labelName),_current[\"(usages)\"][labelName][\"(modified)\"].push(token)},add:function(labelName,type,tok,unused){_current[\"(labels)\"][labelName]={\"(type)\":type,\"(token)\":tok,\"(blockscoped)\":!0,\"(unused)\":unused}},addBreakLabel:function(labelName,opts){var token=opts.token;scopeManagerInst.funct.hasBreakLabel(labelName)?warning(\"E011\",token,labelName):\"outer\"===state.option.shadow&&(scopeManagerInst.funct.has(labelName)?warning(\"W004\",token,labelName):_checkOuterShadow(labelName,token)),_current[\"(breakLabels)\"][labelName]=token}}};return scopeManagerInst};module.exports=scopeManager},{\"../lodash\":\"/node_modules/jshint/lodash.js\",events:\"/node_modules/browserify/node_modules/events/events.js\"}],\"/node_modules/jshint/src/state.js\":[function(_dereq_,module,exports){\"use strict\";var NameStack=_dereq_(\"./name-stack.js\"),state={syntax:{},isStrict:function(){return this.directive[\"use strict\"]||this.inClassBody||this.option.module||\"implied\"===this.option.strict},inMoz:function(){return this.option.moz},inES6:function(){return this.option.moz||this.option.esversion>=6},inES5:function(strict){return strict?!(this.option.esversion&&5!==this.option.esversion||this.option.moz):!this.option.esversion||this.option.esversion>=5||this.option.moz},reset:function(){this.tokens={prev:null,next:null,curr:null},this.option={},this.funct=null,this.ignored={},this.directive={},this.jsonMode=!1,this.jsonWarnings=[],this.lines=[],this.tab=\"\",this.cache={},this.ignoredLines={},this.forinifcheckneeded=!1,this.nameStack=new NameStack,this.inClassBody=!1}};exports.state=state},{\"./name-stack.js\":\"/node_modules/jshint/src/name-stack.js\"}],\"/node_modules/jshint/src/style.js\":[function(_dereq_,module,exports){\"use strict\";exports.register=function(linter){linter.on(\"Identifier\",function(data){linter.getOption(\"proto\")||\"__proto__\"===data.name&&linter.warn(\"W103\",{line:data.line,\"char\":data.char,data:[data.name,\"6\"]})}),linter.on(\"Identifier\",function(data){linter.getOption(\"iterator\")||\"__iterator__\"===data.name&&linter.warn(\"W103\",{line:data.line,\"char\":data.char,data:[data.name]})}),linter.on(\"Identifier\",function(data){linter.getOption(\"camelcase\")&&data.name.replace(/^_+|_+$/g,\"\").indexOf(\"_\")>-1&&!data.name.match(/^[A-Z0-9_]*$/)&&linter.warn(\"W106\",{line:data.line,\"char\":data.from,data:[data.name]})}),linter.on(\"String\",function(data){var code,quotmark=linter.getOption(\"quotmark\");quotmark&&(\"single\"===quotmark&&\"'\"!==data.quote&&(code=\"W109\"),\"double\"===quotmark&&'\"'!==data.quote&&(code=\"W108\"),quotmark===!0&&(linter.getCache(\"quotmark\")||linter.setCache(\"quotmark\",data.quote),linter.getCache(\"quotmark\")!==data.quote&&(code=\"W110\")),code&&linter.warn(code,{line:data.line,\"char\":data.char}))}),linter.on(\"Number\",function(data){\".\"===data.value.charAt(0)&&linter.warn(\"W008\",{line:data.line,\"char\":data.char,data:[data.value]}),\".\"===data.value.substr(data.value.length-1)&&linter.warn(\"W047\",{line:data.line,\"char\":data.char,data:[data.value]}),/^00+/.test(data.value)&&linter.warn(\"W046\",{line:data.line,\"char\":data.char,data:[data.value]})}),linter.on(\"String\",function(data){var re=/^(?:javascript|jscript|ecmascript|vbscript|livescript)\\s*:/i;linter.getOption(\"scripturl\")||re.test(data.value)&&linter.warn(\"W107\",{line:data.line,\"char\":data.char})})}},{}],\"/node_modules/jshint/src/vars.js\":[function(_dereq_,module,exports){\"use strict\";exports.reservedVars={arguments:!1,NaN:!1},exports.ecmaIdentifiers={3:{Array:!1,Boolean:!1,Date:!1,decodeURI:!1,decodeURIComponent:!1,encodeURI:!1,encodeURIComponent:!1,Error:!1,eval:!1,EvalError:!1,Function:!1,hasOwnProperty:!1,isFinite:!1,isNaN:!1,Math:!1,Number:!1,Object:!1,parseInt:!1,parseFloat:!1,RangeError:!1,ReferenceError:!1,RegExp:!1,String:!1,SyntaxError:!1,TypeError:!1,URIError:!1},5:{JSON:!1},6:{Map:!1,Promise:!1,Proxy:!1,Reflect:!1,Set:!1,Symbol:!1,WeakMap:!1,WeakSet:!1}},exports.browser={Audio:!1,Blob:!1,addEventListener:!1,applicationCache:!1,atob:!1,blur:!1,btoa:!1,cancelAnimationFrame:!1,CanvasGradient:!1,CanvasPattern:!1,CanvasRenderingContext2D:!1,CSS:!1,clearInterval:!1,clearTimeout:!1,close:!1,closed:!1,Comment:!1,CustomEvent:!1,DOMParser:!1,defaultStatus:!1,Document:!1,document:!1,DocumentFragment:!1,Element:!1,ElementTimeControl:!1,Event:!1,event:!1,fetch:!1,FileReader:!1,FormData:!1,focus:!1,frames:!1,getComputedStyle:!1,HTMLElement:!1,HTMLAnchorElement:!1,HTMLBaseElement:!1,HTMLBlockquoteElement:!1,HTMLBodyElement:!1,HTMLBRElement:!1,HTMLButtonElement:!1,HTMLCanvasElement:!1,HTMLCollection:!1,HTMLDirectoryElement:!1,HTMLDivElement:!1,HTMLDListElement:!1,HTMLFieldSetElement:!1,HTMLFontElement:!1,HTMLFormElement:!1,HTMLFrameElement:!1,HTMLFrameSetElement:!1,HTMLHeadElement:!1,HTMLHeadingElement:!1,HTMLHRElement:!1,HTMLHtmlElement:!1,HTMLIFrameElement:!1,HTMLImageElement:!1,HTMLInputElement:!1,HTMLIsIndexElement:!1,HTMLLabelElement:!1,HTMLLayerElement:!1,HTMLLegendElement:!1,HTMLLIElement:!1,HTMLLinkElement:!1,HTMLMapElement:!1,HTMLMenuElement:!1,HTMLMetaElement:!1,HTMLModElement:!1,HTMLObjectElement:!1,HTMLOListElement:!1,HTMLOptGroupElement:!1,HTMLOptionElement:!1,HTMLParagraphElement:!1,HTMLParamElement:!1,HTMLPreElement:!1,HTMLQuoteElement:!1,HTMLScriptElement:!1,HTMLSelectElement:!1,HTMLStyleElement:!1,HTMLTableCaptionElement:!1,HTMLTableCellElement:!1,HTMLTableColElement:!1,HTMLTableElement:!1,HTMLTableRowElement:!1,HTMLTableSectionElement:!1,HTMLTemplateElement:!1,HTMLTextAreaElement:!1,HTMLTitleElement:!1,HTMLUListElement:!1,HTMLVideoElement:!1,history:!1,Image:!1,Intl:!1,length:!1,localStorage:!1,location:!1,matchMedia:!1,MessageChannel:!1,MessageEvent:!1,MessagePort:!1,MouseEvent:!1,moveBy:!1,moveTo:!1,MutationObserver:!1,name:!1,Node:!1,NodeFilter:!1,NodeList:!1,Notification:!1,navigator:!1,onbeforeunload:!0,onblur:!0,onerror:!0,onfocus:!0,onload:!0,onresize:!0,onunload:!0,open:!1,openDatabase:!1,opener:!1,Option:!1,parent:!1,performance:!1,print:!1,Range:!1,requestAnimationFrame:!1,removeEventListener:!1,resizeBy:!1,resizeTo:!1,screen:!1,scroll:!1,scrollBy:!1,scrollTo:!1,sessionStorage:!1,setInterval:!1,setTimeout:!1,SharedWorker:!1,status:!1,SVGAElement:!1,SVGAltGlyphDefElement:!1,SVGAltGlyphElement:!1,SVGAltGlyphItemElement:!1,SVGAngle:!1,SVGAnimateColorElement:!1,SVGAnimateElement:!1,SVGAnimateMotionElement:!1,SVGAnimateTransformElement:!1,SVGAnimatedAngle:!1,SVGAnimatedBoolean:!1,SVGAnimatedEnumeration:!1,SVGAnimatedInteger:!1,SVGAnimatedLength:!1,SVGAnimatedLengthList:!1,SVGAnimatedNumber:!1,SVGAnimatedNumberList:!1,SVGAnimatedPathData:!1,SVGAnimatedPoints:!1,SVGAnimatedPreserveAspectRatio:!1,SVGAnimatedRect:!1,SVGAnimatedString:!1,SVGAnimatedTransformList:!1,SVGAnimationElement:!1,SVGCSSRule:!1,SVGCircleElement:!1,SVGClipPathElement:!1,SVGColor:!1,SVGColorProfileElement:!1,SVGColorProfileRule:!1,SVGComponentTransferFunctionElement:!1,SVGCursorElement:!1,SVGDefsElement:!1,SVGDescElement:!1,SVGDocument:!1,SVGElement:!1,SVGElementInstance:!1,SVGElementInstanceList:!1,SVGEllipseElement:!1,SVGExternalResourcesRequired:!1,SVGFEBlendElement:!1,SVGFEColorMatrixElement:!1,SVGFEComponentTransferElement:!1,SVGFECompositeElement:!1,SVGFEConvolveMatrixElement:!1,SVGFEDiffuseLightingElement:!1,SVGFEDisplacementMapElement:!1,SVGFEDistantLightElement:!1,SVGFEFloodElement:!1,SVGFEFuncAElement:!1,SVGFEFuncBElement:!1,SVGFEFuncGElement:!1,SVGFEFuncRElement:!1,SVGFEGaussianBlurElement:!1,SVGFEImageElement:!1,SVGFEMergeElement:!1,SVGFEMergeNodeElement:!1,SVGFEMorphologyElement:!1,SVGFEOffsetElement:!1,SVGFEPointLightElement:!1,SVGFESpecularLightingElement:!1,SVGFESpotLightElement:!1,SVGFETileElement:!1,SVGFETurbulenceElement:!1,SVGFilterElement:!1,SVGFilterPrimitiveStandardAttributes:!1,SVGFitToViewBox:!1,SVGFontElement:!1,SVGFontFaceElement:!1,SVGFontFaceFormatElement:!1,SVGFontFaceNameElement:!1,SVGFontFaceSrcElement:!1,SVGFontFaceUriElement:!1,SVGForeignObjectElement:!1,SVGGElement:!1,SVGGlyphElement:!1,SVGGlyphRefElement:!1,SVGGradientElement:!1,SVGHKernElement:!1,SVGICCColor:!1,SVGImageElement:!1,SVGLangSpace:!1,SVGLength:!1,SVGLengthList:!1,SVGLineElement:!1,SVGLinearGradientElement:!1,SVGLocatable:!1,SVGMPathElement:!1,SVGMarkerElement:!1,SVGMaskElement:!1,SVGMatrix:!1,SVGMetadataElement:!1,SVGMissingGlyphElement:!1,SVGNumber:!1,SVGNumberList:!1,SVGPaint:!1,SVGPathElement:!1,SVGPathSeg:!1,SVGPathSegArcAbs:!1,SVGPathSegArcRel:!1,SVGPathSegClosePath:!1,SVGPathSegCurvetoCubicAbs:!1,SVGPathSegCurvetoCubicRel:!1,SVGPathSegCurvetoCubicSmoothAbs:!1,SVGPathSegCurvetoCubicSmoothRel:!1,SVGPathSegCurvetoQuadraticAbs:!1,SVGPathSegCurvetoQuadraticRel:!1,SVGPathSegCurvetoQuadraticSmoothAbs:!1,SVGPathSegCurvetoQuadraticSmoothRel:!1,SVGPathSegLinetoAbs:!1,SVGPathSegLinetoHorizontalAbs:!1,SVGPathSegLinetoHorizontalRel:!1,SVGPathSegLinetoRel:!1,SVGPathSegLinetoVerticalAbs:!1,SVGPathSegLinetoVerticalRel:!1,SVGPathSegList:!1,SVGPathSegMovetoAbs:!1,SVGPathSegMovetoRel:!1,SVGPatternElement:!1,SVGPoint:!1,SVGPointList:!1,SVGPolygonElement:!1,SVGPolylineElement:!1,SVGPreserveAspectRatio:!1,SVGRadialGradientElement:!1,SVGRect:!1,SVGRectElement:!1,SVGRenderingIntent:!1,SVGSVGElement:!1,SVGScriptElement:!1,SVGSetElement:!1,SVGStopElement:!1,SVGStringList:!1,SVGStylable:!1,SVGStyleElement:!1,SVGSwitchElement:!1,SVGSymbolElement:!1,SVGTRefElement:!1,SVGTSpanElement:!1,SVGTests:!1,SVGTextContentElement:!1,SVGTextElement:!1,SVGTextPathElement:!1,SVGTextPositioningElement:!1,SVGTitleElement:!1,SVGTransform:!1,SVGTransformList:!1,SVGTransformable:!1,SVGURIReference:!1,SVGUnitTypes:!1,SVGUseElement:!1,SVGVKernElement:!1,SVGViewElement:!1,SVGViewSpec:!1,SVGZoomAndPan:!1,Text:!1,TextDecoder:!1,TextEncoder:!1,TimeEvent:!1,top:!1,URL:!1,WebGLActiveInfo:!1,WebGLBuffer:!1,WebGLContextEvent:!1,WebGLFramebuffer:!1,WebGLProgram:!1,WebGLRenderbuffer:!1,WebGLRenderingContext:!1,WebGLShader:!1,WebGLShaderPrecisionFormat:!1,WebGLTexture:!1,WebGLUniformLocation:!1,WebSocket:!1,window:!1,Window:!1,Worker:!1,XDomainRequest:!1,XMLHttpRequest:!1,XMLSerializer:!1,XPathEvaluator:!1,XPathException:!1,XPathExpression:!1,XPathNamespace:!1,XPathNSResolver:!1,XPathResult:!1},exports.devel={alert:!1,confirm:!1,console:!1,Debug:!1,opera:!1,prompt:!1},exports.worker={importScripts:!0,postMessage:!0,self:!0,FileReaderSync:!0},exports.nonstandard={escape:!1,unescape:!1},exports.couch={require:!1,respond:!1,getRow:!1,emit:!1,send:!1,start:!1,sum:!1,log:!1,exports:!1,module:!1,provides:!1},exports.node={__filename:!1,__dirname:!1,GLOBAL:!1,global:!1,module:!1,acequire:!1,Buffer:!0,console:!0,exports:!0,process:!0,setTimeout:!0,clearTimeout:!0,setInterval:!0,clearInterval:!0,setImmediate:!0,clearImmediate:!0},exports.browserify={__filename:!1,__dirname:!1,global:!1,module:!1,acequire:!1,Buffer:!0,exports:!0,process:!0},exports.phantom={phantom:!0,acequire:!0,WebPage:!0,console:!0,exports:!0},exports.qunit={asyncTest:!1,deepEqual:!1,equal:!1,expect:!1,module:!1,notDeepEqual:!1,notEqual:!1,notPropEqual:!1,notStrictEqual:!1,ok:!1,propEqual:!1,QUnit:!1,raises:!1,start:!1,stop:!1,strictEqual:!1,test:!1,\"throws\":!1},exports.rhino={defineClass:!1,deserialize:!1,gc:!1,help:!1,importClass:!1,importPackage:!1,java:!1,load:!1,loadClass:!1,Packages:!1,print:!1,quit:!1,readFile:!1,readUrl:!1,runCommand:!1,seal:!1,serialize:!1,spawn:!1,sync:!1,toint32:!1,version:!1},exports.shelljs={target:!1,echo:!1,exit:!1,cd:!1,pwd:!1,ls:!1,find:!1,cp:!1,rm:!1,mv:!1,mkdir:!1,test:!1,cat:!1,sed:!1,grep:!1,which:!1,dirs:!1,pushd:!1,popd:!1,env:!1,exec:!1,chmod:!1,config:!1,error:!1,tempdir:!1},exports.typed={ArrayBuffer:!1,ArrayBufferView:!1,DataView:!1,Float32Array:!1,Float64Array:!1,Int16Array:!1,Int32Array:!1,Int8Array:!1,Uint16Array:!1,Uint32Array:!1,Uint8Array:!1,Uint8ClampedArray:!1},exports.wsh={ActiveXObject:!0,Enumerator:!0,GetObject:!0,ScriptEngine:!0,ScriptEngineBuildVersion:!0,ScriptEngineMajorVersion:!0,ScriptEngineMinorVersion:!0,VBArray:!0,WSH:!0,WScript:!0,XDomainRequest:!0},exports.dojo={dojo:!1,dijit:!1,dojox:!1,define:!1,require:!1},exports.jquery={$:!1,jQuery:!1},exports.mootools={$:!1,$$:!1,Asset:!1,Browser:!1,Chain:!1,Class:!1,Color:!1,Cookie:!1,Core:!1,Document:!1,DomReady:!1,DOMEvent:!1,DOMReady:!1,Drag:!1,Element:!1,Elements:!1,Event:!1,Events:!1,Fx:!1,Group:!1,Hash:!1,HtmlTable:!1,IFrame:!1,IframeShim:!1,InputValidator:!1,instanceOf:!1,Keyboard:!1,Locale:!1,Mask:!1,MooTools:!1,Native:!1,Options:!1,OverText:!1,Request:!1,Scroller:!1,Slick:!1,Slider:!1,Sortables:!1,Spinner:!1,Swiff:!1,Tips:!1,Type:!1,typeOf:!1,URI:!1,Window:!1},exports.prototypejs={$:!1,$$:!1,$A:!1,$F:!1,$H:!1,$R:!1,$break:!1,$continue:!1,$w:!1,Abstract:!1,Ajax:!1,Class:!1,Enumerable:!1,Element:!1,Event:!1,Field:!1,Form:!1,Hash:!1,Insertion:!1,ObjectRange:!1,PeriodicalExecuter:!1,Position:!1,Prototype:!1,Selector:!1,Template:!1,Toggle:!1,Try:!1,Autocompleter:!1,Builder:!1,Control:!1,Draggable:!1,Draggables:!1,Droppables:!1,Effect:!1,Sortable:!1,SortableObserver:!1,Sound:!1,Scriptaculous:!1},exports.yui={YUI:!1,Y:!1,YUI_config:!1},exports.mocha={mocha:!1,describe:!1,xdescribe:!1,it:!1,xit:!1,context:!1,xcontext:!1,before:!1,after:!1,beforeEach:!1,afterEach:!1,suite:!1,test:!1,setup:!1,teardown:!1,suiteSetup:!1,suiteTeardown:!1},exports.jasmine={jasmine:!1,describe:!1,xdescribe:!1,it:!1,xit:!1,beforeEach:!1,afterEach:!1,setFixtures:!1,loadFixtures:!1,spyOn:!1,expect:!1,runs:!1,waitsFor:!1,waits:!1,beforeAll:!1,afterAll:!1,fail:!1,fdescribe:!1,fit:!1,pending:!1}},{}]},{},[\"/node_modules/jshint/src/jshint.js\"])}),ace.define(\"ace/mode/javascript_worker\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/worker/mirror\",\"ace/mode/javascript/jshint\"],function(acequire,exports,module){\"use strict\";function startRegex(arr){return RegExp(\"^(\"+arr.join(\"|\")+\")\")}var oop=acequire(\"../lib/oop\"),Mirror=acequire(\"../worker/mirror\").Mirror,lint=acequire(\"./javascript/jshint\").JSHINT,disabledWarningsRe=startRegex([\"Bad for in variable '(.+)'.\",'Missing \"use strict\"']),errorsRe=startRegex([\"Unexpected\",\"Expected \",\"Confusing (plus|minus)\",\"\\\\{a\\\\} unterminated regular expression\",\"Unclosed \",\"Unmatched \",\"Unbegun comment\",\"Bad invocation\",\"Missing space after\",\"Missing operator at\"]),infoRe=startRegex([\"Expected an assignment\",\"Bad escapement of EOL\",\"Unexpected comma\",\"Unexpected space\",\"Missing radix parameter.\",\"A leading decimal point can\",\"\\\\['{a}'\\\\] is better written in dot notation.\",\"'{a}' used out of scope\"]),JavaScriptWorker=exports.JavaScriptWorker=function(sender){Mirror.call(this,sender),this.setTimeout(500),this.setOptions()};oop.inherits(JavaScriptWorker,Mirror),function(){this.setOptions=function(options){this.options=options||{esnext:!0,moz:!0,devel:!0,browser:!0,node:!0,laxcomma:!0,laxbreak:!0,lastsemic:!0,onevar:!1,passfail:!1,maxerr:100,expr:!0,multistr:!0,globalstrict:!0},this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.changeOptions=function(newOptions){oop.mixin(this.options,newOptions),this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.isValidJS=function(str){try{eval(\"throw 0;\"+str)}catch(e){if(0===e)return!0}return!1},this.onUpdate=function(){var value=this.doc.getValue();if(value=value.replace(/^#!.*\\n/,\"\\n\"),!value)return this.sender.emit(\"annotate\",[]);var errors=[],maxErrorLevel=this.isValidJS(value)?\"warning\":\"error\";lint(value,this.options);for(var results=lint.errors,errorAdded=!1,i=0;results.length>i;i++){var error=results[i];if(error){var raw=error.raw,type=\"warning\";if(\"Missing semicolon.\"==raw){var str=error.evidence.substr(error.character);str=str.charAt(str.search(/\\S/)),\"error\"==maxErrorLevel&&str&&/[\\w\\d{(['\"]/.test(str)?(error.reason='Missing \";\" before statement',type=\"error\"):type=\"info\"}else{if(disabledWarningsRe.test(raw))continue;infoRe.test(raw)?type=\"info\":errorsRe.test(raw)?(errorAdded=!0,type=maxErrorLevel):\"'{a}' is not defined.\"==raw?type=\"warning\":\"'{a}' is defined but never used.\"==raw&&(type=\"info\")}errors.push({row:error.line-1,column:error.character-1,text:error.reason,type:type,raw:raw})}}this.sender.emit(\"annotate\",errors)}}.call(JavaScriptWorker.prototype)}),ace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"],function(){function Empty(){}function doesDefinePropertyWork(object){try{return Object.defineProperty(object,\"sentinel\",{}),\"sentinel\"in object}catch(exception){}}function toInteger(n){return n=+n,n!==n?n=0:0!==n&&n!==1/0&&n!==-(1/0)&&(n=(n>0||-1)*Math.floor(Math.abs(n))),n}Function.prototype.bind||(Function.prototype.bind=function(that){var target=this;if(\"function\"!=typeof target)throw new TypeError(\"Function.prototype.bind called on incompatible \"+target);var args=slice.call(arguments,1),bound=function(){if(this instanceof bound){var result=target.apply(this,args.concat(slice.call(arguments)));return Object(result)===result?result:this}return target.apply(that,args.concat(slice.call(arguments)))};return target.prototype&&(Empty.prototype=target.prototype,bound.prototype=new Empty,Empty.prototype=null),bound});var defineGetter,defineSetter,lookupGetter,lookupSetter,supportsAccessors,call=Function.prototype.call,prototypeOfArray=Array.prototype,prototypeOfObject=Object.prototype,slice=prototypeOfArray.slice,_toString=call.bind(prototypeOfObject.toString),owns=call.bind(prototypeOfObject.hasOwnProperty);if((supportsAccessors=owns(prototypeOfObject,\"__defineGetter__\"))&&(defineGetter=call.bind(prototypeOfObject.__defineGetter__),defineSetter=call.bind(prototypeOfObject.__defineSetter__),lookupGetter=call.bind(prototypeOfObject.__lookupGetter__),lookupSetter=call.bind(prototypeOfObject.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function makeArray(l){var a=Array(l+2);return a[0]=a[1]=0,a}var lengthBefore,array=[];return array.splice.apply(array,makeArray(20)),array.splice.apply(array,makeArray(26)),lengthBefore=array.length,array.splice(5,0,\"XXX\"),lengthBefore+1==array.length,lengthBefore+1==array.length?!0:void 0}()){var array_splice=Array.prototype.splice;Array.prototype.splice=function(start,deleteCount){return arguments.length?array_splice.apply(this,[void 0===start?0:start,void 0===deleteCount?this.length-start:deleteCount].concat(slice.call(arguments,2))):[]}}else Array.prototype.splice=function(pos,removeCount){var length=this.length;pos>0?pos>length&&(pos=length):void 0==pos?pos=0:0>pos&&(pos=Math.max(length+pos,0)),length>pos+removeCount||(removeCount=length-pos);var removed=this.slice(pos,pos+removeCount),insert=slice.call(arguments,2),add=insert.length;if(pos===length)add&&this.push.apply(this,insert);else{var remove=Math.min(removeCount,length-pos),tailOldPos=pos+remove,tailNewPos=tailOldPos+add-remove,tailCount=length-tailOldPos,lengthAfterRemove=length-remove;if(tailOldPos>tailNewPos)for(var i=0;tailCount>i;++i)this[tailNewPos+i]=this[tailOldPos+i];else if(tailNewPos>tailOldPos)for(i=tailCount;i--;)this[tailNewPos+i]=this[tailOldPos+i];if(add&&pos===lengthAfterRemove)this.length=lengthAfterRemove,this.push.apply(this,insert);else for(this.length=lengthAfterRemove+add,i=0;add>i;++i)this[pos+i]=insert[i]}return removed};Array.isArray||(Array.isArray=function(obj){return\"[object Array]\"==_toString(obj)});var boxedString=Object(\"a\"),splitString=\"a\"!=boxedString[0]||!(0 in boxedString);if(Array.prototype.forEach||(Array.prototype.forEach=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,thisp=arguments[1],i=-1,length=self.length>>>0;if(\"[object Function]\"!=_toString(fun))throw new TypeError;for(;length>++i;)i in self&&fun.call(thisp,self[i],i,object)}),Array.prototype.map||(Array.prototype.map=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0,result=Array(length),thisp=arguments[1];if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");for(var i=0;length>i;i++)i in self&&(result[i]=fun.call(thisp,self[i],i,object));return result}),Array.prototype.filter||(Array.prototype.filter=function(fun){var value,object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0,result=[],thisp=arguments[1];if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");for(var i=0;length>i;i++)i in self&&(value=self[i],fun.call(thisp,value,i,object)&&result.push(value));return result}),Array.prototype.every||(Array.prototype.every=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0,thisp=arguments[1];if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");for(var i=0;length>i;i++)if(i in self&&!fun.call(thisp,self[i],i,object))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0,thisp=arguments[1];if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");for(var i=0;length>i;i++)if(i in self&&fun.call(thisp,self[i],i,object))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0;if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");if(!length&&1==arguments.length)throw new TypeError(\"reduce of empty array with no initial value\");var result,i=0;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i++];break}if(++i>=length)throw new TypeError(\"reduce of empty array with no initial value\")}for(;length>i;i++)i in self&&(result=fun.call(void 0,result,self[i],i,object));return result}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0;if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");if(!length&&1==arguments.length)throw new TypeError(\"reduceRight of empty array with no initial value\");var result,i=length-1;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i--];break}if(0>--i)throw new TypeError(\"reduceRight of empty array with no initial value\")}do i in this&&(result=fun.call(void 0,result,self[i],i,object));while(i--);return result}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(sought){var self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):toObject(this),length=self.length>>>0;if(!length)return-1;var i=0;for(arguments.length>1&&(i=toInteger(arguments[1])),i=i>=0?i:Math.max(0,length+i);length>i;i++)if(i in self&&self[i]===sought)return i;return-1}),Array.prototype.lastIndexOf&&-1==[0,1].lastIndexOf(0,-3)||(Array.prototype.lastIndexOf=function(sought){var self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):toObject(this),length=self.length>>>0;if(!length)return-1;var i=length-1;for(arguments.length>1&&(i=Math.min(i,toInteger(arguments[1]))),i=i>=0?i:length-Math.abs(i);i>=0;i--)if(i in self&&sought===self[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(object){return object.__proto__||(object.constructor?object.constructor.prototype:prototypeOfObject)}),!Object.getOwnPropertyDescriptor){var ERR_NON_OBJECT=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(object,property){if(\"object\"!=typeof object&&\"function\"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT+object);if(owns(object,property)){var descriptor,getter,setter;if(descriptor={enumerable:!0,configurable:!0},supportsAccessors){var prototype=object.__proto__;object.__proto__=prototypeOfObject;var getter=lookupGetter(object,property),setter=lookupSetter(object,property);if(object.__proto__=prototype,getter||setter)return getter&&(descriptor.get=getter),setter&&(descriptor.set=setter),descriptor}return descriptor.value=object[property],descriptor}}}if(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(object){return Object.keys(object)}),!Object.create){var createEmpty;createEmpty=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var empty={};for(var i in empty)empty[i]=null;return empty.constructor=empty.hasOwnProperty=empty.propertyIsEnumerable=empty.isPrototypeOf=empty.toLocaleString=empty.toString=empty.valueOf=empty.__proto__=null,empty},Object.create=function(prototype,properties){var object;if(null===prototype)object=createEmpty();else{if(\"object\"!=typeof prototype)throw new TypeError(\"typeof prototype[\"+typeof prototype+\"] != 'object'\");var Type=function(){};Type.prototype=prototype,object=new Type,object.__proto__=prototype}return void 0!==properties&&Object.defineProperties(object,properties),object}}if(Object.defineProperty){var definePropertyWorksOnObject=doesDefinePropertyWork({}),definePropertyWorksOnDom=\"undefined\"==typeof document||doesDefinePropertyWork(document.createElement(\"div\"));if(!definePropertyWorksOnObject||!definePropertyWorksOnDom)var definePropertyFallback=Object.defineProperty}if(!Object.defineProperty||definePropertyFallback){var ERR_NON_OBJECT_DESCRIPTOR=\"Property description must be an object: \",ERR_NON_OBJECT_TARGET=\"Object.defineProperty called on non-object: \",ERR_ACCESSORS_NOT_SUPPORTED=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(object,property,descriptor){if(\"object\"!=typeof object&&\"function\"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT_TARGET+object);if(\"object\"!=typeof descriptor&&\"function\"!=typeof descriptor||null===descriptor)throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR+descriptor);if(definePropertyFallback)try{return definePropertyFallback.call(Object,object,property,descriptor)}catch(exception){}if(owns(descriptor,\"value\"))if(supportsAccessors&&(lookupGetter(object,property)||lookupSetter(object,property))){var prototype=object.__proto__;object.__proto__=prototypeOfObject,delete object[property],object[property]=descriptor.value,object.__proto__=prototype}else object[property]=descriptor.value;else{if(!supportsAccessors)throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);owns(descriptor,\"get\")&&defineGetter(object,property,descriptor.get),owns(descriptor,\"set\")&&defineSetter(object,property,descriptor.set)}return object}}Object.defineProperties||(Object.defineProperties=function(object,properties){for(var property in properties)owns(properties,property)&&Object.defineProperty(object,property,properties[property]);return object}),Object.seal||(Object.seal=function(object){return object}),Object.freeze||(Object.freeze=function(object){return object});try{Object.freeze(function(){})}catch(exception){Object.freeze=function(freezeObject){return function(object){return\"function\"==typeof object?object:freezeObject(object)}}(Object.freeze)}if(Object.preventExtensions||(Object.preventExtensions=function(object){return object}),Object.isSealed||(Object.isSealed=function(){return!1}),Object.isFrozen||(Object.isFrozen=function(){return!1}),Object.isExtensible||(Object.isExtensible=function(object){if(Object(object)===object)throw new TypeError;for(var name=\"\";owns(object,name);)name+=\"?\";object[name]=!0;var returnValue=owns(object,name);return delete object[name],returnValue}),!Object.keys){var hasDontEnumBug=!0,dontEnums=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],dontEnumsLength=dontEnums.length;for(var key in{toString:null})hasDontEnumBug=!1;Object.keys=function(object){if(\"object\"!=typeof object&&\"function\"!=typeof object||null===object)throw new TypeError(\"Object.keys called on a non-object\");var keys=[];for(var name in object)owns(object,name)&&keys.push(name);if(hasDontEnumBug)for(var i=0,ii=dontEnumsLength;ii>i;i++){var dontEnum=dontEnums[i];owns(object,dontEnum)&&keys.push(dontEnum)}return keys}}Date.now||(Date.now=function(){return(new Date).getTime()});var ws=\"\t\\n\u000b\\f\\r   ᠎              \\u2028\\u2029\";if(!String.prototype.trim||ws.trim()){ws=\"[\"+ws+\"]\";var trimBeginRegexp=RegExp(\"^\"+ws+ws+\"*\"),trimEndRegexp=RegExp(ws+ws+\"*$\");String.prototype.trim=function(){return(this+\"\").replace(trimBeginRegexp,\"\").replace(trimEndRegexp,\"\")}}var toObject=function(o){if(null==o)throw new TypeError(\"can't convert \"+o+\" to object\");return Object(o)}});"; +},{}],75:[function(require,module,exports){ +module.exports.id = 'ace/mode/json_worker'; +module.exports.src = "\"no use strict\";(function(window){function resolveModuleId(id,paths){for(var testPath=id,tail=\"\";testPath;){var alias=paths[testPath];if(\"string\"==typeof alias)return alias+tail;if(alias)return alias.location.replace(/\\/*$/,\"/\")+(tail||alias.main||alias.name);if(alias===!1)return\"\";var i=testPath.lastIndexOf(\"/\");if(-1===i)break;tail=testPath.substr(i)+tail,testPath=testPath.slice(0,i)}return id}if(!(void 0!==window.window&&window.document||window.acequire&&window.define)){window.console||(window.console=function(){var msgs=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:msgs})},window.console.error=window.console.warn=window.console.log=window.console.trace=window.console),window.window=window,window.ace=window,window.onerror=function(message,file,line,col,err){postMessage({type:\"error\",data:{message:message,data:err.data,file:file,line:line,col:col,stack:err.stack}})},window.normalizeModule=function(parentId,moduleName){if(-1!==moduleName.indexOf(\"!\")){var chunks=moduleName.split(\"!\");return window.normalizeModule(parentId,chunks[0])+\"!\"+window.normalizeModule(parentId,chunks[1])}if(\".\"==moduleName.charAt(0)){var base=parentId.split(\"/\").slice(0,-1).join(\"/\");for(moduleName=(base?base+\"/\":\"\")+moduleName;-1!==moduleName.indexOf(\".\")&&previous!=moduleName;){var previous=moduleName;moduleName=moduleName.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return moduleName},window.acequire=function acequire(parentId,id){if(id||(id=parentId,parentId=null),!id.charAt)throw Error(\"worker.js acequire() accepts only (parentId, id) as arguments\");id=window.normalizeModule(parentId,id);var module=window.acequire.modules[id];if(module)return module.initialized||(module.initialized=!0,module.exports=module.factory().exports),module.exports;if(!window.acequire.tlns)return console.log(\"unable to load \"+id);var path=resolveModuleId(id,window.acequire.tlns);return\".js\"!=path.slice(-3)&&(path+=\".js\"),window.acequire.id=id,window.acequire.modules[id]={},importScripts(path),window.acequire(parentId,id)},window.acequire.modules={},window.acequire.tlns={},window.define=function(id,deps,factory){if(2==arguments.length?(factory=deps,\"string\"!=typeof id&&(deps=id,id=window.acequire.id)):1==arguments.length&&(factory=id,deps=[],id=window.acequire.id),\"function\"!=typeof factory)return window.acequire.modules[id]={exports:factory,initialized:!0},void 0;deps.length||(deps=[\"require\",\"exports\",\"module\"]);var req=function(childId){return window.acequire(id,childId)};window.acequire.modules[id]={exports:{},factory:function(){var module=this,returnExports=factory.apply(this,deps.map(function(dep){switch(dep){case\"require\":return req;case\"exports\":return module.exports;case\"module\":return module;default:return req(dep)}}));return returnExports&&(module.exports=returnExports),module}}},window.define.amd={},acequire.tlns={},window.initBaseUrls=function(topLevelNamespaces){for(var i in topLevelNamespaces)acequire.tlns[i]=topLevelNamespaces[i]},window.initSender=function(){var EventEmitter=window.acequire(\"ace/lib/event_emitter\").EventEmitter,oop=window.acequire(\"ace/lib/oop\"),Sender=function(){};return function(){oop.implement(this,EventEmitter),this.callback=function(data,callbackId){postMessage({type:\"call\",id:callbackId,data:data})},this.emit=function(name,data){postMessage({type:\"event\",name:name,data:data})}}.call(Sender.prototype),new Sender};var main=window.main=null,sender=window.sender=null;window.onmessage=function(e){var msg=e.data;if(msg.event&&sender)sender._signal(msg.event,msg.data);else if(msg.command)if(main[msg.command])main[msg.command].apply(main,msg.args);else{if(!window[msg.command])throw Error(\"Unknown command:\"+msg.command);window[msg.command].apply(window,msg.args)}else if(msg.init){window.initBaseUrls(msg.tlns),acequire(\"ace/lib/es5-shim\"),sender=window.sender=window.initSender();var clazz=acequire(msg.module)[msg.classname];main=window.main=new clazz(sender)}}}})(this),ace.define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";exports.inherits=function(ctor,superCtor){ctor.super_=superCtor,ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:!1,writable:!0,configurable:!0}})},exports.mixin=function(obj,mixin){for(var key in mixin)obj[key]=mixin[key];return obj},exports.implement=function(proto,mixin){exports.mixin(proto,mixin)}}),ace.define(\"ace/range\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";var comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},Range=function(startRow,startColumn,endRow,endColumn){this.start={row:startRow,column:startColumn},this.end={row:endRow,column:endColumn}};(function(){this.isEqual=function(range){return this.start.row===range.start.row&&this.end.row===range.end.row&&this.start.column===range.start.column&&this.end.column===range.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(row,column){return 0==this.compare(row,column)},this.compareRange=function(range){var cmp,end=range.end,start=range.start;return cmp=this.compare(end.row,end.column),1==cmp?(cmp=this.compare(start.row,start.column),1==cmp?2:0==cmp?1:0):-1==cmp?-2:(cmp=this.compare(start.row,start.column),-1==cmp?-1:1==cmp?42:0)},this.comparePoint=function(p){return this.compare(p.row,p.column)},this.containsRange=function(range){return 0==this.comparePoint(range.start)&&0==this.comparePoint(range.end)},this.intersects=function(range){var cmp=this.compareRange(range);return-1==cmp||0==cmp||1==cmp},this.isEnd=function(row,column){return this.end.row==row&&this.end.column==column},this.isStart=function(row,column){return this.start.row==row&&this.start.column==column},this.setStart=function(row,column){\"object\"==typeof row?(this.start.column=row.column,this.start.row=row.row):(this.start.row=row,this.start.column=column)},this.setEnd=function(row,column){\"object\"==typeof row?(this.end.column=row.column,this.end.row=row.row):(this.end.row=row,this.end.column=column)},this.inside=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)||this.isStart(row,column)?!1:!0:!1},this.insideStart=function(row,column){return 0==this.compare(row,column)?this.isEnd(row,column)?!1:!0:!1},this.insideEnd=function(row,column){return 0==this.compare(row,column)?this.isStart(row,column)?!1:!0:!1},this.compare=function(row,column){return this.isMultiLine()||row!==this.start.row?this.start.row>row?-1:row>this.end.row?1:this.start.row===row?column>=this.start.column?0:-1:this.end.row===row?this.end.column>=column?0:1:0:this.start.column>column?-1:column>this.end.column?1:0},this.compareStart=function(row,column){return this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.compareEnd=function(row,column){return this.end.row==row&&this.end.column==column?1:this.compare(row,column)},this.compareInside=function(row,column){return this.end.row==row&&this.end.column==column?1:this.start.row==row&&this.start.column==column?-1:this.compare(row,column)},this.clipRows=function(firstRow,lastRow){if(this.end.row>lastRow)var end={row:lastRow+1,column:0};else if(firstRow>this.end.row)var end={row:firstRow,column:0};if(this.start.row>lastRow)var start={row:lastRow+1,column:0};else if(firstRow>this.start.row)var start={row:firstRow,column:0};return Range.fromPoints(start||this.start,end||this.end)},this.extend=function(row,column){var cmp=this.compare(row,column);if(0==cmp)return this;if(-1==cmp)var start={row:row,column:column};else var end={row:row,column:column};return Range.fromPoints(start||this.start,end||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return Range.fromPoints(this.start,this.end)},this.collapseRows=function(){return 0==this.end.column?new Range(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new Range(this.start.row,0,this.end.row,0)},this.toScreenRange=function(session){var screenPosStart=session.documentToScreenPosition(this.start),screenPosEnd=session.documentToScreenPosition(this.end);return new Range(screenPosStart.row,screenPosStart.column,screenPosEnd.row,screenPosEnd.column)},this.moveBy=function(row,column){this.start.row+=row,this.start.column+=column,this.end.row+=row,this.end.column+=column}}).call(Range.prototype),Range.fromPoints=function(start,end){return new Range(start.row,start.column,end.row,end.column)},Range.comparePoints=comparePoints,Range.comparePoints=function(p1,p2){return p1.row-p2.row||p1.column-p2.column},exports.Range=Range}),ace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";exports.applyDelta=function(docLines,delta){var row=delta.start.row,startColumn=delta.start.column,line=docLines[row]||\"\";switch(delta.action){case\"insert\":var lines=delta.lines;if(1===lines.length)docLines[row]=line.substring(0,startColumn)+delta.lines[0]+line.substring(startColumn);else{var args=[row,1].concat(delta.lines);docLines.splice.apply(docLines,args),docLines[row]=line.substring(0,startColumn)+docLines[row],docLines[row+delta.lines.length-1]+=line.substring(startColumn)}break;case\"remove\":var endColumn=delta.end.column,endRow=delta.end.row;row===endRow?docLines[row]=line.substring(0,startColumn)+line.substring(endColumn):docLines.splice(row,endRow-row+1,line.substring(0,startColumn)+docLines[endRow].substring(endColumn))}}}),ace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";var EventEmitter={},stopPropagation=function(){this.propagationStopped=!0},preventDefault=function(){this.defaultPrevented=!0};EventEmitter._emit=EventEmitter._dispatchEvent=function(eventName,e){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var listeners=this._eventRegistry[eventName]||[],defaultHandler=this._defaultHandlers[eventName];if(listeners.length||defaultHandler){\"object\"==typeof e&&e||(e={}),e.type||(e.type=eventName),e.stopPropagation||(e.stopPropagation=stopPropagation),e.preventDefault||(e.preventDefault=preventDefault),listeners=listeners.slice();for(var i=0;listeners.length>i&&(listeners[i](e,this),!e.propagationStopped);i++);return defaultHandler&&!e.defaultPrevented?defaultHandler(e,this):void 0}},EventEmitter._signal=function(eventName,e){var listeners=(this._eventRegistry||{})[eventName];if(listeners){listeners=listeners.slice();for(var i=0;listeners.length>i;i++)listeners[i](e,this)}},EventEmitter.once=function(eventName,callback){var _self=this;callback&&this.addEventListener(eventName,function newCallback(){_self.removeEventListener(eventName,newCallback),callback.apply(null,arguments)})},EventEmitter.setDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers||(handlers=this._defaultHandlers={_disabled_:{}}),handlers[eventName]){var old=handlers[eventName],disabled=handlers._disabled_[eventName];disabled||(handlers._disabled_[eventName]=disabled=[]),disabled.push(old);var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}handlers[eventName]=callback},EventEmitter.removeDefaultHandler=function(eventName,callback){var handlers=this._defaultHandlers;if(handlers){var disabled=handlers._disabled_[eventName];if(handlers[eventName]==callback)handlers[eventName],disabled&&this.setDefaultHandler(eventName,disabled.pop());else if(disabled){var i=disabled.indexOf(callback);-1!=i&&disabled.splice(i,1)}}},EventEmitter.on=EventEmitter.addEventListener=function(eventName,callback,capturing){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];return listeners||(listeners=this._eventRegistry[eventName]=[]),-1==listeners.indexOf(callback)&&listeners[capturing?\"unshift\":\"push\"](callback),callback},EventEmitter.off=EventEmitter.removeListener=EventEmitter.removeEventListener=function(eventName,callback){this._eventRegistry=this._eventRegistry||{};var listeners=this._eventRegistry[eventName];if(listeners){var index=listeners.indexOf(callback);-1!==index&&listeners.splice(index,1)}},EventEmitter.removeAllListeners=function(eventName){this._eventRegistry&&(this._eventRegistry[eventName]=[])},exports.EventEmitter=EventEmitter}),ace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(acequire,exports){\"use strict\";var oop=acequire(\"./lib/oop\"),EventEmitter=acequire(\"./lib/event_emitter\").EventEmitter,Anchor=exports.Anchor=function(doc,row,column){this.$onChange=this.onChange.bind(this),this.attach(doc),column===void 0?this.setPosition(row.row,row.column):this.setPosition(row,column)};(function(){function $pointsInOrder(point1,point2,equalPointsInOrder){var bColIsAfter=equalPointsInOrder?point1.column<=point2.column:point1.columnthis.row)){var point=$getTransformedPoint(delta,{row:this.row,column:this.column},this.$insertRight);this.setPosition(point.row,point.column,!0)}},this.setPosition=function(row,column,noClip){var pos;if(pos=noClip?{row:row,column:column}:this.$clipPositionToDocument(row,column),this.row!=pos.row||this.column!=pos.column){var old={row:this.row,column:this.column};this.row=pos.row,this.column=pos.column,this._signal(\"change\",{old:old,value:pos})}},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(doc){this.document=doc||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(row,column){var pos={};return row>=this.document.getLength()?(pos.row=Math.max(0,this.document.getLength()-1),pos.column=this.document.getLine(pos.row).length):0>row?(pos.row=0,pos.column=0):(pos.row=row,pos.column=Math.min(this.document.getLine(pos.row).length,Math.max(0,column))),0>column&&(pos.column=0),pos}}).call(Anchor.prototype)}),ace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"],function(acequire,exports){\"use strict\";var oop=acequire(\"./lib/oop\"),applyDelta=acequire(\"./apply_delta\").applyDelta,EventEmitter=acequire(\"./lib/event_emitter\").EventEmitter,Range=acequire(\"./range\").Range,Anchor=acequire(\"./anchor\").Anchor,Document=function(textOrLines){this.$lines=[\"\"],0===textOrLines.length?this.$lines=[\"\"]:Array.isArray(textOrLines)?this.insertMergedLines({row:0,column:0},textOrLines):this.insert({row:0,column:0},textOrLines)};(function(){oop.implement(this,EventEmitter),this.setValue=function(text){var len=this.getLength()-1;this.remove(new Range(0,0,len,this.getLine(len).length)),this.insert({row:0,column:0},text)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(row,column){return new Anchor(this,row,column)},this.$split=0===\"aaa\".split(/a/).length?function(text){return text.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:function(text){return text.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(text){var match=text.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=match?match[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(newLineMode){this.$newLineMode!==newLineMode&&(this.$newLineMode=newLineMode,this._signal(\"changeNewLineMode\"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(text){return\"\\r\\n\"==text||\"\\r\"==text||\"\\n\"==text},this.getLine=function(row){return this.$lines[row]||\"\"},this.getLines=function(firstRow,lastRow){return this.$lines.slice(firstRow,lastRow+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(range){return this.getLinesForRange(range).join(this.getNewLineCharacter())},this.getLinesForRange=function(range){var lines;if(range.start.row===range.end.row)lines=[this.getLine(range.start.row).substring(range.start.column,range.end.column)];else{lines=this.getLines(range.start.row,range.end.row),lines[0]=(lines[0]||\"\").substring(range.start.column);var l=lines.length-1;range.end.row-range.start.row==l&&(lines[l]=lines[l].substring(0,range.end.column))}return lines},this.insertLines=function(row,lines){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(row,lines)},this.removeLines=function(firstRow,lastRow){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(firstRow,lastRow)},this.insertNewLine=function(position){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(position,[\"\",\"\"])},this.insert=function(position,text){return 1>=this.getLength()&&this.$detectNewLine(text),this.insertMergedLines(position,this.$split(text))},this.insertInLine=function(position,text){var start=this.clippedPos(position.row,position.column),end=this.pos(position.row,position.column+text.length);return this.applyDelta({start:start,end:end,action:\"insert\",lines:[text]},!0),this.clonePos(end)},this.clippedPos=function(row,column){var length=this.getLength();void 0===row?row=length:0>row?row=0:row>=length&&(row=length-1,column=void 0);var line=this.getLine(row);return void 0==column&&(column=line.length),column=Math.min(Math.max(column,0),line.length),{row:row,column:column}},this.clonePos=function(pos){return{row:pos.row,column:pos.column}},this.pos=function(row,column){return{row:row,column:column}},this.$clipPosition=function(position){var length=this.getLength();return position.row>=length?(position.row=Math.max(0,length-1),position.column=this.getLine(length-1).length):(position.row=Math.max(0,position.row),position.column=Math.min(Math.max(position.column,0),this.getLine(position.row).length)),position},this.insertFullLines=function(row,lines){row=Math.min(Math.max(row,0),this.getLength());var column=0;this.getLength()>row?(lines=lines.concat([\"\"]),column=0):(lines=[\"\"].concat(lines),row--,column=this.$lines[row].length),this.insertMergedLines({row:row,column:column},lines)},this.insertMergedLines=function(position,lines){var start=this.clippedPos(position.row,position.column),end={row:start.row+lines.length-1,column:(1==lines.length?start.column:0)+lines[lines.length-1].length};return this.applyDelta({start:start,end:end,action:\"insert\",lines:lines}),this.clonePos(end)},this.remove=function(range){var start=this.clippedPos(range.start.row,range.start.column),end=this.clippedPos(range.end.row,range.end.column);return this.applyDelta({start:start,end:end,action:\"remove\",lines:this.getLinesForRange({start:start,end:end})}),this.clonePos(start)},this.removeInLine=function(row,startColumn,endColumn){var start=this.clippedPos(row,startColumn),end=this.clippedPos(row,endColumn);return this.applyDelta({start:start,end:end,action:\"remove\",lines:this.getLinesForRange({start:start,end:end})},!0),this.clonePos(start)},this.removeFullLines=function(firstRow,lastRow){firstRow=Math.min(Math.max(0,firstRow),this.getLength()-1),lastRow=Math.min(Math.max(0,lastRow),this.getLength()-1);var deleteFirstNewLine=lastRow==this.getLength()-1&&firstRow>0,deleteLastNewLine=this.getLength()-1>lastRow,startRow=deleteFirstNewLine?firstRow-1:firstRow,startCol=deleteFirstNewLine?this.getLine(startRow).length:0,endRow=deleteLastNewLine?lastRow+1:lastRow,endCol=deleteLastNewLine?0:this.getLine(endRow).length,range=new Range(startRow,startCol,endRow,endCol),deletedLines=this.$lines.slice(firstRow,lastRow+1);return this.applyDelta({start:range.start,end:range.end,action:\"remove\",lines:this.getLinesForRange(range)}),deletedLines},this.removeNewLine=function(row){this.getLength()-1>row&&row>=0&&this.applyDelta({start:this.pos(row,this.getLine(row).length),end:this.pos(row+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(range,text){if(range instanceof Range||(range=Range.fromPoints(range.start,range.end)),0===text.length&&range.isEmpty())return range.start;if(text==this.getTextRange(range))return range.end;this.remove(range);var end;return end=text?this.insert(range.start,text):range.start},this.applyDeltas=function(deltas){for(var i=0;deltas.length>i;i++)this.applyDelta(deltas[i])},this.revertDeltas=function(deltas){for(var i=deltas.length-1;i>=0;i--)this.revertDelta(deltas[i])},this.applyDelta=function(delta,doNotValidate){var isInsert=\"insert\"==delta.action;(isInsert?1>=delta.lines.length&&!delta.lines[0]:!Range.comparePoints(delta.start,delta.end))||(isInsert&&delta.lines.length>2e4&&this.$splitAndapplyLargeDelta(delta,2e4),applyDelta(this.$lines,delta,doNotValidate),this._signal(\"change\",delta))},this.$splitAndapplyLargeDelta=function(delta,MAX){for(var lines=delta.lines,l=lines.length,row=delta.start.row,column=delta.start.column,from=0,to=0;;){from=to,to+=MAX-1;var chunk=lines.slice(from,to);if(to>l){delta.lines=chunk,delta.start.row=row+from,delta.start.column=column;break}chunk.push(\"\"),this.applyDelta({start:this.pos(row+from,column),end:this.pos(row+to,column=0),action:delta.action,lines:chunk},!0)}},this.revertDelta=function(delta){this.applyDelta({start:this.clonePos(delta.start),end:this.clonePos(delta.end),action:\"insert\"==delta.action?\"remove\":\"insert\",lines:delta.lines.slice()})},this.indexToPosition=function(index,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,i=startRow||0,l=lines.length;l>i;i++)if(index-=lines[i].length+newlineLength,0>index)return{row:i,column:index+lines[i].length+newlineLength};return{row:l-1,column:lines[l-1].length}},this.positionToIndex=function(pos,startRow){for(var lines=this.$lines||this.getAllLines(),newlineLength=this.getNewLineCharacter().length,index=0,row=Math.min(pos.row,lines.length),i=startRow||0;row>i;++i)index+=lines[i].length+newlineLength;return index+pos.column}}).call(Document.prototype),exports.Document=Document}),ace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"],function(acequire,exports){\"use strict\";exports.last=function(a){return a[a.length-1]},exports.stringReverse=function(string){return string.split(\"\").reverse().join(\"\")},exports.stringRepeat=function(string,count){for(var result=\"\";count>0;)1&count&&(result+=string),(count>>=1)&&(string+=string);return result};var trimBeginRegexp=/^\\s\\s*/,trimEndRegexp=/\\s\\s*$/;exports.stringTrimLeft=function(string){return string.replace(trimBeginRegexp,\"\")},exports.stringTrimRight=function(string){return string.replace(trimEndRegexp,\"\")},exports.copyObject=function(obj){var copy={};for(var key in obj)copy[key]=obj[key];return copy},exports.copyArray=function(array){for(var copy=[],i=0,l=array.length;l>i;i++)copy[i]=array[i]&&\"object\"==typeof array[i]?this.copyObject(array[i]):array[i];return copy},exports.deepCopy=function deepCopy(obj){if(\"object\"!=typeof obj||!obj)return obj;var copy;if(Array.isArray(obj)){copy=[];for(var key=0;obj.length>key;key++)copy[key]=deepCopy(obj[key]);return copy}var cons=obj.constructor;if(cons===RegExp)return obj;copy=cons();for(var key in obj)copy[key]=deepCopy(obj[key]);return copy},exports.arrayToMap=function(arr){for(var map={},i=0;arr.length>i;i++)map[arr[i]]=1;return map},exports.createMap=function(props){var map=Object.create(null);for(var i in props)map[i]=props[i];return map},exports.arrayRemove=function(array,value){for(var i=0;array.length>=i;i++)value===array[i]&&array.splice(i,1)},exports.escapeRegExp=function(str){return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},exports.escapeHTML=function(str){return str.replace(/&/g,\"&\").replace(/\"/g,\""\").replace(/'/g,\"'\").replace(/i;i+=2){if(Array.isArray(data[i+1]))var d={action:\"insert\",start:data[i],lines:data[i+1]};else var d={action:\"remove\",start:data[i],end:data[i+1]};doc.applyDelta(d,!0)}return _self.$timeout?deferredUpdate.schedule(_self.$timeout):(_self.onUpdate(),void 0)})};(function(){this.$timeout=500,this.setTimeout=function(timeout){this.$timeout=timeout},this.setValue=function(value){this.doc.setValue(value),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(callbackId){this.sender.callback(this.doc.getValue(),callbackId)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(Mirror.prototype)}),ace.define(\"ace/mode/json/json_parse\",[\"require\",\"exports\",\"module\"],function(){\"use strict\";var at,ch,text,value,escapee={'\"':'\"',\"\\\\\":\"\\\\\",\"/\":\"/\",b:\"\\b\",f:\"\\f\",n:\"\\n\",r:\"\\r\",t:\"\t\"},error=function(m){throw{name:\"SyntaxError\",message:m,at:at,text:text}},next=function(c){return c&&c!==ch&&error(\"Expected '\"+c+\"' instead of '\"+ch+\"'\"),ch=text.charAt(at),at+=1,ch},number=function(){var number,string=\"\";for(\"-\"===ch&&(string=\"-\",next(\"-\"));ch>=\"0\"&&\"9\">=ch;)string+=ch,next();if(\".\"===ch)for(string+=\".\";next()&&ch>=\"0\"&&\"9\">=ch;)string+=ch;if(\"e\"===ch||\"E\"===ch)for(string+=ch,next(),(\"-\"===ch||\"+\"===ch)&&(string+=ch,next());ch>=\"0\"&&\"9\">=ch;)string+=ch,next();return number=+string,isNaN(number)?(error(\"Bad number\"),void 0):number},string=function(){var hex,i,uffff,string=\"\";if('\"'===ch)for(;next();){if('\"'===ch)return next(),string;if(\"\\\\\"===ch)if(next(),\"u\"===ch){for(uffff=0,i=0;4>i&&(hex=parseInt(next(),16),isFinite(hex));i+=1)uffff=16*uffff+hex;string+=String.fromCharCode(uffff)}else{if(\"string\"!=typeof escapee[ch])break;string+=escapee[ch]}else string+=ch}error(\"Bad string\")},white=function(){for(;ch&&\" \">=ch;)next()},word=function(){switch(ch){case\"t\":return next(\"t\"),next(\"r\"),next(\"u\"),next(\"e\"),!0;case\"f\":return next(\"f\"),next(\"a\"),next(\"l\"),next(\"s\"),next(\"e\"),!1;case\"n\":return next(\"n\"),next(\"u\"),next(\"l\"),next(\"l\"),null}error(\"Unexpected '\"+ch+\"'\")},array=function(){var array=[];if(\"[\"===ch){if(next(\"[\"),white(),\"]\"===ch)return next(\"]\"),array;for(;ch;){if(array.push(value()),white(),\"]\"===ch)return next(\"]\"),array;next(\",\"),white()}}error(\"Bad array\")},object=function(){var key,object={};if(\"{\"===ch){if(next(\"{\"),white(),\"}\"===ch)return next(\"}\"),object;for(;ch;){if(key=string(),white(),next(\":\"),Object.hasOwnProperty.call(object,key)&&error('Duplicate key \"'+key+'\"'),object[key]=value(),white(),\"}\"===ch)return next(\"}\"),object;next(\",\"),white()}}error(\"Bad object\")};return value=function(){switch(white(),ch){case\"{\":return object();case\"[\":return array();case'\"':return string();case\"-\":return number();default:return ch>=\"0\"&&\"9\">=ch?number():word()}},function(source,reviver){var result;return text=source,at=0,ch=\" \",result=value(),white(),ch&&error(\"Syntax error\"),\"function\"==typeof reviver?function walk(holder,key){var k,v,value=holder[key];if(value&&\"object\"==typeof value)for(k in value)Object.hasOwnProperty.call(value,k)&&(v=walk(value,k),void 0!==v?value[k]=v:delete value[k]);return reviver.call(holder,key,value)}({\"\":result},\"\"):result}}),ace.define(\"ace/mode/json_worker\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/worker/mirror\",\"ace/mode/json/json_parse\"],function(acequire,exports){\"use strict\";var oop=acequire(\"../lib/oop\"),Mirror=acequire(\"../worker/mirror\").Mirror,parse=acequire(\"./json/json_parse\"),JsonWorker=exports.JsonWorker=function(sender){Mirror.call(this,sender),this.setTimeout(200)};oop.inherits(JsonWorker,Mirror),function(){this.onUpdate=function(){var value=this.doc.getValue(),errors=[];try{value&&parse(value)}catch(e){var pos=this.doc.indexToPosition(e.at-1);errors.push({row:pos.row,column:pos.column,text:e.message,type:\"error\"})}this.sender.emit(\"annotate\",errors)}}.call(JsonWorker.prototype)}),ace.define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"],function(){function Empty(){}function doesDefinePropertyWork(object){try{return Object.defineProperty(object,\"sentinel\",{}),\"sentinel\"in object}catch(exception){}}function toInteger(n){return n=+n,n!==n?n=0:0!==n&&n!==1/0&&n!==-(1/0)&&(n=(n>0||-1)*Math.floor(Math.abs(n))),n}Function.prototype.bind||(Function.prototype.bind=function(that){var target=this;if(\"function\"!=typeof target)throw new TypeError(\"Function.prototype.bind called on incompatible \"+target);var args=slice.call(arguments,1),bound=function(){if(this instanceof bound){var result=target.apply(this,args.concat(slice.call(arguments)));return Object(result)===result?result:this}return target.apply(that,args.concat(slice.call(arguments)))};return target.prototype&&(Empty.prototype=target.prototype,bound.prototype=new Empty,Empty.prototype=null),bound});var defineGetter,defineSetter,lookupGetter,lookupSetter,supportsAccessors,call=Function.prototype.call,prototypeOfArray=Array.prototype,prototypeOfObject=Object.prototype,slice=prototypeOfArray.slice,_toString=call.bind(prototypeOfObject.toString),owns=call.bind(prototypeOfObject.hasOwnProperty);if((supportsAccessors=owns(prototypeOfObject,\"__defineGetter__\"))&&(defineGetter=call.bind(prototypeOfObject.__defineGetter__),defineSetter=call.bind(prototypeOfObject.__defineSetter__),lookupGetter=call.bind(prototypeOfObject.__lookupGetter__),lookupSetter=call.bind(prototypeOfObject.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function makeArray(l){var a=Array(l+2);return a[0]=a[1]=0,a}var lengthBefore,array=[];return array.splice.apply(array,makeArray(20)),array.splice.apply(array,makeArray(26)),lengthBefore=array.length,array.splice(5,0,\"XXX\"),lengthBefore+1==array.length,lengthBefore+1==array.length?!0:void 0\n}()){var array_splice=Array.prototype.splice;Array.prototype.splice=function(start,deleteCount){return arguments.length?array_splice.apply(this,[void 0===start?0:start,void 0===deleteCount?this.length-start:deleteCount].concat(slice.call(arguments,2))):[]}}else Array.prototype.splice=function(pos,removeCount){var length=this.length;pos>0?pos>length&&(pos=length):void 0==pos?pos=0:0>pos&&(pos=Math.max(length+pos,0)),length>pos+removeCount||(removeCount=length-pos);var removed=this.slice(pos,pos+removeCount),insert=slice.call(arguments,2),add=insert.length;if(pos===length)add&&this.push.apply(this,insert);else{var remove=Math.min(removeCount,length-pos),tailOldPos=pos+remove,tailNewPos=tailOldPos+add-remove,tailCount=length-tailOldPos,lengthAfterRemove=length-remove;if(tailOldPos>tailNewPos)for(var i=0;tailCount>i;++i)this[tailNewPos+i]=this[tailOldPos+i];else if(tailNewPos>tailOldPos)for(i=tailCount;i--;)this[tailNewPos+i]=this[tailOldPos+i];if(add&&pos===lengthAfterRemove)this.length=lengthAfterRemove,this.push.apply(this,insert);else for(this.length=lengthAfterRemove+add,i=0;add>i;++i)this[pos+i]=insert[i]}return removed};Array.isArray||(Array.isArray=function(obj){return\"[object Array]\"==_toString(obj)});var boxedString=Object(\"a\"),splitString=\"a\"!=boxedString[0]||!(0 in boxedString);if(Array.prototype.forEach||(Array.prototype.forEach=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,thisp=arguments[1],i=-1,length=self.length>>>0;if(\"[object Function]\"!=_toString(fun))throw new TypeError;for(;length>++i;)i in self&&fun.call(thisp,self[i],i,object)}),Array.prototype.map||(Array.prototype.map=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0,result=Array(length),thisp=arguments[1];if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");for(var i=0;length>i;i++)i in self&&(result[i]=fun.call(thisp,self[i],i,object));return result}),Array.prototype.filter||(Array.prototype.filter=function(fun){var value,object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0,result=[],thisp=arguments[1];if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");for(var i=0;length>i;i++)i in self&&(value=self[i],fun.call(thisp,value,i,object)&&result.push(value));return result}),Array.prototype.every||(Array.prototype.every=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0,thisp=arguments[1];if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");for(var i=0;length>i;i++)if(i in self&&!fun.call(thisp,self[i],i,object))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0,thisp=arguments[1];if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");for(var i=0;length>i;i++)if(i in self&&fun.call(thisp,self[i],i,object))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0;if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");if(!length&&1==arguments.length)throw new TypeError(\"reduce of empty array with no initial value\");var result,i=0;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i++];break}if(++i>=length)throw new TypeError(\"reduce of empty array with no initial value\")}for(;length>i;i++)i in self&&(result=fun.call(void 0,result,self[i],i,object));return result}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(fun){var object=toObject(this),self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):object,length=self.length>>>0;if(\"[object Function]\"!=_toString(fun))throw new TypeError(fun+\" is not a function\");if(!length&&1==arguments.length)throw new TypeError(\"reduceRight of empty array with no initial value\");var result,i=length-1;if(arguments.length>=2)result=arguments[1];else for(;;){if(i in self){result=self[i--];break}if(0>--i)throw new TypeError(\"reduceRight of empty array with no initial value\")}do i in this&&(result=fun.call(void 0,result,self[i],i,object));while(i--);return result}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(sought){var self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):toObject(this),length=self.length>>>0;if(!length)return-1;var i=0;for(arguments.length>1&&(i=toInteger(arguments[1])),i=i>=0?i:Math.max(0,length+i);length>i;i++)if(i in self&&self[i]===sought)return i;return-1}),Array.prototype.lastIndexOf&&-1==[0,1].lastIndexOf(0,-3)||(Array.prototype.lastIndexOf=function(sought){var self=splitString&&\"[object String]\"==_toString(this)?this.split(\"\"):toObject(this),length=self.length>>>0;if(!length)return-1;var i=length-1;for(arguments.length>1&&(i=Math.min(i,toInteger(arguments[1]))),i=i>=0?i:length-Math.abs(i);i>=0;i--)if(i in self&&sought===self[i])return i;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(object){return object.__proto__||(object.constructor?object.constructor.prototype:prototypeOfObject)}),!Object.getOwnPropertyDescriptor){var ERR_NON_OBJECT=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(object,property){if(\"object\"!=typeof object&&\"function\"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT+object);if(owns(object,property)){var descriptor,getter,setter;if(descriptor={enumerable:!0,configurable:!0},supportsAccessors){var prototype=object.__proto__;object.__proto__=prototypeOfObject;var getter=lookupGetter(object,property),setter=lookupSetter(object,property);if(object.__proto__=prototype,getter||setter)return getter&&(descriptor.get=getter),setter&&(descriptor.set=setter),descriptor}return descriptor.value=object[property],descriptor}}}if(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(object){return Object.keys(object)}),!Object.create){var createEmpty;createEmpty=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var empty={};for(var i in empty)empty[i]=null;return empty.constructor=empty.hasOwnProperty=empty.propertyIsEnumerable=empty.isPrototypeOf=empty.toLocaleString=empty.toString=empty.valueOf=empty.__proto__=null,empty},Object.create=function(prototype,properties){var object;if(null===prototype)object=createEmpty();else{if(\"object\"!=typeof prototype)throw new TypeError(\"typeof prototype[\"+typeof prototype+\"] != 'object'\");var Type=function(){};Type.prototype=prototype,object=new Type,object.__proto__=prototype}return void 0!==properties&&Object.defineProperties(object,properties),object}}if(Object.defineProperty){var definePropertyWorksOnObject=doesDefinePropertyWork({}),definePropertyWorksOnDom=\"undefined\"==typeof document||doesDefinePropertyWork(document.createElement(\"div\"));if(!definePropertyWorksOnObject||!definePropertyWorksOnDom)var definePropertyFallback=Object.defineProperty}if(!Object.defineProperty||definePropertyFallback){var ERR_NON_OBJECT_DESCRIPTOR=\"Property description must be an object: \",ERR_NON_OBJECT_TARGET=\"Object.defineProperty called on non-object: \",ERR_ACCESSORS_NOT_SUPPORTED=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(object,property,descriptor){if(\"object\"!=typeof object&&\"function\"!=typeof object||null===object)throw new TypeError(ERR_NON_OBJECT_TARGET+object);if(\"object\"!=typeof descriptor&&\"function\"!=typeof descriptor||null===descriptor)throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR+descriptor);if(definePropertyFallback)try{return definePropertyFallback.call(Object,object,property,descriptor)}catch(exception){}if(owns(descriptor,\"value\"))if(supportsAccessors&&(lookupGetter(object,property)||lookupSetter(object,property))){var prototype=object.__proto__;object.__proto__=prototypeOfObject,delete object[property],object[property]=descriptor.value,object.__proto__=prototype}else object[property]=descriptor.value;else{if(!supportsAccessors)throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED);owns(descriptor,\"get\")&&defineGetter(object,property,descriptor.get),owns(descriptor,\"set\")&&defineSetter(object,property,descriptor.set)}return object}}Object.defineProperties||(Object.defineProperties=function(object,properties){for(var property in properties)owns(properties,property)&&Object.defineProperty(object,property,properties[property]);return object}),Object.seal||(Object.seal=function(object){return object}),Object.freeze||(Object.freeze=function(object){return object});try{Object.freeze(function(){})}catch(exception){Object.freeze=function(freezeObject){return function(object){return\"function\"==typeof object?object:freezeObject(object)}}(Object.freeze)}if(Object.preventExtensions||(Object.preventExtensions=function(object){return object}),Object.isSealed||(Object.isSealed=function(){return!1}),Object.isFrozen||(Object.isFrozen=function(){return!1}),Object.isExtensible||(Object.isExtensible=function(object){if(Object(object)===object)throw new TypeError;for(var name=\"\";owns(object,name);)name+=\"?\";object[name]=!0;var returnValue=owns(object,name);return delete object[name],returnValue}),!Object.keys){var hasDontEnumBug=!0,dontEnums=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],dontEnumsLength=dontEnums.length;for(var key in{toString:null})hasDontEnumBug=!1;Object.keys=function(object){if(\"object\"!=typeof object&&\"function\"!=typeof object||null===object)throw new TypeError(\"Object.keys called on a non-object\");var keys=[];for(var name in object)owns(object,name)&&keys.push(name);if(hasDontEnumBug)for(var i=0,ii=dontEnumsLength;ii>i;i++){var dontEnum=dontEnums[i];owns(object,dontEnum)&&keys.push(dontEnum)}return keys}}Date.now||(Date.now=function(){return(new Date).getTime()});var ws=\"\t\\n\u000b\\f\\r   ᠎              \\u2028\\u2029\";if(!String.prototype.trim||ws.trim()){ws=\"[\"+ws+\"]\";var trimBeginRegexp=RegExp(\"^\"+ws+ws+\"*\"),trimEndRegexp=RegExp(ws+ws+\"*$\");String.prototype.trim=function(){return(this+\"\").replace(trimBeginRegexp,\"\").replace(trimEndRegexp,\"\")}}var toObject=function(o){if(null==o)throw new TypeError(\"can't convert \"+o+\" to object\");return Object(o)}});"; +},{}],76:[function(require,module,exports){ +var r; + +module.exports = function rand(len) { + if (!r) + r = new Rand(null); + + return r.generate(len); +}; + +function Rand(rand) { + this.rand = rand; +} +module.exports.Rand = Rand; + +Rand.prototype.generate = function generate(len) { + return this._rand(len); +}; + +// Emulate crypto API using randy +Rand.prototype._rand = function _rand(n) { + if (this.rand.getBytes) + return this.rand.getBytes(n); + + var res = new Uint8Array(n); + for (var i = 0; i < res.length; i++) + res[i] = this.rand.getByte(); + return res; +}; + +if (typeof self === 'object') { + if (self.crypto && self.crypto.getRandomValues) { + // Modern browsers + Rand.prototype._rand = function _rand(n) { + var arr = new Uint8Array(n); + self.crypto.getRandomValues(arr); + return arr; + }; + } else if (self.msCrypto && self.msCrypto.getRandomValues) { + // IE + Rand.prototype._rand = function _rand(n) { + var arr = new Uint8Array(n); + self.msCrypto.getRandomValues(arr); + return arr; + }; + + // Safari's WebWorkers do not have `crypto` + } else if (typeof window === 'object') { + // Old junk + Rand.prototype._rand = function() { + throw new Error('Not implemented yet'); + }; + } +} else { + // Node.js or Web worker with no crypto support + try { + var crypto = require('crypto'); + if (typeof crypto.randomBytes !== 'function') + throw new Error('Not supported'); + + Rand.prototype._rand = function _rand(n) { + return crypto.randomBytes(n); + }; + } catch (e) { + } +} + +},{"crypto":77}],77:[function(require,module,exports){ + +},{}],78:[function(require,module,exports){ +// based on the aes implimentation in triple sec +// https://github.com/keybase/triplesec +// which is in turn based on the one from crypto-js +// https://code.google.com/p/crypto-js/ + +var Buffer = require('safe-buffer').Buffer + +function asUInt32Array (buf) { + if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf) + + var len = (buf.length / 4) | 0 + var out = new Array(len) + + for (var i = 0; i < len; i++) { + out[i] = buf.readUInt32BE(i * 4) + } + + return out +} + +function scrubVec (v) { + for (var i = 0; i < v.length; v++) { + v[i] = 0 + } +} + +function cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) { + var SUB_MIX0 = SUB_MIX[0] + var SUB_MIX1 = SUB_MIX[1] + var SUB_MIX2 = SUB_MIX[2] + var SUB_MIX3 = SUB_MIX[3] + + var s0 = M[0] ^ keySchedule[0] + var s1 = M[1] ^ keySchedule[1] + var s2 = M[2] ^ keySchedule[2] + var s3 = M[3] ^ keySchedule[3] + var t0, t1, t2, t3 + var ksRow = 4 + + for (var round = 1; round < nRounds; round++) { + t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++] + t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++] + t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++] + t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++] + s0 = t0 + s1 = t1 + s2 = t2 + s3 = t3 + } + + t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++] + t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++] + t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++] + t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++] + t0 = t0 >>> 0 + t1 = t1 >>> 0 + t2 = t2 >>> 0 + t3 = t3 >>> 0 + + return [t0, t1, t2, t3] +} + +// AES constants +var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36] +var G = (function () { + // Compute double table + var d = new Array(256) + for (var j = 0; j < 256; j++) { + if (j < 128) { + d[j] = j << 1 + } else { + d[j] = (j << 1) ^ 0x11b + } + } + + var SBOX = [] + var INV_SBOX = [] + var SUB_MIX = [[], [], [], []] + var INV_SUB_MIX = [[], [], [], []] + + // Walk GF(2^8) + var x = 0 + var xi = 0 + for (var i = 0; i < 256; ++i) { + // Compute sbox + var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4) + sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63 + SBOX[x] = sx + INV_SBOX[sx] = x + + // Compute multiplication + var x2 = d[x] + var x4 = d[x2] + var x8 = d[x4] + + // Compute sub bytes, mix columns tables + var t = (d[sx] * 0x101) ^ (sx * 0x1010100) + SUB_MIX[0][x] = (t << 24) | (t >>> 8) + SUB_MIX[1][x] = (t << 16) | (t >>> 16) + SUB_MIX[2][x] = (t << 8) | (t >>> 24) + SUB_MIX[3][x] = t + + // Compute inv sub bytes, inv mix columns tables + t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100) + INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8) + INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16) + INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24) + INV_SUB_MIX[3][sx] = t + + if (x === 0) { + x = xi = 1 + } else { + x = x2 ^ d[d[d[x8 ^ x2]]] + xi ^= d[d[xi]] + } + } + + return { + SBOX: SBOX, + INV_SBOX: INV_SBOX, + SUB_MIX: SUB_MIX, + INV_SUB_MIX: INV_SUB_MIX + } +})() + +function AES (key) { + this._key = asUInt32Array(key) + this._reset() +} + +AES.blockSize = 4 * 4 +AES.keySize = 256 / 8 +AES.prototype.blockSize = AES.blockSize +AES.prototype.keySize = AES.keySize +AES.prototype._reset = function () { + var keyWords = this._key + var keySize = keyWords.length + var nRounds = keySize + 6 + var ksRows = (nRounds + 1) * 4 + + var keySchedule = [] + for (var k = 0; k < keySize; k++) { + keySchedule[k] = keyWords[k] + } + + for (k = keySize; k < ksRows; k++) { + var t = keySchedule[k - 1] + + if (k % keySize === 0) { + t = (t << 8) | (t >>> 24) + t = + (G.SBOX[t >>> 24] << 24) | + (G.SBOX[(t >>> 16) & 0xff] << 16) | + (G.SBOX[(t >>> 8) & 0xff] << 8) | + (G.SBOX[t & 0xff]) + + t ^= RCON[(k / keySize) | 0] << 24 + } else if (keySize > 6 && k % keySize === 4) { + t = + (G.SBOX[t >>> 24] << 24) | + (G.SBOX[(t >>> 16) & 0xff] << 16) | + (G.SBOX[(t >>> 8) & 0xff] << 8) | + (G.SBOX[t & 0xff]) + } + + keySchedule[k] = keySchedule[k - keySize] ^ t + } + + var invKeySchedule = [] + for (var ik = 0; ik < ksRows; ik++) { + var ksR = ksRows - ik + var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)] + + if (ik < 4 || ksR <= 4) { + invKeySchedule[ik] = tt + } else { + invKeySchedule[ik] = + G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^ + G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^ + G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^ + G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]] + } + } + + this._nRounds = nRounds + this._keySchedule = keySchedule + this._invKeySchedule = invKeySchedule +} + +AES.prototype.encryptBlockRaw = function (M) { + M = asUInt32Array(M) + return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds) +} + +AES.prototype.encryptBlock = function (M) { + var out = this.encryptBlockRaw(M) + var buf = Buffer.allocUnsafe(16) + buf.writeUInt32BE(out[0], 0) + buf.writeUInt32BE(out[1], 4) + buf.writeUInt32BE(out[2], 8) + buf.writeUInt32BE(out[3], 12) + return buf +} + +AES.prototype.decryptBlock = function (M) { + M = asUInt32Array(M) + + // swap + var m1 = M[1] + M[1] = M[3] + M[3] = m1 + + var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds) + var buf = Buffer.allocUnsafe(16) + buf.writeUInt32BE(out[0], 0) + buf.writeUInt32BE(out[3], 4) + buf.writeUInt32BE(out[2], 8) + buf.writeUInt32BE(out[1], 12) + return buf +} + +AES.prototype.scrub = function () { + scrubVec(this._keySchedule) + scrubVec(this._invKeySchedule) + scrubVec(this._key) +} + +module.exports.AES = AES + +},{"safe-buffer":1334}],79:[function(require,module,exports){ +var aes = require('./aes') +var Buffer = require('safe-buffer').Buffer +var Transform = require('cipher-base') +var inherits = require('inherits') +var GHASH = require('./ghash') +var xor = require('buffer-xor') +var incr32 = require('./incr32') + +function xorTest (a, b) { + var out = 0 + if (a.length !== b.length) out++ + + var len = Math.min(a.length, b.length) + for (var i = 0; i < len; ++i) { + out += (a[i] ^ b[i]) + } + + return out +} + +function calcIv (self, iv, ck) { + if (iv.length === 12) { + self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])]) + return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])]) + } + var ghash = new GHASH(ck) + var len = iv.length + var toPad = len % 16 + ghash.update(iv) + if (toPad) { + toPad = 16 - toPad + ghash.update(Buffer.alloc(toPad, 0)) + } + ghash.update(Buffer.alloc(8, 0)) + var ivBits = len * 8 + var tail = Buffer.alloc(8) + tail.writeUIntBE(ivBits, 0, 8) + ghash.update(tail) + self._finID = ghash.state + var out = Buffer.from(self._finID) + incr32(out) + return out +} +function StreamCipher (mode, key, iv, decrypt) { + Transform.call(this) + + var h = Buffer.alloc(4, 0) + + this._cipher = new aes.AES(key) + var ck = this._cipher.encryptBlock(h) + this._ghash = new GHASH(ck) + iv = calcIv(this, iv, ck) + + this._prev = Buffer.from(iv) + this._cache = Buffer.allocUnsafe(0) + this._secCache = Buffer.allocUnsafe(0) + this._decrypt = decrypt + this._alen = 0 + this._len = 0 + this._mode = mode + + this._authTag = null + this._called = false +} + +inherits(StreamCipher, Transform) + +StreamCipher.prototype._update = function (chunk) { + if (!this._called && this._alen) { + var rump = 16 - (this._alen % 16) + if (rump < 16) { + rump = Buffer.alloc(rump, 0) + this._ghash.update(rump) + } + } + + this._called = true + var out = this._mode.encrypt(this, chunk) + if (this._decrypt) { + this._ghash.update(chunk) + } else { + this._ghash.update(out) + } + this._len += chunk.length + return out +} + +StreamCipher.prototype._final = function () { + if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data') + + var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID)) + if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data') + + this._authTag = tag + this._cipher.scrub() +} + +StreamCipher.prototype.getAuthTag = function getAuthTag () { + if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state') + + return this._authTag +} + +StreamCipher.prototype.setAuthTag = function setAuthTag (tag) { + if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state') + + this._authTag = tag +} + +StreamCipher.prototype.setAAD = function setAAD (buf) { + if (this._called) throw new Error('Attempting to set AAD in unsupported state') + + this._ghash.update(buf) + this._alen += buf.length +} + +module.exports = StreamCipher + +},{"./aes":78,"./ghash":83,"./incr32":84,"buffer-xor":112,"cipher-base":120,"inherits":834,"safe-buffer":1334}],80:[function(require,module,exports){ +var ciphers = require('./encrypter') +var deciphers = require('./decrypter') +var modes = require('./modes/list.json') + +function getCiphers () { + return Object.keys(modes) +} + +exports.createCipher = exports.Cipher = ciphers.createCipher +exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv +exports.createDecipher = exports.Decipher = deciphers.createDecipher +exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv +exports.listCiphers = exports.getCiphers = getCiphers + +},{"./decrypter":81,"./encrypter":82,"./modes/list.json":92}],81:[function(require,module,exports){ +var AuthCipher = require('./authCipher') +var Buffer = require('safe-buffer').Buffer +var MODES = require('./modes') +var StreamCipher = require('./streamCipher') +var Transform = require('cipher-base') +var aes = require('./aes') +var ebtk = require('evp_bytestokey') +var inherits = require('inherits') + +function Decipher (mode, key, iv) { + Transform.call(this) + + this._cache = new Splitter() + this._last = void 0 + this._cipher = new aes.AES(key) + this._prev = Buffer.from(iv) + this._mode = mode + this._autopadding = true +} + +inherits(Decipher, Transform) + +Decipher.prototype._update = function (data) { + this._cache.add(data) + var chunk + var thing + var out = [] + while ((chunk = this._cache.get(this._autopadding))) { + thing = this._mode.decrypt(this, chunk) + out.push(thing) + } + return Buffer.concat(out) +} + +Decipher.prototype._final = function () { + var chunk = this._cache.flush() + if (this._autopadding) { + return unpad(this._mode.decrypt(this, chunk)) + } else if (chunk) { + throw new Error('data not multiple of block length') + } +} + +Decipher.prototype.setAutoPadding = function (setTo) { + this._autopadding = !!setTo + return this +} + +function Splitter () { + this.cache = Buffer.allocUnsafe(0) +} + +Splitter.prototype.add = function (data) { + this.cache = Buffer.concat([this.cache, data]) +} + +Splitter.prototype.get = function (autoPadding) { + var out + if (autoPadding) { + if (this.cache.length > 16) { + out = this.cache.slice(0, 16) + this.cache = this.cache.slice(16) + return out + } + } else { + if (this.cache.length >= 16) { + out = this.cache.slice(0, 16) + this.cache = this.cache.slice(16) + return out + } + } + + return null +} + +Splitter.prototype.flush = function () { + if (this.cache.length) return this.cache +} + +function unpad (last) { + var padded = last[15] + if (padded < 1 || padded > 16) { + throw new Error('unable to decrypt data') + } + var i = -1 + while (++i < padded) { + if (last[(i + (16 - padded))] !== padded) { + throw new Error('unable to decrypt data') + } + } + if (padded === 16) return + + return last.slice(0, 16 - padded) +} + +function createDecipheriv (suite, password, iv) { + var config = MODES[suite.toLowerCase()] + if (!config) throw new TypeError('invalid suite type') + + if (typeof iv === 'string') iv = Buffer.from(iv) + if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length) + + if (typeof password === 'string') password = Buffer.from(password) + if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length) + + if (config.type === 'stream') { + return new StreamCipher(config.module, password, iv, true) + } else if (config.type === 'auth') { + return new AuthCipher(config.module, password, iv, true) + } + + return new Decipher(config.module, password, iv) +} + +function createDecipher (suite, password) { + var config = MODES[suite.toLowerCase()] + if (!config) throw new TypeError('invalid suite type') + + var keys = ebtk(password, false, config.key, config.iv) + return createDecipheriv(suite, keys.key, keys.iv) +} + +exports.createDecipher = createDecipher +exports.createDecipheriv = createDecipheriv + +},{"./aes":78,"./authCipher":79,"./modes":91,"./streamCipher":94,"cipher-base":120,"evp_bytestokey":709,"inherits":834,"safe-buffer":1334}],82:[function(require,module,exports){ +var MODES = require('./modes') +var AuthCipher = require('./authCipher') +var Buffer = require('safe-buffer').Buffer +var StreamCipher = require('./streamCipher') +var Transform = require('cipher-base') +var aes = require('./aes') +var ebtk = require('evp_bytestokey') +var inherits = require('inherits') + +function Cipher (mode, key, iv) { + Transform.call(this) + + this._cache = new Splitter() + this._cipher = new aes.AES(key) + this._prev = Buffer.from(iv) + this._mode = mode + this._autopadding = true +} + +inherits(Cipher, Transform) + +Cipher.prototype._update = function (data) { + this._cache.add(data) + var chunk + var thing + var out = [] + + while ((chunk = this._cache.get())) { + thing = this._mode.encrypt(this, chunk) + out.push(thing) + } + + return Buffer.concat(out) +} + +var PADDING = Buffer.alloc(16, 0x10) + +Cipher.prototype._final = function () { + var chunk = this._cache.flush() + if (this._autopadding) { + chunk = this._mode.encrypt(this, chunk) + this._cipher.scrub() + return chunk + } + + if (!chunk.equals(PADDING)) { + this._cipher.scrub() + throw new Error('data not multiple of block length') + } +} + +Cipher.prototype.setAutoPadding = function (setTo) { + this._autopadding = !!setTo + return this +} + +function Splitter () { + this.cache = Buffer.allocUnsafe(0) +} + +Splitter.prototype.add = function (data) { + this.cache = Buffer.concat([this.cache, data]) +} + +Splitter.prototype.get = function () { + if (this.cache.length > 15) { + var out = this.cache.slice(0, 16) + this.cache = this.cache.slice(16) + return out + } + return null +} + +Splitter.prototype.flush = function () { + var len = 16 - this.cache.length + var padBuff = Buffer.allocUnsafe(len) + + var i = -1 + while (++i < len) { + padBuff.writeUInt8(len, i) + } + + return Buffer.concat([this.cache, padBuff]) +} + +function createCipheriv (suite, password, iv) { + var config = MODES[suite.toLowerCase()] + if (!config) throw new TypeError('invalid suite type') + + if (typeof password === 'string') password = Buffer.from(password) + if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length) + + if (typeof iv === 'string') iv = Buffer.from(iv) + if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length) + + if (config.type === 'stream') { + return new StreamCipher(config.module, password, iv) + } else if (config.type === 'auth') { + return new AuthCipher(config.module, password, iv) + } + + return new Cipher(config.module, password, iv) +} + +function createCipher (suite, password) { + var config = MODES[suite.toLowerCase()] + if (!config) throw new TypeError('invalid suite type') + + var keys = ebtk(password, false, config.key, config.iv) + return createCipheriv(suite, keys.key, keys.iv) +} + +exports.createCipheriv = createCipheriv +exports.createCipher = createCipher + +},{"./aes":78,"./authCipher":79,"./modes":91,"./streamCipher":94,"cipher-base":120,"evp_bytestokey":709,"inherits":834,"safe-buffer":1334}],83:[function(require,module,exports){ +var Buffer = require('safe-buffer').Buffer +var ZEROES = Buffer.alloc(16, 0) + +function toArray (buf) { + return [ + buf.readUInt32BE(0), + buf.readUInt32BE(4), + buf.readUInt32BE(8), + buf.readUInt32BE(12) + ] +} + +function fromArray (out) { + var buf = Buffer.allocUnsafe(16) + buf.writeUInt32BE(out[0] >>> 0, 0) + buf.writeUInt32BE(out[1] >>> 0, 4) + buf.writeUInt32BE(out[2] >>> 0, 8) + buf.writeUInt32BE(out[3] >>> 0, 12) + return buf +} + +function GHASH (key) { + this.h = key + this.state = Buffer.alloc(16, 0) + this.cache = Buffer.allocUnsafe(0) +} + +// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html +// by Juho Vähä-Herttua +GHASH.prototype.ghash = function (block) { + var i = -1 + while (++i < block.length) { + this.state[i] ^= block[i] + } + this._multiply() +} + +GHASH.prototype._multiply = function () { + var Vi = toArray(this.h) + var Zi = [0, 0, 0, 0] + var j, xi, lsbVi + var i = -1 + while (++i < 128) { + xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0 + if (xi) { + // Z_i+1 = Z_i ^ V_i + Zi[0] ^= Vi[0] + Zi[1] ^= Vi[1] + Zi[2] ^= Vi[2] + Zi[3] ^= Vi[3] + } + + // Store the value of LSB(V_i) + lsbVi = (Vi[3] & 1) !== 0 + + // V_i+1 = V_i >> 1 + for (j = 3; j > 0; j--) { + Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31) + } + Vi[0] = Vi[0] >>> 1 + + // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R + if (lsbVi) { + Vi[0] = Vi[0] ^ (0xe1 << 24) + } + } + this.state = fromArray(Zi) +} + +GHASH.prototype.update = function (buf) { + this.cache = Buffer.concat([this.cache, buf]) + var chunk + while (this.cache.length >= 16) { + chunk = this.cache.slice(0, 16) + this.cache = this.cache.slice(16) + this.ghash(chunk) + } +} + +GHASH.prototype.final = function (abl, bl) { + if (this.cache.length) { + this.ghash(Buffer.concat([this.cache, ZEROES], 16)) + } + + this.ghash(fromArray([0, abl, 0, bl])) + return this.state +} + +module.exports = GHASH + +},{"safe-buffer":1334}],84:[function(require,module,exports){ +function incr32 (iv) { + var len = iv.length + var item + while (len--) { + item = iv.readUInt8(len) + if (item === 255) { + iv.writeUInt8(0, len) + } else { + item++ + iv.writeUInt8(item, len) + break + } + } +} +module.exports = incr32 + +},{}],85:[function(require,module,exports){ +var xor = require('buffer-xor') + +exports.encrypt = function (self, block) { + var data = xor(block, self._prev) + + self._prev = self._cipher.encryptBlock(data) + return self._prev +} + +exports.decrypt = function (self, block) { + var pad = self._prev + + self._prev = block + var out = self._cipher.decryptBlock(block) + + return xor(out, pad) +} + +},{"buffer-xor":112}],86:[function(require,module,exports){ +var Buffer = require('safe-buffer').Buffer +var xor = require('buffer-xor') + +function encryptStart (self, data, decrypt) { + var len = data.length + var out = xor(data, self._cache) + self._cache = self._cache.slice(len) + self._prev = Buffer.concat([self._prev, decrypt ? data : out]) + return out +} + +exports.encrypt = function (self, data, decrypt) { + var out = Buffer.allocUnsafe(0) + var len + + while (data.length) { + if (self._cache.length === 0) { + self._cache = self._cipher.encryptBlock(self._prev) + self._prev = Buffer.allocUnsafe(0) + } + + if (self._cache.length <= data.length) { + len = self._cache.length + out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)]) + data = data.slice(len) + } else { + out = Buffer.concat([out, encryptStart(self, data, decrypt)]) + break + } + } + + return out +} + +},{"buffer-xor":112,"safe-buffer":1334}],87:[function(require,module,exports){ +var Buffer = require('safe-buffer').Buffer + +function encryptByte (self, byteParam, decrypt) { + var pad + var i = -1 + var len = 8 + var out = 0 + var bit, value + while (++i < len) { + pad = self._cipher.encryptBlock(self._prev) + bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0 + value = pad[0] ^ bit + out += ((value & 0x80) >> (i % 8)) + self._prev = shiftIn(self._prev, decrypt ? bit : value) + } + return out +} + +function shiftIn (buffer, value) { + var len = buffer.length + var i = -1 + var out = Buffer.allocUnsafe(buffer.length) + buffer = Buffer.concat([buffer, Buffer.from([value])]) + + while (++i < len) { + out[i] = buffer[i] << 1 | buffer[i + 1] >> (7) + } + + return out +} + +exports.encrypt = function (self, chunk, decrypt) { + var len = chunk.length + var out = Buffer.allocUnsafe(len) + var i = -1 + + while (++i < len) { + out[i] = encryptByte(self, chunk[i], decrypt) + } + + return out +} + +},{"safe-buffer":1334}],88:[function(require,module,exports){ +var Buffer = require('safe-buffer').Buffer + +function encryptByte (self, byteParam, decrypt) { + var pad = self._cipher.encryptBlock(self._prev) + var out = pad[0] ^ byteParam + + self._prev = Buffer.concat([ + self._prev.slice(1), + Buffer.from([decrypt ? byteParam : out]) + ]) + + return out +} + +exports.encrypt = function (self, chunk, decrypt) { + var len = chunk.length + var out = Buffer.allocUnsafe(len) + var i = -1 + + while (++i < len) { + out[i] = encryptByte(self, chunk[i], decrypt) + } + + return out +} + +},{"safe-buffer":1334}],89:[function(require,module,exports){ +var xor = require('buffer-xor') +var Buffer = require('safe-buffer').Buffer +var incr32 = require('../incr32') + +function getBlock (self) { + var out = self._cipher.encryptBlockRaw(self._prev) + incr32(self._prev) + return out +} + +var blockSize = 16 +exports.encrypt = function (self, chunk) { + var chunkNum = Math.ceil(chunk.length / blockSize) + var start = self._cache.length + self._cache = Buffer.concat([ + self._cache, + Buffer.allocUnsafe(chunkNum * blockSize) + ]) + for (var i = 0; i < chunkNum; i++) { + var out = getBlock(self) + var offset = start + i * blockSize + self._cache.writeUInt32BE(out[0], offset + 0) + self._cache.writeUInt32BE(out[1], offset + 4) + self._cache.writeUInt32BE(out[2], offset + 8) + self._cache.writeUInt32BE(out[3], offset + 12) + } + var pad = self._cache.slice(0, chunk.length) + self._cache = self._cache.slice(chunk.length) + return xor(chunk, pad) +} + +},{"../incr32":84,"buffer-xor":112,"safe-buffer":1334}],90:[function(require,module,exports){ +exports.encrypt = function (self, block) { + return self._cipher.encryptBlock(block) +} + +exports.decrypt = function (self, block) { + return self._cipher.decryptBlock(block) +} + +},{}],91:[function(require,module,exports){ +var modeModules = { + ECB: require('./ecb'), + CBC: require('./cbc'), + CFB: require('./cfb'), + CFB8: require('./cfb8'), + CFB1: require('./cfb1'), + OFB: require('./ofb'), + CTR: require('./ctr'), + GCM: require('./ctr') +} + +var modes = require('./list.json') + +for (var key in modes) { + modes[key].module = modeModules[modes[key].mode] +} + +module.exports = modes + +},{"./cbc":85,"./cfb":86,"./cfb1":87,"./cfb8":88,"./ctr":89,"./ecb":90,"./list.json":92,"./ofb":93}],92:[function(require,module,exports){ +module.exports={ + "aes-128-ecb": { + "cipher": "AES", + "key": 128, + "iv": 0, + "mode": "ECB", + "type": "block" + }, + "aes-192-ecb": { + "cipher": "AES", + "key": 192, + "iv": 0, + "mode": "ECB", + "type": "block" + }, + "aes-256-ecb": { + "cipher": "AES", + "key": 256, + "iv": 0, + "mode": "ECB", + "type": "block" + }, + "aes-128-cbc": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes-192-cbc": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes-256-cbc": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes128": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes192": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes256": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CBC", + "type": "block" + }, + "aes-128-cfb": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CFB", + "type": "stream" + }, + "aes-192-cfb": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CFB", + "type": "stream" + }, + "aes-256-cfb": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CFB", + "type": "stream" + }, + "aes-128-cfb8": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CFB8", + "type": "stream" + }, + "aes-192-cfb8": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CFB8", + "type": "stream" + }, + "aes-256-cfb8": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CFB8", + "type": "stream" + }, + "aes-128-cfb1": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CFB1", + "type": "stream" + }, + "aes-192-cfb1": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CFB1", + "type": "stream" + }, + "aes-256-cfb1": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CFB1", + "type": "stream" + }, + "aes-128-ofb": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "OFB", + "type": "stream" + }, + "aes-192-ofb": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "OFB", + "type": "stream" + }, + "aes-256-ofb": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "OFB", + "type": "stream" + }, + "aes-128-ctr": { + "cipher": "AES", + "key": 128, + "iv": 16, + "mode": "CTR", + "type": "stream" + }, + "aes-192-ctr": { + "cipher": "AES", + "key": 192, + "iv": 16, + "mode": "CTR", + "type": "stream" + }, + "aes-256-ctr": { + "cipher": "AES", + "key": 256, + "iv": 16, + "mode": "CTR", + "type": "stream" + }, + "aes-128-gcm": { + "cipher": "AES", + "key": 128, + "iv": 12, + "mode": "GCM", + "type": "auth" + }, + "aes-192-gcm": { + "cipher": "AES", + "key": 192, + "iv": 12, + "mode": "GCM", + "type": "auth" + }, + "aes-256-gcm": { + "cipher": "AES", + "key": 256, + "iv": 12, + "mode": "GCM", + "type": "auth" + } +} + +},{}],93:[function(require,module,exports){ +(function (Buffer){ +var xor = require('buffer-xor') + +function getBlock (self) { + self._prev = self._cipher.encryptBlock(self._prev) + return self._prev +} + +exports.encrypt = function (self, chunk) { + while (self._cache.length < chunk.length) { + self._cache = Buffer.concat([self._cache, getBlock(self)]) + } + + var pad = self._cache.slice(0, chunk.length) + self._cache = self._cache.slice(chunk.length) + return xor(chunk, pad) +} + +}).call(this,require("buffer").Buffer) +},{"buffer":113,"buffer-xor":112}],94:[function(require,module,exports){ +var aes = require('./aes') +var Buffer = require('safe-buffer').Buffer +var Transform = require('cipher-base') +var inherits = require('inherits') + +function StreamCipher (mode, key, iv, decrypt) { + Transform.call(this) + + this._cipher = new aes.AES(key) + this._prev = Buffer.from(iv) + this._cache = Buffer.allocUnsafe(0) + this._secCache = Buffer.allocUnsafe(0) + this._decrypt = decrypt + this._mode = mode +} + +inherits(StreamCipher, Transform) + +StreamCipher.prototype._update = function (chunk) { + return this._mode.encrypt(this, chunk, this._decrypt) +} + +StreamCipher.prototype._final = function () { + this._cipher.scrub() +} + +module.exports = StreamCipher + +},{"./aes":78,"cipher-base":120,"inherits":834,"safe-buffer":1334}],95:[function(require,module,exports){ +var DES = require('browserify-des') +var aes = require('browserify-aes/browser') +var aesModes = require('browserify-aes/modes') +var desModes = require('browserify-des/modes') +var ebtk = require('evp_bytestokey') + +function createCipher (suite, password) { + suite = suite.toLowerCase() + + var keyLen, ivLen + if (aesModes[suite]) { + keyLen = aesModes[suite].key + ivLen = aesModes[suite].iv + } else if (desModes[suite]) { + keyLen = desModes[suite].key * 8 + ivLen = desModes[suite].iv + } else { + throw new TypeError('invalid suite type') + } + + var keys = ebtk(password, false, keyLen, ivLen) + return createCipheriv(suite, keys.key, keys.iv) +} + +function createDecipher (suite, password) { + suite = suite.toLowerCase() + + var keyLen, ivLen + if (aesModes[suite]) { + keyLen = aesModes[suite].key + ivLen = aesModes[suite].iv + } else if (desModes[suite]) { + keyLen = desModes[suite].key * 8 + ivLen = desModes[suite].iv + } else { + throw new TypeError('invalid suite type') + } + + var keys = ebtk(password, false, keyLen, ivLen) + return createDecipheriv(suite, keys.key, keys.iv) +} + +function createCipheriv (suite, key, iv) { + suite = suite.toLowerCase() + if (aesModes[suite]) return aes.createCipheriv(suite, key, iv) + if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite }) + + throw new TypeError('invalid suite type') +} + +function createDecipheriv (suite, key, iv) { + suite = suite.toLowerCase() + if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv) + if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true }) + + throw new TypeError('invalid suite type') +} + +function getCiphers () { + return Object.keys(desModes).concat(aes.getCiphers()) +} + +exports.createCipher = exports.Cipher = createCipher +exports.createCipheriv = exports.Cipheriv = createCipheriv +exports.createDecipher = exports.Decipher = createDecipher +exports.createDecipheriv = exports.Decipheriv = createDecipheriv +exports.listCiphers = exports.getCiphers = getCiphers + +},{"browserify-aes/browser":80,"browserify-aes/modes":91,"browserify-des":96,"browserify-des/modes":97,"evp_bytestokey":709}],96:[function(require,module,exports){ +var CipherBase = require('cipher-base') +var des = require('des.js') +var inherits = require('inherits') +var Buffer = require('safe-buffer').Buffer + +var modes = { + 'des-ede3-cbc': des.CBC.instantiate(des.EDE), + 'des-ede3': des.EDE, + 'des-ede-cbc': des.CBC.instantiate(des.EDE), + 'des-ede': des.EDE, + 'des-cbc': des.CBC.instantiate(des.DES), + 'des-ecb': des.DES +} +modes.des = modes['des-cbc'] +modes.des3 = modes['des-ede3-cbc'] +module.exports = DES +inherits(DES, CipherBase) +function DES (opts) { + CipherBase.call(this) + var modeName = opts.mode.toLowerCase() + var mode = modes[modeName] + var type + if (opts.decrypt) { + type = 'decrypt' + } else { + type = 'encrypt' + } + var key = opts.key + if (!Buffer.isBuffer(key)) { + key = Buffer.from(key) + } + if (modeName === 'des-ede' || modeName === 'des-ede-cbc') { + key = Buffer.concat([key, key.slice(0, 8)]) + } + var iv = opts.iv + if (!Buffer.isBuffer(iv)) { + iv = Buffer.from(iv) + } + this._des = mode.create({ + key: key, + iv: iv, + type: type + }) +} +DES.prototype._update = function (data) { + return Buffer.from(this._des.update(data)) +} +DES.prototype._final = function () { + return Buffer.from(this._des.final()) +} + +},{"cipher-base":120,"des.js":533,"inherits":834,"safe-buffer":1334}],97:[function(require,module,exports){ +exports['des-ecb'] = { + key: 8, + iv: 0 +} +exports['des-cbc'] = exports.des = { + key: 8, + iv: 8 +} +exports['des-ede3-cbc'] = exports.des3 = { + key: 24, + iv: 8 +} +exports['des-ede3'] = { + key: 24, + iv: 0 +} +exports['des-ede-cbc'] = { + key: 16, + iv: 8 +} +exports['des-ede'] = { + key: 16, + iv: 0 +} + +},{}],98:[function(require,module,exports){ +(function (Buffer){ +var bn = require('bn.js'); +var randomBytes = require('randombytes'); +module.exports = crt; +function blind(priv) { + var r = getr(priv); + var blinder = r.toRed(bn.mont(priv.modulus)) + .redPow(new bn(priv.publicExponent)).fromRed(); + return { + blinder: blinder, + unblinder:r.invm(priv.modulus) + }; +} +function crt(msg, priv) { + var blinds = blind(priv); + var len = priv.modulus.byteLength(); + var mod = bn.mont(priv.modulus); + var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus); + var c1 = blinded.toRed(bn.mont(priv.prime1)); + var c2 = blinded.toRed(bn.mont(priv.prime2)); + var qinv = priv.coefficient; + var p = priv.prime1; + var q = priv.prime2; + var m1 = c1.redPow(priv.exponent1); + var m2 = c2.redPow(priv.exponent2); + m1 = m1.fromRed(); + m2 = m2.fromRed(); + var h = m1.isub(m2).imul(qinv).umod(p); + h.imul(q); + m2.iadd(h); + return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len)); +} +crt.getr = getr; +function getr(priv) { + var len = priv.modulus.byteLength(); + var r = new bn(randomBytes(len)); + while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) { + r = new bn(randomBytes(len)); + } + return r; +} + +}).call(this,require("buffer").Buffer) +},{"bn.js":66,"buffer":113,"randombytes":1036}],99:[function(require,module,exports){ +const Sha3 = require('js-sha3') +const Buffer = require('safe-buffer').Buffer + +const hashLengths = [ 224, 256, 384, 512 ] + +const hash = function (bitcount) { + if (bitcount !== undefined && hashLengths.indexOf(bitcount) === -1) { + throw new Error('Unsupported hash length') + } + this.content = [] + this.bitcount = bitcount ? 'keccak_' + bitcount : 'keccak_512' +} + +hash.prototype.update = function (i) { + if (Buffer.isBuffer(i)) { + this.content.push(i) + } else if (typeof i === 'string') { + this.content.push(new Buffer(i)) + } else { + throw new Error('Unsupported argument to update') + } + return this +} + +hash.prototype.digest = function (encoding) { + const result = Sha3[this.bitcount](Buffer.concat(this.content)) + if (encoding === 'hex') { + return result + } else if (encoding === 'binary' || encoding === undefined) { + return new Buffer(result, 'hex').toString('binary') + } else { + throw new Error('Unsupported encoding for digest: ' + encoding) + } +} + +module.exports = { + SHA3Hash: hash +} + +},{"js-sha3":862,"safe-buffer":1334}],100:[function(require,module,exports){ +module.exports = require('./browser/algorithms.json') + +},{"./browser/algorithms.json":101}],101:[function(require,module,exports){ +module.exports={ + "sha224WithRSAEncryption": { + "sign": "rsa", + "hash": "sha224", + "id": "302d300d06096086480165030402040500041c" + }, + "RSA-SHA224": { + "sign": "ecdsa/rsa", + "hash": "sha224", + "id": "302d300d06096086480165030402040500041c" + }, + "sha256WithRSAEncryption": { + "sign": "rsa", + "hash": "sha256", + "id": "3031300d060960864801650304020105000420" + }, + "RSA-SHA256": { + "sign": "ecdsa/rsa", + "hash": "sha256", + "id": "3031300d060960864801650304020105000420" + }, + "sha384WithRSAEncryption": { + "sign": "rsa", + "hash": "sha384", + "id": "3041300d060960864801650304020205000430" + }, + "RSA-SHA384": { + "sign": "ecdsa/rsa", + "hash": "sha384", + "id": "3041300d060960864801650304020205000430" + }, + "sha512WithRSAEncryption": { + "sign": "rsa", + "hash": "sha512", + "id": "3051300d060960864801650304020305000440" + }, + "RSA-SHA512": { + "sign": "ecdsa/rsa", + "hash": "sha512", + "id": "3051300d060960864801650304020305000440" + }, + "RSA-SHA1": { + "sign": "rsa", + "hash": "sha1", + "id": "3021300906052b0e03021a05000414" + }, + "ecdsa-with-SHA1": { + "sign": "ecdsa", + "hash": "sha1", + "id": "" + }, + "sha256": { + "sign": "ecdsa", + "hash": "sha256", + "id": "" + }, + "sha224": { + "sign": "ecdsa", + "hash": "sha224", + "id": "" + }, + "sha384": { + "sign": "ecdsa", + "hash": "sha384", + "id": "" + }, + "sha512": { + "sign": "ecdsa", + "hash": "sha512", + "id": "" + }, + "DSA-SHA": { + "sign": "dsa", + "hash": "sha1", + "id": "" + }, + "DSA-SHA1": { + "sign": "dsa", + "hash": "sha1", + "id": "" + }, + "DSA": { + "sign": "dsa", + "hash": "sha1", + "id": "" + }, + "DSA-WITH-SHA224": { + "sign": "dsa", + "hash": "sha224", + "id": "" + }, + "DSA-SHA224": { + "sign": "dsa", + "hash": "sha224", + "id": "" + }, + "DSA-WITH-SHA256": { + "sign": "dsa", + "hash": "sha256", + "id": "" + }, + "DSA-SHA256": { + "sign": "dsa", + "hash": "sha256", + "id": "" + }, + "DSA-WITH-SHA384": { + "sign": "dsa", + "hash": "sha384", + "id": "" + }, + "DSA-SHA384": { + "sign": "dsa", + "hash": "sha384", + "id": "" + }, + "DSA-WITH-SHA512": { + "sign": "dsa", + "hash": "sha512", + "id": "" + }, + "DSA-SHA512": { + "sign": "dsa", + "hash": "sha512", + "id": "" + }, + "DSA-RIPEMD160": { + "sign": "dsa", + "hash": "rmd160", + "id": "" + }, + "ripemd160WithRSA": { + "sign": "rsa", + "hash": "rmd160", + "id": "3021300906052b2403020105000414" + }, + "RSA-RIPEMD160": { + "sign": "rsa", + "hash": "rmd160", + "id": "3021300906052b2403020105000414" + }, + "md5WithRSAEncryption": { + "sign": "rsa", + "hash": "md5", + "id": "3020300c06082a864886f70d020505000410" + }, + "RSA-MD5": { + "sign": "rsa", + "hash": "md5", + "id": "3020300c06082a864886f70d020505000410" + } +} + +},{}],102:[function(require,module,exports){ +module.exports={ + "1.3.132.0.10": "secp256k1", + "1.3.132.0.33": "p224", + "1.2.840.10045.3.1.1": "p192", + "1.2.840.10045.3.1.7": "p256", + "1.3.132.0.34": "p384", + "1.3.132.0.35": "p521" +} + +},{}],103:[function(require,module,exports){ +(function (Buffer){ +var createHash = require('create-hash') +var stream = require('stream') +var inherits = require('inherits') +var sign = require('./sign') +var verify = require('./verify') + +var algorithms = require('./algorithms.json') +Object.keys(algorithms).forEach(function (key) { + algorithms[key].id = new Buffer(algorithms[key].id, 'hex') + algorithms[key.toLowerCase()] = algorithms[key] +}) + +function Sign (algorithm) { + stream.Writable.call(this) + + var data = algorithms[algorithm] + if (!data) throw new Error('Unknown message digest') + + this._hashType = data.hash + this._hash = createHash(data.hash) + this._tag = data.id + this._signType = data.sign +} +inherits(Sign, stream.Writable) + +Sign.prototype._write = function _write (data, _, done) { + this._hash.update(data) + done() +} + +Sign.prototype.update = function update (data, enc) { + if (typeof data === 'string') data = new Buffer(data, enc) + + this._hash.update(data) + return this +} + +Sign.prototype.sign = function signMethod (key, enc) { + this.end() + var hash = this._hash.digest() + var sig = sign(hash, key, this._hashType, this._signType, this._tag) + + return enc ? sig.toString(enc) : sig +} + +function Verify (algorithm) { + stream.Writable.call(this) + + var data = algorithms[algorithm] + if (!data) throw new Error('Unknown message digest') + + this._hash = createHash(data.hash) + this._tag = data.id + this._signType = data.sign +} +inherits(Verify, stream.Writable) + +Verify.prototype._write = function _write (data, _, done) { + this._hash.update(data) + done() +} + +Verify.prototype.update = function update (data, enc) { + if (typeof data === 'string') data = new Buffer(data, enc) + + this._hash.update(data) + return this +} + +Verify.prototype.verify = function verifyMethod (key, sig, enc) { + if (typeof sig === 'string') sig = new Buffer(sig, enc) + + this.end() + var hash = this._hash.digest() + return verify(sig, hash, key, this._signType, this._tag) +} + +function createSign (algorithm) { + return new Sign(algorithm) +} + +function createVerify (algorithm) { + return new Verify(algorithm) +} + +module.exports = { + Sign: createSign, + Verify: createVerify, + createSign: createSign, + createVerify: createVerify +} + +}).call(this,require("buffer").Buffer) +},{"./algorithms.json":101,"./sign":104,"./verify":105,"buffer":113,"create-hash":466,"inherits":834,"stream":1394}],104:[function(require,module,exports){ +(function (Buffer){ +// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js +var createHmac = require('create-hmac') +var crt = require('browserify-rsa') +var EC = require('elliptic').ec +var BN = require('bn.js') +var parseKeys = require('parse-asn1') +var curves = require('./curves.json') + +function sign (hash, key, hashType, signType, tag) { + var priv = parseKeys(key) + if (priv.curve) { + // rsa keys can be interpreted as ecdsa ones in openssl + if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type') + return ecSign(hash, priv) + } else if (priv.type === 'dsa') { + if (signType !== 'dsa') throw new Error('wrong private key type') + return dsaSign(hash, priv, hashType) + } else { + if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type') + } + hash = Buffer.concat([tag, hash]) + var len = priv.modulus.byteLength() + var pad = [ 0, 1 ] + while (hash.length + pad.length + 1 < len) pad.push(0xff) + pad.push(0x00) + var i = -1 + while (++i < hash.length) pad.push(hash[i]) + + var out = crt(pad, priv) + return out +} + +function ecSign (hash, priv) { + var curveId = curves[priv.curve.join('.')] + if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.')) + + var curve = new EC(curveId) + var key = curve.keyFromPrivate(priv.privateKey) + var out = key.sign(hash) + + return new Buffer(out.toDER()) +} + +function dsaSign (hash, priv, algo) { + var x = priv.params.priv_key + var p = priv.params.p + var q = priv.params.q + var g = priv.params.g + var r = new BN(0) + var k + var H = bits2int(hash, q).mod(q) + var s = false + var kv = getKey(x, q, hash, algo) + while (s === false) { + k = makeKey(q, kv, algo) + r = makeR(g, k, p, q) + s = k.invm(q).imul(H.add(x.mul(r))).mod(q) + if (s.cmpn(0) === 0) { + s = false + r = new BN(0) + } + } + return toDER(r, s) +} + +function toDER (r, s) { + r = r.toArray() + s = s.toArray() + + // Pad values + if (r[0] & 0x80) r = [ 0 ].concat(r) + if (s[0] & 0x80) s = [ 0 ].concat(s) + + var total = r.length + s.length + 4 + var res = [ 0x30, total, 0x02, r.length ] + res = res.concat(r, [ 0x02, s.length ], s) + return new Buffer(res) +} + +function getKey (x, q, hash, algo) { + x = new Buffer(x.toArray()) + if (x.length < q.byteLength()) { + var zeros = new Buffer(q.byteLength() - x.length) + zeros.fill(0) + x = Buffer.concat([ zeros, x ]) + } + var hlen = hash.length + var hbits = bits2octets(hash, q) + var v = new Buffer(hlen) + v.fill(1) + var k = new Buffer(hlen) + k.fill(0) + k = createHmac(algo, k).update(v).update(new Buffer([ 0 ])).update(x).update(hbits).digest() + v = createHmac(algo, k).update(v).digest() + k = createHmac(algo, k).update(v).update(new Buffer([ 1 ])).update(x).update(hbits).digest() + v = createHmac(algo, k).update(v).digest() + return { k: k, v: v } +} + +function bits2int (obits, q) { + var bits = new BN(obits) + var shift = (obits.length << 3) - q.bitLength() + if (shift > 0) bits.ishrn(shift) + return bits +} + +function bits2octets (bits, q) { + bits = bits2int(bits, q) + bits = bits.mod(q) + var out = new Buffer(bits.toArray()) + if (out.length < q.byteLength()) { + var zeros = new Buffer(q.byteLength() - out.length) + zeros.fill(0) + out = Buffer.concat([ zeros, out ]) + } + return out +} + +function makeKey (q, kv, algo) { + var t + var k + + do { + t = new Buffer(0) + + while (t.length * 8 < q.bitLength()) { + kv.v = createHmac(algo, kv.k).update(kv.v).digest() + t = Buffer.concat([ t, kv.v ]) + } + + k = bits2int(t, q) + kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([ 0 ])).digest() + kv.v = createHmac(algo, kv.k).update(kv.v).digest() + } while (k.cmp(q) !== -1) + + return k +} + +function makeR (g, k, p, q) { + return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q) +} + +module.exports = sign +module.exports.getKey = getKey +module.exports.makeKey = makeKey + +}).call(this,require("buffer").Buffer) +},{"./curves.json":102,"bn.js":66,"browserify-rsa":98,"buffer":113,"create-hmac":468,"elliptic":548,"parse-asn1":1006}],105:[function(require,module,exports){ +(function (Buffer){ +// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js +var BN = require('bn.js') +var EC = require('elliptic').ec +var parseKeys = require('parse-asn1') +var curves = require('./curves.json') + +function verify (sig, hash, key, signType, tag) { + var pub = parseKeys(key) + if (pub.type === 'ec') { + // rsa keys can be interpreted as ecdsa ones in openssl + if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type') + return ecVerify(sig, hash, pub) + } else if (pub.type === 'dsa') { + if (signType !== 'dsa') throw new Error('wrong public key type') + return dsaVerify(sig, hash, pub) + } else { + if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type') + } + hash = Buffer.concat([tag, hash]) + var len = pub.modulus.byteLength() + var pad = [ 1 ] + var padNum = 0 + while (hash.length + pad.length + 2 < len) { + pad.push(0xff) + padNum++ + } + pad.push(0x00) + var i = -1 + while (++i < hash.length) { + pad.push(hash[i]) + } + pad = new Buffer(pad) + var red = BN.mont(pub.modulus) + sig = new BN(sig).toRed(red) + + sig = sig.redPow(new BN(pub.publicExponent)) + sig = new Buffer(sig.fromRed().toArray()) + var out = padNum < 8 ? 1 : 0 + len = Math.min(sig.length, pad.length) + if (sig.length !== pad.length) out = 1 + + i = -1 + while (++i < len) out |= sig[i] ^ pad[i] + return out === 0 +} + +function ecVerify (sig, hash, pub) { + var curveId = curves[pub.data.algorithm.curve.join('.')] + if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.')) + + var curve = new EC(curveId) + var pubkey = pub.data.subjectPrivateKey.data + + return curve.verify(hash, sig, pubkey) +} + +function dsaVerify (sig, hash, pub) { + var p = pub.data.p + var q = pub.data.q + var g = pub.data.g + var y = pub.data.pub_key + var unpacked = parseKeys.signature.decode(sig, 'der') + var s = unpacked.s + var r = unpacked.r + checkValue(s, q) + checkValue(r, q) + var montp = BN.mont(p) + var w = s.invm(q) + var v = g.toRed(montp) + .redPow(new BN(hash).mul(w).mod(q)) + .fromRed() + .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed()) + .mod(p) + .mod(q) + return v.cmp(r) === 0 +} + +function checkValue (b, q) { + if (b.cmpn(0) <= 0) throw new Error('invalid sig') + if (b.cmp(q) >= q) throw new Error('invalid sig') +} + +module.exports = verify + +}).call(this,require("buffer").Buffer) +},{"./curves.json":102,"bn.js":66,"buffer":113,"elliptic":548,"parse-asn1":1006}],106:[function(require,module,exports){ +(function (process,Buffer){ +'use strict'; +/* eslint camelcase: "off" */ + +var assert = require('assert'); + +var Zstream = require('pako/lib/zlib/zstream'); +var zlib_deflate = require('pako/lib/zlib/deflate.js'); +var zlib_inflate = require('pako/lib/zlib/inflate.js'); +var constants = require('pako/lib/zlib/constants'); + +for (var key in constants) { + exports[key] = constants[key]; +} + +// zlib modes +exports.NONE = 0; +exports.DEFLATE = 1; +exports.INFLATE = 2; +exports.GZIP = 3; +exports.GUNZIP = 4; +exports.DEFLATERAW = 5; +exports.INFLATERAW = 6; +exports.UNZIP = 7; + +var GZIP_HEADER_ID1 = 0x1f; +var GZIP_HEADER_ID2 = 0x8b; + +/** + * Emulate Node's zlib C++ layer for use by the JS layer in index.js + */ +function Zlib(mode) { + if (typeof mode !== 'number' || mode < exports.DEFLATE || mode > exports.UNZIP) { + throw new TypeError('Bad argument'); + } + + this.dictionary = null; + this.err = 0; + this.flush = 0; + this.init_done = false; + this.level = 0; + this.memLevel = 0; + this.mode = mode; + this.strategy = 0; + this.windowBits = 0; + this.write_in_progress = false; + this.pending_close = false; + this.gzip_id_bytes_read = 0; +} + +Zlib.prototype.close = function () { + if (this.write_in_progress) { + this.pending_close = true; + return; + } + + this.pending_close = false; + + assert(this.init_done, 'close before init'); + assert(this.mode <= exports.UNZIP); + + if (this.mode === exports.DEFLATE || this.mode === exports.GZIP || this.mode === exports.DEFLATERAW) { + zlib_deflate.deflateEnd(this.strm); + } else if (this.mode === exports.INFLATE || this.mode === exports.GUNZIP || this.mode === exports.INFLATERAW || this.mode === exports.UNZIP) { + zlib_inflate.inflateEnd(this.strm); + } + + this.mode = exports.NONE; + + this.dictionary = null; +}; + +Zlib.prototype.write = function (flush, input, in_off, in_len, out, out_off, out_len) { + return this._write(true, flush, input, in_off, in_len, out, out_off, out_len); +}; + +Zlib.prototype.writeSync = function (flush, input, in_off, in_len, out, out_off, out_len) { + return this._write(false, flush, input, in_off, in_len, out, out_off, out_len); +}; + +Zlib.prototype._write = function (async, flush, input, in_off, in_len, out, out_off, out_len) { + assert.equal(arguments.length, 8); + + assert(this.init_done, 'write before init'); + assert(this.mode !== exports.NONE, 'already finalized'); + assert.equal(false, this.write_in_progress, 'write already in progress'); + assert.equal(false, this.pending_close, 'close is pending'); + + this.write_in_progress = true; + + assert.equal(false, flush === undefined, 'must provide flush value'); + + this.write_in_progress = true; + + if (flush !== exports.Z_NO_FLUSH && flush !== exports.Z_PARTIAL_FLUSH && flush !== exports.Z_SYNC_FLUSH && flush !== exports.Z_FULL_FLUSH && flush !== exports.Z_FINISH && flush !== exports.Z_BLOCK) { + throw new Error('Invalid flush value'); + } + + if (input == null) { + input = Buffer.alloc(0); + in_len = 0; + in_off = 0; + } + + this.strm.avail_in = in_len; + this.strm.input = input; + this.strm.next_in = in_off; + this.strm.avail_out = out_len; + this.strm.output = out; + this.strm.next_out = out_off; + this.flush = flush; + + if (!async) { + // sync version + this._process(); + + if (this._checkError()) { + return this._afterSync(); + } + return; + } + + // async version + var self = this; + process.nextTick(function () { + self._process(); + self._after(); + }); + + return this; +}; + +Zlib.prototype._afterSync = function () { + var avail_out = this.strm.avail_out; + var avail_in = this.strm.avail_in; + + this.write_in_progress = false; + + return [avail_in, avail_out]; +}; + +Zlib.prototype._process = function () { + var next_expected_header_byte = null; + + // If the avail_out is left at 0, then it means that it ran out + // of room. If there was avail_out left over, then it means + // that all of the input was consumed. + switch (this.mode) { + case exports.DEFLATE: + case exports.GZIP: + case exports.DEFLATERAW: + this.err = zlib_deflate.deflate(this.strm, this.flush); + break; + case exports.UNZIP: + if (this.strm.avail_in > 0) { + next_expected_header_byte = this.strm.next_in; + } + + switch (this.gzip_id_bytes_read) { + case 0: + if (next_expected_header_byte === null) { + break; + } + + if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID1) { + this.gzip_id_bytes_read = 1; + next_expected_header_byte++; + + if (this.strm.avail_in === 1) { + // The only available byte was already read. + break; + } + } else { + this.mode = exports.INFLATE; + break; + } + + // fallthrough + case 1: + if (next_expected_header_byte === null) { + break; + } + + if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID2) { + this.gzip_id_bytes_read = 2; + this.mode = exports.GUNZIP; + } else { + // There is no actual difference between INFLATE and INFLATERAW + // (after initialization). + this.mode = exports.INFLATE; + } + + break; + default: + throw new Error('invalid number of gzip magic number bytes read'); + } + + // fallthrough + case exports.INFLATE: + case exports.GUNZIP: + case exports.INFLATERAW: + this.err = zlib_inflate.inflate(this.strm, this.flush + + // If data was encoded with dictionary + );if (this.err === exports.Z_NEED_DICT && this.dictionary) { + // Load it + this.err = zlib_inflate.inflateSetDictionary(this.strm, this.dictionary); + if (this.err === exports.Z_OK) { + // And try to decode again + this.err = zlib_inflate.inflate(this.strm, this.flush); + } else if (this.err === exports.Z_DATA_ERROR) { + // Both inflateSetDictionary() and inflate() return Z_DATA_ERROR. + // Make it possible for After() to tell a bad dictionary from bad + // input. + this.err = exports.Z_NEED_DICT; + } + } + while (this.strm.avail_in > 0 && this.mode === exports.GUNZIP && this.err === exports.Z_STREAM_END && this.strm.next_in[0] !== 0x00) { + // Bytes remain in input buffer. Perhaps this is another compressed + // member in the same archive, or just trailing garbage. + // Trailing zero bytes are okay, though, since they are frequently + // used for padding. + + this.reset(); + this.err = zlib_inflate.inflate(this.strm, this.flush); + } + break; + default: + throw new Error('Unknown mode ' + this.mode); + } +}; + +Zlib.prototype._checkError = function () { + // Acceptable error states depend on the type of zlib stream. + switch (this.err) { + case exports.Z_OK: + case exports.Z_BUF_ERROR: + if (this.strm.avail_out !== 0 && this.flush === exports.Z_FINISH) { + this._error('unexpected end of file'); + return false; + } + break; + case exports.Z_STREAM_END: + // normal statuses, not fatal + break; + case exports.Z_NEED_DICT: + if (this.dictionary == null) { + this._error('Missing dictionary'); + } else { + this._error('Bad dictionary'); + } + return false; + default: + // something else. + this._error('Zlib error'); + return false; + } + + return true; +}; + +Zlib.prototype._after = function () { + if (!this._checkError()) { + return; + } + + var avail_out = this.strm.avail_out; + var avail_in = this.strm.avail_in; + + this.write_in_progress = false; + + // call the write() cb + this.callback(avail_in, avail_out); + + if (this.pending_close) { + this.close(); + } +}; + +Zlib.prototype._error = function (message) { + if (this.strm.msg) { + message = this.strm.msg; + } + this.onerror(message, this.err + + // no hope of rescue. + );this.write_in_progress = false; + if (this.pending_close) { + this.close(); + } +}; + +Zlib.prototype.init = function (windowBits, level, memLevel, strategy, dictionary) { + assert(arguments.length === 4 || arguments.length === 5, 'init(windowBits, level, memLevel, strategy, [dictionary])'); + + assert(windowBits >= 8 && windowBits <= 15, 'invalid windowBits'); + assert(level >= -1 && level <= 9, 'invalid compression level'); + + assert(memLevel >= 1 && memLevel <= 9, 'invalid memlevel'); + + assert(strategy === exports.Z_FILTERED || strategy === exports.Z_HUFFMAN_ONLY || strategy === exports.Z_RLE || strategy === exports.Z_FIXED || strategy === exports.Z_DEFAULT_STRATEGY, 'invalid strategy'); + + this._init(level, windowBits, memLevel, strategy, dictionary); + this._setDictionary(); +}; + +Zlib.prototype.params = function () { + throw new Error('deflateParams Not supported'); +}; + +Zlib.prototype.reset = function () { + this._reset(); + this._setDictionary(); +}; + +Zlib.prototype._init = function (level, windowBits, memLevel, strategy, dictionary) { + this.level = level; + this.windowBits = windowBits; + this.memLevel = memLevel; + this.strategy = strategy; + + this.flush = exports.Z_NO_FLUSH; + + this.err = exports.Z_OK; + + if (this.mode === exports.GZIP || this.mode === exports.GUNZIP) { + this.windowBits += 16; + } + + if (this.mode === exports.UNZIP) { + this.windowBits += 32; + } + + if (this.mode === exports.DEFLATERAW || this.mode === exports.INFLATERAW) { + this.windowBits = -1 * this.windowBits; + } + + this.strm = new Zstream(); + + switch (this.mode) { + case exports.DEFLATE: + case exports.GZIP: + case exports.DEFLATERAW: + this.err = zlib_deflate.deflateInit2(this.strm, this.level, exports.Z_DEFLATED, this.windowBits, this.memLevel, this.strategy); + break; + case exports.INFLATE: + case exports.GUNZIP: + case exports.INFLATERAW: + case exports.UNZIP: + this.err = zlib_inflate.inflateInit2(this.strm, this.windowBits); + break; + default: + throw new Error('Unknown mode ' + this.mode); + } + + if (this.err !== exports.Z_OK) { + this._error('Init error'); + } + + this.dictionary = dictionary; + + this.write_in_progress = false; + this.init_done = true; +}; + +Zlib.prototype._setDictionary = function () { + if (this.dictionary == null) { + return; + } + + this.err = exports.Z_OK; + + switch (this.mode) { + case exports.DEFLATE: + case exports.DEFLATERAW: + this.err = zlib_deflate.deflateSetDictionary(this.strm, this.dictionary); + break; + default: + break; + } + + if (this.err !== exports.Z_OK) { + this._error('Failed to set dictionary'); + } +}; + +Zlib.prototype._reset = function () { + this.err = exports.Z_OK; + + switch (this.mode) { + case exports.DEFLATE: + case exports.DEFLATERAW: + case exports.GZIP: + this.err = zlib_deflate.deflateReset(this.strm); + break; + case exports.INFLATE: + case exports.INFLATERAW: + case exports.GUNZIP: + this.err = zlib_inflate.inflateReset(this.strm); + break; + default: + break; + } + + if (this.err !== exports.Z_OK) { + this._error('Failed to reset stream'); + } +}; + +exports.Zlib = Zlib; +}).call(this,require('_process'),require("buffer").Buffer) +},{"_process":109,"assert":35,"buffer":113,"pako/lib/zlib/constants":992,"pako/lib/zlib/deflate.js":994,"pako/lib/zlib/inflate.js":996,"pako/lib/zlib/zstream":1000}],107:[function(require,module,exports){ +(function (process){ +'use strict'; + +var Buffer = require('buffer').Buffer; +var Transform = require('stream').Transform; +var binding = require('./binding'); +var util = require('util'); +var assert = require('assert').ok; +var kMaxLength = require('buffer').kMaxLength; +var kRangeErrorMessage = 'Cannot create final Buffer. It would be larger ' + 'than 0x' + kMaxLength.toString(16) + ' bytes'; + +// zlib doesn't provide these, so kludge them in following the same +// const naming scheme zlib uses. +binding.Z_MIN_WINDOWBITS = 8; +binding.Z_MAX_WINDOWBITS = 15; +binding.Z_DEFAULT_WINDOWBITS = 15; + +// fewer than 64 bytes per chunk is stupid. +// technically it could work with as few as 8, but even 64 bytes +// is absurdly low. Usually a MB or more is best. +binding.Z_MIN_CHUNK = 64; +binding.Z_MAX_CHUNK = Infinity; +binding.Z_DEFAULT_CHUNK = 16 * 1024; + +binding.Z_MIN_MEMLEVEL = 1; +binding.Z_MAX_MEMLEVEL = 9; +binding.Z_DEFAULT_MEMLEVEL = 8; + +binding.Z_MIN_LEVEL = -1; +binding.Z_MAX_LEVEL = 9; +binding.Z_DEFAULT_LEVEL = binding.Z_DEFAULT_COMPRESSION; + +// expose all the zlib constants +var bkeys = Object.keys(binding); +for (var bk = 0; bk < bkeys.length; bk++) { + var bkey = bkeys[bk]; + if (bkey.match(/^Z/)) { + Object.defineProperty(exports, bkey, { + enumerable: true, value: binding[bkey], writable: false + }); + } +} + +// translation table for return codes. +var codes = { + Z_OK: binding.Z_OK, + Z_STREAM_END: binding.Z_STREAM_END, + Z_NEED_DICT: binding.Z_NEED_DICT, + Z_ERRNO: binding.Z_ERRNO, + Z_STREAM_ERROR: binding.Z_STREAM_ERROR, + Z_DATA_ERROR: binding.Z_DATA_ERROR, + Z_MEM_ERROR: binding.Z_MEM_ERROR, + Z_BUF_ERROR: binding.Z_BUF_ERROR, + Z_VERSION_ERROR: binding.Z_VERSION_ERROR +}; + +var ckeys = Object.keys(codes); +for (var ck = 0; ck < ckeys.length; ck++) { + var ckey = ckeys[ck]; + codes[codes[ckey]] = ckey; +} + +Object.defineProperty(exports, 'codes', { + enumerable: true, value: Object.freeze(codes), writable: false +}); + +exports.Deflate = Deflate; +exports.Inflate = Inflate; +exports.Gzip = Gzip; +exports.Gunzip = Gunzip; +exports.DeflateRaw = DeflateRaw; +exports.InflateRaw = InflateRaw; +exports.Unzip = Unzip; + +exports.createDeflate = function (o) { + return new Deflate(o); +}; + +exports.createInflate = function (o) { + return new Inflate(o); +}; + +exports.createDeflateRaw = function (o) { + return new DeflateRaw(o); +}; + +exports.createInflateRaw = function (o) { + return new InflateRaw(o); +}; + +exports.createGzip = function (o) { + return new Gzip(o); +}; + +exports.createGunzip = function (o) { + return new Gunzip(o); +}; + +exports.createUnzip = function (o) { + return new Unzip(o); +}; + +// Convenience methods. +// compress/decompress a string or buffer in one step. +exports.deflate = function (buffer, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } + return zlibBuffer(new Deflate(opts), buffer, callback); +}; + +exports.deflateSync = function (buffer, opts) { + return zlibBufferSync(new Deflate(opts), buffer); +}; + +exports.gzip = function (buffer, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } + return zlibBuffer(new Gzip(opts), buffer, callback); +}; + +exports.gzipSync = function (buffer, opts) { + return zlibBufferSync(new Gzip(opts), buffer); +}; + +exports.deflateRaw = function (buffer, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } + return zlibBuffer(new DeflateRaw(opts), buffer, callback); +}; + +exports.deflateRawSync = function (buffer, opts) { + return zlibBufferSync(new DeflateRaw(opts), buffer); +}; + +exports.unzip = function (buffer, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } + return zlibBuffer(new Unzip(opts), buffer, callback); +}; + +exports.unzipSync = function (buffer, opts) { + return zlibBufferSync(new Unzip(opts), buffer); +}; + +exports.inflate = function (buffer, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } + return zlibBuffer(new Inflate(opts), buffer, callback); +}; + +exports.inflateSync = function (buffer, opts) { + return zlibBufferSync(new Inflate(opts), buffer); +}; + +exports.gunzip = function (buffer, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } + return zlibBuffer(new Gunzip(opts), buffer, callback); +}; + +exports.gunzipSync = function (buffer, opts) { + return zlibBufferSync(new Gunzip(opts), buffer); +}; + +exports.inflateRaw = function (buffer, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } + return zlibBuffer(new InflateRaw(opts), buffer, callback); +}; + +exports.inflateRawSync = function (buffer, opts) { + return zlibBufferSync(new InflateRaw(opts), buffer); +}; + +function zlibBuffer(engine, buffer, callback) { + var buffers = []; + var nread = 0; + + engine.on('error', onError); + engine.on('end', onEnd); + + engine.end(buffer); + flow(); + + function flow() { + var chunk; + while (null !== (chunk = engine.read())) { + buffers.push(chunk); + nread += chunk.length; + } + engine.once('readable', flow); + } + + function onError(err) { + engine.removeListener('end', onEnd); + engine.removeListener('readable', flow); + callback(err); + } + + function onEnd() { + var buf; + var err = null; + + if (nread >= kMaxLength) { + err = new RangeError(kRangeErrorMessage); + } else { + buf = Buffer.concat(buffers, nread); + } + + buffers = []; + engine.close(); + callback(err, buf); + } +} + +function zlibBufferSync(engine, buffer) { + if (typeof buffer === 'string') buffer = Buffer.from(buffer); + + if (!Buffer.isBuffer(buffer)) throw new TypeError('Not a string or buffer'); + + var flushFlag = engine._finishFlushFlag; + + return engine._processChunk(buffer, flushFlag); +} + +// generic zlib +// minimal 2-byte header +function Deflate(opts) { + if (!(this instanceof Deflate)) return new Deflate(opts); + Zlib.call(this, opts, binding.DEFLATE); +} + +function Inflate(opts) { + if (!(this instanceof Inflate)) return new Inflate(opts); + Zlib.call(this, opts, binding.INFLATE); +} + +// gzip - bigger header, same deflate compression +function Gzip(opts) { + if (!(this instanceof Gzip)) return new Gzip(opts); + Zlib.call(this, opts, binding.GZIP); +} + +function Gunzip(opts) { + if (!(this instanceof Gunzip)) return new Gunzip(opts); + Zlib.call(this, opts, binding.GUNZIP); +} + +// raw - no header +function DeflateRaw(opts) { + if (!(this instanceof DeflateRaw)) return new DeflateRaw(opts); + Zlib.call(this, opts, binding.DEFLATERAW); +} + +function InflateRaw(opts) { + if (!(this instanceof InflateRaw)) return new InflateRaw(opts); + Zlib.call(this, opts, binding.INFLATERAW); +} + +// auto-detect header. +function Unzip(opts) { + if (!(this instanceof Unzip)) return new Unzip(opts); + Zlib.call(this, opts, binding.UNZIP); +} + +function isValidFlushFlag(flag) { + return flag === binding.Z_NO_FLUSH || flag === binding.Z_PARTIAL_FLUSH || flag === binding.Z_SYNC_FLUSH || flag === binding.Z_FULL_FLUSH || flag === binding.Z_FINISH || flag === binding.Z_BLOCK; +} + +// the Zlib class they all inherit from +// This thing manages the queue of requests, and returns +// true or false if there is anything in the queue when +// you call the .write() method. + +function Zlib(opts, mode) { + var _this = this; + + this._opts = opts = opts || {}; + this._chunkSize = opts.chunkSize || exports.Z_DEFAULT_CHUNK; + + Transform.call(this, opts); + + if (opts.flush && !isValidFlushFlag(opts.flush)) { + throw new Error('Invalid flush flag: ' + opts.flush); + } + if (opts.finishFlush && !isValidFlushFlag(opts.finishFlush)) { + throw new Error('Invalid flush flag: ' + opts.finishFlush); + } + + this._flushFlag = opts.flush || binding.Z_NO_FLUSH; + this._finishFlushFlag = typeof opts.finishFlush !== 'undefined' ? opts.finishFlush : binding.Z_FINISH; + + if (opts.chunkSize) { + if (opts.chunkSize < exports.Z_MIN_CHUNK || opts.chunkSize > exports.Z_MAX_CHUNK) { + throw new Error('Invalid chunk size: ' + opts.chunkSize); + } + } + + if (opts.windowBits) { + if (opts.windowBits < exports.Z_MIN_WINDOWBITS || opts.windowBits > exports.Z_MAX_WINDOWBITS) { + throw new Error('Invalid windowBits: ' + opts.windowBits); + } + } + + if (opts.level) { + if (opts.level < exports.Z_MIN_LEVEL || opts.level > exports.Z_MAX_LEVEL) { + throw new Error('Invalid compression level: ' + opts.level); + } + } + + if (opts.memLevel) { + if (opts.memLevel < exports.Z_MIN_MEMLEVEL || opts.memLevel > exports.Z_MAX_MEMLEVEL) { + throw new Error('Invalid memLevel: ' + opts.memLevel); + } + } + + if (opts.strategy) { + if (opts.strategy != exports.Z_FILTERED && opts.strategy != exports.Z_HUFFMAN_ONLY && opts.strategy != exports.Z_RLE && opts.strategy != exports.Z_FIXED && opts.strategy != exports.Z_DEFAULT_STRATEGY) { + throw new Error('Invalid strategy: ' + opts.strategy); + } + } + + if (opts.dictionary) { + if (!Buffer.isBuffer(opts.dictionary)) { + throw new Error('Invalid dictionary: it should be a Buffer instance'); + } + } + + this._handle = new binding.Zlib(mode); + + var self = this; + this._hadError = false; + this._handle.onerror = function (message, errno) { + // there is no way to cleanly recover. + // continuing only obscures problems. + _close(self); + self._hadError = true; + + var error = new Error(message); + error.errno = errno; + error.code = exports.codes[errno]; + self.emit('error', error); + }; + + var level = exports.Z_DEFAULT_COMPRESSION; + if (typeof opts.level === 'number') level = opts.level; + + var strategy = exports.Z_DEFAULT_STRATEGY; + if (typeof opts.strategy === 'number') strategy = opts.strategy; + + this._handle.init(opts.windowBits || exports.Z_DEFAULT_WINDOWBITS, level, opts.memLevel || exports.Z_DEFAULT_MEMLEVEL, strategy, opts.dictionary); + + this._buffer = Buffer.allocUnsafe(this._chunkSize); + this._offset = 0; + this._level = level; + this._strategy = strategy; + + this.once('end', this.close); + + Object.defineProperty(this, '_closed', { + get: function () { + return !_this._handle; + }, + configurable: true, + enumerable: true + }); +} + +util.inherits(Zlib, Transform); + +Zlib.prototype.params = function (level, strategy, callback) { + if (level < exports.Z_MIN_LEVEL || level > exports.Z_MAX_LEVEL) { + throw new RangeError('Invalid compression level: ' + level); + } + if (strategy != exports.Z_FILTERED && strategy != exports.Z_HUFFMAN_ONLY && strategy != exports.Z_RLE && strategy != exports.Z_FIXED && strategy != exports.Z_DEFAULT_STRATEGY) { + throw new TypeError('Invalid strategy: ' + strategy); + } + + if (this._level !== level || this._strategy !== strategy) { + var self = this; + this.flush(binding.Z_SYNC_FLUSH, function () { + assert(self._handle, 'zlib binding closed'); + self._handle.params(level, strategy); + if (!self._hadError) { + self._level = level; + self._strategy = strategy; + if (callback) callback(); + } + }); + } else { + process.nextTick(callback); + } +}; + +Zlib.prototype.reset = function () { + assert(this._handle, 'zlib binding closed'); + return this._handle.reset(); +}; + +// This is the _flush function called by the transform class, +// internally, when the last chunk has been written. +Zlib.prototype._flush = function (callback) { + this._transform(Buffer.alloc(0), '', callback); +}; + +Zlib.prototype.flush = function (kind, callback) { + var _this2 = this; + + var ws = this._writableState; + + if (typeof kind === 'function' || kind === undefined && !callback) { + callback = kind; + kind = binding.Z_FULL_FLUSH; + } + + if (ws.ended) { + if (callback) process.nextTick(callback); + } else if (ws.ending) { + if (callback) this.once('end', callback); + } else if (ws.needDrain) { + if (callback) { + this.once('drain', function () { + return _this2.flush(kind, callback); + }); + } + } else { + this._flushFlag = kind; + this.write(Buffer.alloc(0), '', callback); + } +}; + +Zlib.prototype.close = function (callback) { + _close(this, callback); + process.nextTick(emitCloseNT, this); +}; + +function _close(engine, callback) { + if (callback) process.nextTick(callback); + + // Caller may invoke .close after a zlib error (which will null _handle). + if (!engine._handle) return; + + engine._handle.close(); + engine._handle = null; +} + +function emitCloseNT(self) { + self.emit('close'); +} + +Zlib.prototype._transform = function (chunk, encoding, cb) { + var flushFlag; + var ws = this._writableState; + var ending = ws.ending || ws.ended; + var last = ending && (!chunk || ws.length === chunk.length); + + if (chunk !== null && !Buffer.isBuffer(chunk)) return cb(new Error('invalid input')); + + if (!this._handle) return cb(new Error('zlib binding closed')); + + // If it's the last chunk, or a final flush, we use the Z_FINISH flush flag + // (or whatever flag was provided using opts.finishFlush). + // If it's explicitly flushing at some other time, then we use + // Z_FULL_FLUSH. Otherwise, use Z_NO_FLUSH for maximum compression + // goodness. + if (last) flushFlag = this._finishFlushFlag;else { + flushFlag = this._flushFlag; + // once we've flushed the last of the queue, stop flushing and + // go back to the normal behavior. + if (chunk.length >= ws.length) { + this._flushFlag = this._opts.flush || binding.Z_NO_FLUSH; + } + } + + this._processChunk(chunk, flushFlag, cb); +}; + +Zlib.prototype._processChunk = function (chunk, flushFlag, cb) { + var availInBefore = chunk && chunk.length; + var availOutBefore = this._chunkSize - this._offset; + var inOff = 0; + + var self = this; + + var async = typeof cb === 'function'; + + if (!async) { + var buffers = []; + var nread = 0; + + var error; + this.on('error', function (er) { + error = er; + }); + + assert(this._handle, 'zlib binding closed'); + do { + var res = this._handle.writeSync(flushFlag, chunk, // in + inOff, // in_off + availInBefore, // in_len + this._buffer, // out + this._offset, //out_off + availOutBefore); // out_len + } while (!this._hadError && callback(res[0], res[1])); + + if (this._hadError) { + throw error; + } + + if (nread >= kMaxLength) { + _close(this); + throw new RangeError(kRangeErrorMessage); + } + + var buf = Buffer.concat(buffers, nread); + _close(this); + + return buf; + } + + assert(this._handle, 'zlib binding closed'); + var req = this._handle.write(flushFlag, chunk, // in + inOff, // in_off + availInBefore, // in_len + this._buffer, // out + this._offset, //out_off + availOutBefore); // out_len + + req.buffer = chunk; + req.callback = callback; + + function callback(availInAfter, availOutAfter) { + // When the callback is used in an async write, the callback's + // context is the `req` object that was created. The req object + // is === this._handle, and that's why it's important to null + // out the values after they are done being used. `this._handle` + // can stay in memory longer than the callback and buffer are needed. + if (this) { + this.buffer = null; + this.callback = null; + } + + if (self._hadError) return; + + var have = availOutBefore - availOutAfter; + assert(have >= 0, 'have should not go down'); + + if (have > 0) { + var out = self._buffer.slice(self._offset, self._offset + have); + self._offset += have; + // serve some output to the consumer. + if (async) { + self.push(out); + } else { + buffers.push(out); + nread += out.length; + } + } + + // exhausted the output buffer, or used all the input create a new one. + if (availOutAfter === 0 || self._offset >= self._chunkSize) { + availOutBefore = self._chunkSize; + self._offset = 0; + self._buffer = Buffer.allocUnsafe(self._chunkSize); + } + + if (availOutAfter === 0) { + // Not actually done. Need to reprocess. + // Also, update the availInBefore to the availInAfter value, + // so that if we have to hit it a third (fourth, etc.) time, + // it'll have the correct byte counts. + inOff += availInBefore - availInAfter; + availInBefore = availInAfter; + + if (!async) return true; + + var newReq = self._handle.write(flushFlag, chunk, inOff, availInBefore, self._buffer, self._offset, self._chunkSize); + newReq.callback = callback; // this same function + newReq.buffer = chunk; + return; + } + + if (!async) return false; + + // finished with the chunk. + cb(); + } +}; + +util.inherits(Deflate, Zlib); +util.inherits(Inflate, Zlib); +util.inherits(Gzip, Zlib); +util.inherits(Gunzip, Zlib); +util.inherits(DeflateRaw, Zlib); +util.inherits(InflateRaw, Zlib); +util.inherits(Unzip, Zlib); +}).call(this,require('_process')) +},{"./binding":106,"_process":109,"assert":35,"buffer":113,"stream":1394,"util":1439}],108:[function(require,module,exports){ +arguments[4][77][0].apply(exports,arguments) +},{"dup":77}],109:[function(require,module,exports){ +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; +process.prependListener = noop; +process.prependOnceListener = noop; + +process.listeners = function (name) { return [] } + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + +},{}],110:[function(require,module,exports){ +(function (global){ +/*! https://mths.be/punycode v1.4.1 by @mathias */ +;(function(root) { + + /** Detect free variables */ + var freeExports = typeof exports == 'object' && exports && + !exports.nodeType && exports; + var freeModule = typeof module == 'object' && module && + !module.nodeType && module; + var freeGlobal = typeof global == 'object' && global; + if ( + freeGlobal.global === freeGlobal || + freeGlobal.window === freeGlobal || + freeGlobal.self === freeGlobal + ) { + root = freeGlobal; + } + + /** + * The `punycode` object. + * @name punycode + * @type Object + */ + var punycode, + + /** Highest positive signed 32-bit float value */ + maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 + + /** Bootstring parameters */ + base = 36, + tMin = 1, + tMax = 26, + skew = 38, + damp = 700, + initialBias = 72, + initialN = 128, // 0x80 + delimiter = '-', // '\x2D' + + /** Regular expressions */ + regexPunycode = /^xn--/, + regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars + regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators + + /** Error messages */ + errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' + }, + + /** Convenience shortcuts */ + baseMinusTMin = base - tMin, + floor = Math.floor, + stringFromCharCode = String.fromCharCode, + + /** Temporary variable */ + key; + + /*--------------------------------------------------------------------------*/ + + /** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ + function error(type) { + throw new RangeError(errors[type]); + } + + /** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ + function map(array, fn) { + var length = array.length; + var result = []; + while (length--) { + result[length] = fn(array[length]); + } + return result; + } + + /** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {Array} A new string of characters returned by the callback + * function. + */ + function mapDomain(string, fn) { + var parts = string.split('@'); + var result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + string = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + string = string.replace(regexSeparators, '\x2E'); + var labels = string.split('.'); + var encoded = map(labels, fn).join('.'); + return result + encoded; + } + + /** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ + function ucs2decode(string) { + var output = [], + counter = 0, + length = string.length, + value, + extra; + while (counter < length) { + value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // high surrogate, and there is a next character + extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // low surrogate + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // unmatched surrogate; only append this code unit, in case the next + // code unit is the high surrogate of a surrogate pair + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; + } + + /** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ + function ucs2encode(array) { + return map(array, function(value) { + var output = ''; + if (value > 0xFFFF) { + value -= 0x10000; + output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); + value = 0xDC00 | value & 0x3FF; + } + output += stringFromCharCode(value); + return output; + }).join(''); + } + + /** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ + function basicToDigit(codePoint) { + if (codePoint - 48 < 10) { + return codePoint - 22; + } + if (codePoint - 65 < 26) { + return codePoint - 65; + } + if (codePoint - 97 < 26) { + return codePoint - 97; + } + return base; + } + + /** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ + function digitToBasic(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); + } + + /** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ + function adapt(delta, numPoints, firstTime) { + var k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); + } + + /** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ + function decode(input) { + // Don't use UCS-2 + var output = [], + inputLength = input.length, + out, + i = 0, + n = initialN, + bias = initialBias, + basic, + j, + index, + oldi, + w, + k, + digit, + t, + /** Cached calculation results */ + baseMinusT; + + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. + + basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } + + for (j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error('not-basic'); + } + output.push(input.charCodeAt(j)); + } + + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. + + for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { + + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + for (oldi = i, w = 1, k = base; /* no condition */; k += base) { + + if (index >= inputLength) { + error('invalid-input'); + } + + digit = basicToDigit(input.charCodeAt(index++)); + + if (digit >= base || digit > floor((maxInt - i) / w)) { + error('overflow'); + } + + i += digit * w; + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + + if (digit < t) { + break; + } + + baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error('overflow'); + } + + w *= baseMinusT; + + } + + out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); + + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error('overflow'); + } + + n += floor(i / out); + i %= out; + + // Insert `n` at position `i` of the output + output.splice(i++, 0, n); + + } + + return ucs2encode(output); + } + + /** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ + function encode(input) { + var n, + delta, + handledCPCount, + basicLength, + bias, + j, + m, + q, + k, + t, + currentValue, + output = [], + /** `inputLength` will hold the number of code points in `input`. */ + inputLength, + /** Cached calculation results */ + handledCPCountPlusOne, + baseMinusT, + qMinusT; + + // Convert the input in UCS-2 to Unicode + input = ucs2decode(input); + + // Cache the length + inputLength = input.length; + + // Initialize the state + n = initialN; + delta = 0; + bias = initialBias; + + // Handle the basic code points + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + handledCPCount = basicLength = output.length; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string - if it is not empty - with a delimiter + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + + // All non-basic code points < n have been handled already. Find the next + // larger one: + for (m = maxInt, j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow + handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + + if (currentValue < n && ++delta > maxInt) { + error('overflow'); + } + + if (currentValue == n) { + // Represent delta as a generalized variable-length integer + for (q = delta, k = base; /* no condition */; k += base) { + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + if (q < t) { + break; + } + qMinusT = q - t; + baseMinusT = base - t; + output.push( + stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) + ); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + + } + return output.join(''); + } + + /** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ + function toUnicode(input) { + return mapDomain(input, function(string) { + return regexPunycode.test(string) + ? decode(string.slice(4).toLowerCase()) + : string; + }); + } + + /** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ + function toASCII(input) { + return mapDomain(input, function(string) { + return regexNonASCII.test(string) + ? 'xn--' + encode(string) + : string; + }); + } + + /*--------------------------------------------------------------------------*/ + + /** Define the public API */ + punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + 'version': '1.4.1', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + 'ucs2': { + 'decode': ucs2decode, + 'encode': ucs2encode + }, + 'decode': decode, + 'encode': encode, + 'toASCII': toASCII, + 'toUnicode': toUnicode + }; + + /** Expose `punycode` */ + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + typeof define == 'function' && + typeof define.amd == 'object' && + define.amd + ) { + define('punycode', function() { + return punycode; + }); + } else if (freeExports && freeModule) { + if (module.exports == freeExports) { + // in Node.js, io.js, or RingoJS v0.8.0+ + freeModule.exports = punycode; + } else { + // in Narwhal or RingoJS v0.7.0- + for (key in punycode) { + punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); + } + } + } else { + // in Rhino or a web browser + root.punycode = punycode; + } + +}(this)); + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],111:[function(require,module,exports){ +var indexOf = function (xs, item) { + if (xs.indexOf) return xs.indexOf(item); + else for (var i = 0; i < xs.length; i++) { + if (xs[i] === item) return i; + } + return -1; +}; +var Object_keys = function (obj) { + if (Object.keys) return Object.keys(obj) + else { + var res = []; + for (var key in obj) res.push(key) + return res; + } +}; + +var forEach = function (xs, fn) { + if (xs.forEach) return xs.forEach(fn) + else for (var i = 0; i < xs.length; i++) { + fn(xs[i], i, xs); + } +}; + +var defineProp = (function() { + try { + Object.defineProperty({}, '_', {}); + return function(obj, name, value) { + Object.defineProperty(obj, name, { + writable: true, + enumerable: false, + configurable: true, + value: value + }) + }; + } catch(e) { + return function(obj, name, value) { + obj[name] = value; + }; + } +}()); + +var globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function', +'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError', +'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError', +'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', +'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape']; + +function Context() {} +Context.prototype = {}; + +var Script = exports.Script = function NodeScript (code) { + if (!(this instanceof Script)) return new Script(code); + this.code = code; +}; + +Script.prototype.runInContext = function (context) { + if (!(context instanceof Context)) { + throw new TypeError("needs a 'context' argument."); + } + + var iframe = document.createElement('iframe'); + if (!iframe.style) iframe.style = {}; + iframe.style.display = 'none'; + + document.body.appendChild(iframe); + + var win = iframe.contentWindow; + var wEval = win.eval, wExecScript = win.execScript; + + if (!wEval && wExecScript) { + // win.eval() magically appears when this is called in IE: + wExecScript.call(win, 'null'); + wEval = win.eval; + } + + forEach(Object_keys(context), function (key) { + win[key] = context[key]; + }); + forEach(globals, function (key) { + if (context[key]) { + win[key] = context[key]; + } + }); + + var winKeys = Object_keys(win); + + var res = wEval.call(win, this.code); + + forEach(Object_keys(win), function (key) { + // Avoid copying circular objects like `top` and `window` by only + // updating existing context properties or new properties in the `win` + // that was only introduced after the eval. + if (key in context || indexOf(winKeys, key) === -1) { + context[key] = win[key]; + } + }); + + forEach(globals, function (key) { + if (!(key in context)) { + defineProp(context, key, win[key]); + } + }); + + document.body.removeChild(iframe); + + return res; +}; + +Script.prototype.runInThisContext = function () { + return eval(this.code); // maybe... +}; + +Script.prototype.runInNewContext = function (context) { + var ctx = Script.createContext(context); + var res = this.runInContext(ctx); + + if (context) { + forEach(Object_keys(ctx), function (key) { + context[key] = ctx[key]; + }); + } + + return res; +}; + +forEach(Object_keys(Script.prototype), function (name) { + exports[name] = Script[name] = function (code) { + var s = Script(code); + return s[name].apply(s, [].slice.call(arguments, 1)); + }; +}); + +exports.isContext = function (context) { + return context instanceof Context; +}; + +exports.createScript = function (code) { + return exports.Script(code); +}; + +exports.createContext = Script.createContext = function (context) { + var copy = new Context(); + if(typeof context === 'object') { + forEach(Object_keys(context), function (key) { + copy[key] = context[key]; + }); + } + return copy; +}; + +},{}],112:[function(require,module,exports){ +(function (Buffer){ +module.exports = function xor (a, b) { + var length = Math.min(a.length, b.length) + var buffer = new Buffer(length) + + for (var i = 0; i < length; ++i) { + buffer[i] = a[i] ^ b[i] + } + + return buffer +} + +}).call(this,require("buffer").Buffer) +},{"buffer":113}],113:[function(require,module,exports){ +(function (Buffer){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +/* eslint-disable no-proto */ + +'use strict' + +var base64 = require('base64-js') +var ieee754 = require('ieee754') + +exports.Buffer = Buffer +exports.SlowBuffer = SlowBuffer +exports.INSPECT_MAX_BYTES = 50 + +var K_MAX_LENGTH = 0x7fffffff +exports.kMaxLength = K_MAX_LENGTH + +/** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Print warning and recommend using `buffer` v4.x which has an Object + * implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * We report that the browser does not support typed arrays if the are not subclassable + * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` + * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support + * for __proto__ and has a buggy typed array implementation. + */ +Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport() + +if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && + typeof console.error === 'function') { + console.error( + 'This browser lacks typed array (Uint8Array) support which is required by ' + + '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.' + ) +} + +function typedArraySupport () { + // Can typed array instances can be augmented? + try { + var arr = new Uint8Array(1) + arr.__proto__ = { __proto__: Uint8Array.prototype, foo: function () { return 42 } } + return arr.foo() === 42 + } catch (e) { + return false + } +} + +Object.defineProperty(Buffer.prototype, 'parent', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.buffer + } +}) + +Object.defineProperty(Buffer.prototype, 'offset', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.byteOffset + } +}) + +function createBuffer (length) { + if (length > K_MAX_LENGTH) { + throw new RangeError('The value "' + length + '" is invalid for option "size"') + } + // Return an augmented `Uint8Array` instance + var buf = new Uint8Array(length) + buf.__proto__ = Buffer.prototype + return buf +} + +/** + * The Buffer constructor returns instances of `Uint8Array` that have their + * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of + * `Uint8Array`, so the returned instances will have all the node `Buffer` methods + * and the `Uint8Array` methods. Square bracket notation works as expected -- it + * returns a single octet. + * + * The `Uint8Array` prototype remains unmodified. + */ + +function Buffer (arg, encodingOrOffset, length) { + // Common case. + if (typeof arg === 'number') { + if (typeof encodingOrOffset === 'string') { + throw new TypeError( + 'The "string" argument must be of type string. Received type number' + ) + } + return allocUnsafe(arg) + } + return from(arg, encodingOrOffset, length) +} + +// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 +if (typeof Symbol !== 'undefined' && Symbol.species != null && + Buffer[Symbol.species] === Buffer) { + Object.defineProperty(Buffer, Symbol.species, { + value: null, + configurable: true, + enumerable: false, + writable: false + }) +} + +Buffer.poolSize = 8192 // not used by this implementation + +function from (value, encodingOrOffset, length) { + if (typeof value === 'string') { + return fromString(value, encodingOrOffset) + } + + if (ArrayBuffer.isView(value)) { + return fromArrayLike(value) + } + + if (value == null) { + throw TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) + } + + if (isInstance(value, ArrayBuffer) || + (value && isInstance(value.buffer, ArrayBuffer))) { + return fromArrayBuffer(value, encodingOrOffset, length) + } + + if (typeof value === 'number') { + throw new TypeError( + 'The "value" argument must not be of type number. Received type number' + ) + } + + var valueOf = value.valueOf && value.valueOf() + if (valueOf != null && valueOf !== value) { + return Buffer.from(valueOf, encodingOrOffset, length) + } + + var b = fromObject(value) + if (b) return b + + if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && + typeof value[Symbol.toPrimitive] === 'function') { + return Buffer.from( + value[Symbol.toPrimitive]('string'), encodingOrOffset, length + ) + } + + throw new TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) +} + +/** + * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError + * if value is a number. + * Buffer.from(str[, encoding]) + * Buffer.from(array) + * Buffer.from(buffer) + * Buffer.from(arrayBuffer[, byteOffset[, length]]) + **/ +Buffer.from = function (value, encodingOrOffset, length) { + return from(value, encodingOrOffset, length) +} + +// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: +// https://github.com/feross/buffer/pull/148 +Buffer.prototype.__proto__ = Uint8Array.prototype +Buffer.__proto__ = Uint8Array + +function assertSize (size) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be of type number') + } else if (size < 0) { + throw new RangeError('The value "' + size + '" is invalid for option "size"') + } +} + +function alloc (size, fill, encoding) { + assertSize(size) + if (size <= 0) { + return createBuffer(size) + } + if (fill !== undefined) { + // Only pay attention to encoding if it's a string. This + // prevents accidentally sending in a number that would + // be interpretted as a start offset. + return typeof encoding === 'string' + ? createBuffer(size).fill(fill, encoding) + : createBuffer(size).fill(fill) + } + return createBuffer(size) +} + +/** + * Creates a new filled Buffer instance. + * alloc(size[, fill[, encoding]]) + **/ +Buffer.alloc = function (size, fill, encoding) { + return alloc(size, fill, encoding) +} + +function allocUnsafe (size) { + assertSize(size) + return createBuffer(size < 0 ? 0 : checked(size) | 0) +} + +/** + * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. + * */ +Buffer.allocUnsafe = function (size) { + return allocUnsafe(size) +} +/** + * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. + */ +Buffer.allocUnsafeSlow = function (size) { + return allocUnsafe(size) +} + +function fromString (string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8' + } + + if (!Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + + var length = byteLength(string, encoding) | 0 + var buf = createBuffer(length) + + var actual = buf.write(string, encoding) + + if (actual !== length) { + // Writing a hex string, for example, that contains invalid characters will + // cause everything after the first invalid character to be ignored. (e.g. + // 'abxxcd' will be treated as 'ab') + buf = buf.slice(0, actual) + } + + return buf +} + +function fromArrayLike (array) { + var length = array.length < 0 ? 0 : checked(array.length) | 0 + var buf = createBuffer(length) + for (var i = 0; i < length; i += 1) { + buf[i] = array[i] & 255 + } + return buf +} + +function fromArrayBuffer (array, byteOffset, length) { + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('"offset" is outside of buffer bounds') + } + + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('"length" is outside of buffer bounds') + } + + var buf + if (byteOffset === undefined && length === undefined) { + buf = new Uint8Array(array) + } else if (length === undefined) { + buf = new Uint8Array(array, byteOffset) + } else { + buf = new Uint8Array(array, byteOffset, length) + } + + // Return an augmented `Uint8Array` instance + buf.__proto__ = Buffer.prototype + return buf +} + +function fromObject (obj) { + if (Buffer.isBuffer(obj)) { + var len = checked(obj.length) | 0 + var buf = createBuffer(len) + + if (buf.length === 0) { + return buf + } + + obj.copy(buf, 0, 0, len) + return buf + } + + if (obj.length !== undefined) { + if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { + return createBuffer(0) + } + return fromArrayLike(obj) + } + + if (obj.type === 'Buffer' && Array.isArray(obj.data)) { + return fromArrayLike(obj.data) + } +} + +function checked (length) { + // Note: cannot use `length < K_MAX_LENGTH` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= K_MAX_LENGTH) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes') + } + return length | 0 +} + +function SlowBuffer (length) { + if (+length != length) { // eslint-disable-line eqeqeq + length = 0 + } + return Buffer.alloc(+length) +} + +Buffer.isBuffer = function isBuffer (b) { + return b != null && b._isBuffer === true && + b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false +} + +Buffer.compare = function compare (a, b) { + if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength) + if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength) + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError( + 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array' + ) + } + + if (a === b) return 0 + + var x = a.length + var y = b.length + + for (var i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i] + y = b[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +Buffer.isEncoding = function isEncoding (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'latin1': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } +} + +Buffer.concat = function concat (list, length) { + if (!Array.isArray(list)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + + if (list.length === 0) { + return Buffer.alloc(0) + } + + var i + if (length === undefined) { + length = 0 + for (i = 0; i < list.length; ++i) { + length += list[i].length + } + } + + var buffer = Buffer.allocUnsafe(length) + var pos = 0 + for (i = 0; i < list.length; ++i) { + var buf = list[i] + if (isInstance(buf, Uint8Array)) { + buf = Buffer.from(buf) + } + if (!Buffer.isBuffer(buf)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + buf.copy(buffer, pos) + pos += buf.length + } + return buffer +} + +function byteLength (string, encoding) { + if (Buffer.isBuffer(string)) { + return string.length + } + if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) { + return string.byteLength + } + if (typeof string !== 'string') { + throw new TypeError( + 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + + 'Received type ' + typeof string + ) + } + + var len = string.length + var mustMatch = (arguments.length > 2 && arguments[2] === true) + if (!mustMatch && len === 0) return 0 + + // Use a for loop to avoid recursion + var loweredCase = false + for (;;) { + switch (encoding) { + case 'ascii': + case 'latin1': + case 'binary': + return len + case 'utf8': + case 'utf-8': + return utf8ToBytes(string).length + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2 + case 'hex': + return len >>> 1 + case 'base64': + return base64ToBytes(string).length + default: + if (loweredCase) { + return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8 + } + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} +Buffer.byteLength = byteLength + +function slowToString (encoding, start, end) { + var loweredCase = false + + // No need to verify that "this.length <= MAX_UINT32" since it's a read-only + // property of a typed array. + + // This behaves neither like String nor Uint8Array in that we set start/end + // to their upper/lower bounds if the value passed is out of range. + // undefined is handled specially as per ECMA-262 6th Edition, + // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. + if (start === undefined || start < 0) { + start = 0 + } + // Return early if start > this.length. Done here to prevent potential uint32 + // coercion fail below. + if (start > this.length) { + return '' + } + + if (end === undefined || end > this.length) { + end = this.length + } + + if (end <= 0) { + return '' + } + + // Force coersion to uint32. This will also coerce falsey/NaN values to 0. + end >>>= 0 + start >>>= 0 + + if (end <= start) { + return '' + } + + if (!encoding) encoding = 'utf8' + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) + + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) + + case 'ascii': + return asciiSlice(this, start, end) + + case 'latin1': + case 'binary': + return latin1Slice(this, start, end) + + case 'base64': + return base64Slice(this, start, end) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase() + loweredCase = true + } + } +} + +// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) +// to detect a Buffer instance. It's not possible to use `instanceof Buffer` +// reliably in a browserify context because there could be multiple different +// copies of the 'buffer' package in use. This method works even for Buffer +// instances that were created from another copy of the `buffer` package. +// See: https://github.com/feross/buffer/issues/154 +Buffer.prototype._isBuffer = true + +function swap (b, n, m) { + var i = b[n] + b[n] = b[m] + b[m] = i +} + +Buffer.prototype.swap16 = function swap16 () { + var len = this.length + if (len % 2 !== 0) { + throw new RangeError('Buffer size must be a multiple of 16-bits') + } + for (var i = 0; i < len; i += 2) { + swap(this, i, i + 1) + } + return this +} + +Buffer.prototype.swap32 = function swap32 () { + var len = this.length + if (len % 4 !== 0) { + throw new RangeError('Buffer size must be a multiple of 32-bits') + } + for (var i = 0; i < len; i += 4) { + swap(this, i, i + 3) + swap(this, i + 1, i + 2) + } + return this +} + +Buffer.prototype.swap64 = function swap64 () { + var len = this.length + if (len % 8 !== 0) { + throw new RangeError('Buffer size must be a multiple of 64-bits') + } + for (var i = 0; i < len; i += 8) { + swap(this, i, i + 7) + swap(this, i + 1, i + 6) + swap(this, i + 2, i + 5) + swap(this, i + 3, i + 4) + } + return this +} + +Buffer.prototype.toString = function toString () { + var length = this.length + if (length === 0) return '' + if (arguments.length === 0) return utf8Slice(this, 0, length) + return slowToString.apply(this, arguments) +} + +Buffer.prototype.toLocaleString = Buffer.prototype.toString + +Buffer.prototype.equals = function equals (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer.compare(this, b) === 0 +} + +Buffer.prototype.inspect = function inspect () { + var str = '' + var max = exports.INSPECT_MAX_BYTES + str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim() + if (this.length > max) str += ' ... ' + return '' +} + +Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { + if (isInstance(target, Uint8Array)) { + target = Buffer.from(target, target.offset, target.byteLength) + } + if (!Buffer.isBuffer(target)) { + throw new TypeError( + 'The "target" argument must be one of type Buffer or Uint8Array. ' + + 'Received type ' + (typeof target) + ) + } + + if (start === undefined) { + start = 0 + } + if (end === undefined) { + end = target ? target.length : 0 + } + if (thisStart === undefined) { + thisStart = 0 + } + if (thisEnd === undefined) { + thisEnd = this.length + } + + if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { + throw new RangeError('out of range index') + } + + if (thisStart >= thisEnd && start >= end) { + return 0 + } + if (thisStart >= thisEnd) { + return -1 + } + if (start >= end) { + return 1 + } + + start >>>= 0 + end >>>= 0 + thisStart >>>= 0 + thisEnd >>>= 0 + + if (this === target) return 0 + + var x = thisEnd - thisStart + var y = end - start + var len = Math.min(x, y) + + var thisCopy = this.slice(thisStart, thisEnd) + var targetCopy = target.slice(start, end) + + for (var i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i] + y = targetCopy[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, +// OR the last index of `val` in `buffer` at offset <= `byteOffset`. +// +// Arguments: +// - buffer - a Buffer to search +// - val - a string, Buffer, or number +// - byteOffset - an index into `buffer`; will be clamped to an int32 +// - encoding - an optional encoding, relevant is val is a string +// - dir - true for indexOf, false for lastIndexOf +function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { + // Empty buffer means no match + if (buffer.length === 0) return -1 + + // Normalize byteOffset + if (typeof byteOffset === 'string') { + encoding = byteOffset + byteOffset = 0 + } else if (byteOffset > 0x7fffffff) { + byteOffset = 0x7fffffff + } else if (byteOffset < -0x80000000) { + byteOffset = -0x80000000 + } + byteOffset = +byteOffset // Coerce to Number. + if (numberIsNaN(byteOffset)) { + // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer + byteOffset = dir ? 0 : (buffer.length - 1) + } + + // Normalize byteOffset: negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = buffer.length + byteOffset + if (byteOffset >= buffer.length) { + if (dir) return -1 + else byteOffset = buffer.length - 1 + } else if (byteOffset < 0) { + if (dir) byteOffset = 0 + else return -1 + } + + // Normalize val + if (typeof val === 'string') { + val = Buffer.from(val, encoding) + } + + // Finally, search either indexOf (if dir is true) or lastIndexOf + if (Buffer.isBuffer(val)) { + // Special case: looking for empty string/buffer always fails + if (val.length === 0) { + return -1 + } + return arrayIndexOf(buffer, val, byteOffset, encoding, dir) + } else if (typeof val === 'number') { + val = val & 0xFF // Search for a byte value [0-255] + if (typeof Uint8Array.prototype.indexOf === 'function') { + if (dir) { + return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) + } else { + return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) + } + } + return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir) + } + + throw new TypeError('val must be string, number or Buffer') +} + +function arrayIndexOf (arr, val, byteOffset, encoding, dir) { + var indexSize = 1 + var arrLength = arr.length + var valLength = val.length + + if (encoding !== undefined) { + encoding = String(encoding).toLowerCase() + if (encoding === 'ucs2' || encoding === 'ucs-2' || + encoding === 'utf16le' || encoding === 'utf-16le') { + if (arr.length < 2 || val.length < 2) { + return -1 + } + indexSize = 2 + arrLength /= 2 + valLength /= 2 + byteOffset /= 2 + } + } + + function read (buf, i) { + if (indexSize === 1) { + return buf[i] + } else { + return buf.readUInt16BE(i * indexSize) + } + } + + var i + if (dir) { + var foundIndex = -1 + for (i = byteOffset; i < arrLength; i++) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (foundIndex === -1) foundIndex = i + if (i - foundIndex + 1 === valLength) return foundIndex * indexSize + } else { + if (foundIndex !== -1) i -= i - foundIndex + foundIndex = -1 + } + } + } else { + if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength + for (i = byteOffset; i >= 0; i--) { + var found = true + for (var j = 0; j < valLength; j++) { + if (read(arr, i + j) !== read(val, j)) { + found = false + break + } + } + if (found) return i + } + } + + return -1 +} + +Buffer.prototype.includes = function includes (val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1 +} + +Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, true) +} + +Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, false) +} + +function hexWrite (buf, string, offset, length) { + offset = Number(offset) || 0 + var remaining = buf.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + + var strLen = string.length + + if (length > strLen / 2) { + length = strLen / 2 + } + for (var i = 0; i < length; ++i) { + var parsed = parseInt(string.substr(i * 2, 2), 16) + if (numberIsNaN(parsed)) return i + buf[offset + i] = parsed + } + return i +} + +function utf8Write (buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) +} + +function asciiWrite (buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length) +} + +function latin1Write (buf, string, offset, length) { + return asciiWrite(buf, string, offset, length) +} + +function base64Write (buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length) +} + +function ucs2Write (buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) +} + +Buffer.prototype.write = function write (string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8' + length = this.length + offset = 0 + // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset + length = this.length + offset = 0 + // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset >>> 0 + if (isFinite(length)) { + length = length >>> 0 + if (encoding === undefined) encoding = 'utf8' + } else { + encoding = length + length = undefined + } + } else { + throw new Error( + 'Buffer.write(string, encoding, offset[, length]) is no longer supported' + ) + } + + var remaining = this.length - offset + if (length === undefined || length > remaining) length = remaining + + if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { + throw new RangeError('Attempt to write outside buffer bounds') + } + + if (!encoding) encoding = 'utf8' + + var loweredCase = false + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length) + + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length) + + case 'ascii': + return asciiWrite(this, string, offset, length) + + case 'latin1': + case 'binary': + return latin1Write(this, string, offset, length) + + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write(this, string, offset, length) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write(this, string, offset, length) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} + +Buffer.prototype.toJSON = function toJSON () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + } +} + +function base64Slice (buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf) + } else { + return base64.fromByteArray(buf.slice(start, end)) + } +} + +function utf8Slice (buf, start, end) { + end = Math.min(buf.length, end) + var res = [] + + var i = start + while (i < end) { + var firstByte = buf[i] + var codePoint = null + var bytesPerSequence = (firstByte > 0xEF) ? 4 + : (firstByte > 0xDF) ? 3 + : (firstByte > 0xBF) ? 2 + : 1 + + if (i + bytesPerSequence <= end) { + var secondByte, thirdByte, fourthByte, tempCodePoint + + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte + } + break + case 2: + secondByte = buf[i + 1] + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint + } + } + break + case 3: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint + } + } + break + case 4: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + fourthByte = buf[i + 3] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint + } + } + } + } + + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD + bytesPerSequence = 1 + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000 + res.push(codePoint >>> 10 & 0x3FF | 0xD800) + codePoint = 0xDC00 | codePoint & 0x3FF + } + + res.push(codePoint) + i += bytesPerSequence + } + + return decodeCodePointsArray(res) +} + +// Based on http://stackoverflow.com/a/22747272/680742, the browser with +// the lowest limit is Chrome, with 0x10000 args. +// We go 1 magnitude less, for safety +var MAX_ARGUMENTS_LENGTH = 0x1000 + +function decodeCodePointsArray (codePoints) { + var len = codePoints.length + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints) // avoid extra slice() + } + + // Decode in chunks to avoid "call stack size exceeded". + var res = '' + var i = 0 + while (i < len) { + res += String.fromCharCode.apply( + String, + codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) + ) + } + return res +} + +function asciiSlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i] & 0x7F) + } + return ret +} + +function latin1Slice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i]) + } + return ret +} + +function hexSlice (buf, start, end) { + var len = buf.length + + if (!start || start < 0) start = 0 + if (!end || end < 0 || end > len) end = len + + var out = '' + for (var i = start; i < end; ++i) { + out += toHex(buf[i]) + } + return out +} + +function utf16leSlice (buf, start, end) { + var bytes = buf.slice(start, end) + var res = '' + for (var i = 0; i < bytes.length; i += 2) { + res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256)) + } + return res +} + +Buffer.prototype.slice = function slice (start, end) { + var len = this.length + start = ~~start + end = end === undefined ? len : ~~end + + if (start < 0) { + start += len + if (start < 0) start = 0 + } else if (start > len) { + start = len + } + + if (end < 0) { + end += len + if (end < 0) end = 0 + } else if (end > len) { + end = len + } + + if (end < start) end = start + + var newBuf = this.subarray(start, end) + // Return an augmented `Uint8Array` instance + newBuf.__proto__ = Buffer.prototype + return newBuf +} + +/* + * Need to make sure that buffer isn't trying to write out of bounds. + */ +function checkOffset (offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') +} + +Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + + return val +} + +Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + checkOffset(offset, byteLength, this.length) + } + + var val = this[offset + --byteLength] + var mul = 1 + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul + } + + return val +} + +Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 1, this.length) + return this[offset] +} + +Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + return this[offset] | (this[offset + 1] << 8) +} + +Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + return (this[offset] << 8) | this[offset + 1] +} + +Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) +} + +Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) +} + +Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var i = byteLength + var mul = 1 + var val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 1, this.length) + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) +} + +Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset] | (this[offset + 1] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset + 1] | (this[offset] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) +} + +Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) +} + +Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, true, 23, 4) +} + +Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, false, 23, 4) +} + +Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, true, 52, 8) +} + +Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { + offset = offset >>> 0 + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, false, 52, 8) +} + +function checkInt (buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') + if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') + if (offset + ext > buf.length) throw new RangeError('Index out of range') +} + +Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + var mul = 1 + var i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + byteLength = byteLength >>> 0 + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + var i = byteLength - 1 + var mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + return offset + 2 +} + +Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + return offset + 2 +} + +Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + this[offset + 3] = (value >>> 24) + this[offset + 2] = (value >>> 16) + this[offset + 1] = (value >>> 8) + this[offset] = (value & 0xff) + return offset + 4 +} + +Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + return offset + 4 +} + +Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + var limit = Math.pow(2, (8 * byteLength) - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = 0 + var mul = 1 + var sub = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + var limit = Math.pow(2, (8 * byteLength) - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = byteLength - 1 + var mul = 1 + var sub = 0 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) + if (value < 0) value = 0xff + value + 1 + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + return offset + 2 +} + +Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + return offset + 2 +} + +Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + this[offset + 2] = (value >>> 16) + this[offset + 3] = (value >>> 24) + return offset + 4 +} + +Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (value < 0) value = 0xffffffff + value + 1 + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + return offset + 4 +} + +function checkIEEE754 (buf, value, offset, ext, max, min) { + if (offset + ext > buf.length) throw new RangeError('Index out of range') + if (offset < 0) throw new RangeError('Index out of range') +} + +function writeFloat (buf, value, offset, littleEndian, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) + } + ieee754.write(buf, value, offset, littleEndian, 23, 4) + return offset + 4 +} + +Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) +} + +function writeDouble (buf, value, offset, littleEndian, noAssert) { + value = +value + offset = offset >>> 0 + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) + } + ieee754.write(buf, value, offset, littleEndian, 52, 8) + return offset + 8 +} + +Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) +} + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function copy (target, targetStart, start, end) { + if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer') + if (!start) start = 0 + if (!end && end !== 0) end = this.length + if (targetStart >= target.length) targetStart = target.length + if (!targetStart) targetStart = 0 + if (end > 0 && end < start) end = start + + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || this.length === 0) return 0 + + // Fatal error conditions + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= this.length) throw new RangeError('Index out of range') + if (end < 0) throw new RangeError('sourceEnd out of bounds') + + // Are we oob? + if (end > this.length) end = this.length + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start + } + + var len = end - start + + if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') { + // Use built-in when available, missing from IE11 + this.copyWithin(targetStart, start, end) + } else if (this === target && start < targetStart && targetStart < end) { + // descending copy from end + for (var i = len - 1; i >= 0; --i) { + target[i + targetStart] = this[i + start] + } + } else { + Uint8Array.prototype.set.call( + target, + this.subarray(start, end), + targetStart + ) + } + + return len +} + +// Usage: +// buffer.fill(number[, offset[, end]]) +// buffer.fill(buffer[, offset[, end]]) +// buffer.fill(string[, offset[, end]][, encoding]) +Buffer.prototype.fill = function fill (val, start, end, encoding) { + // Handle string cases: + if (typeof val === 'string') { + if (typeof start === 'string') { + encoding = start + start = 0 + end = this.length + } else if (typeof end === 'string') { + encoding = end + end = this.length + } + if (encoding !== undefined && typeof encoding !== 'string') { + throw new TypeError('encoding must be a string') + } + if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + if (val.length === 1) { + var code = val.charCodeAt(0) + if ((encoding === 'utf8' && code < 128) || + encoding === 'latin1') { + // Fast path: If `val` fits into a single byte, use that numeric value. + val = code + } + } + } else if (typeof val === 'number') { + val = val & 255 + } + + // Invalid ranges are not set to a default, so can range check early. + if (start < 0 || this.length < start || this.length < end) { + throw new RangeError('Out of range index') + } + + if (end <= start) { + return this + } + + start = start >>> 0 + end = end === undefined ? this.length : end >>> 0 + + if (!val) val = 0 + + var i + if (typeof val === 'number') { + for (i = start; i < end; ++i) { + this[i] = val + } + } else { + var bytes = Buffer.isBuffer(val) + ? val + : Buffer.from(val, encoding) + var len = bytes.length + if (len === 0) { + throw new TypeError('The value "' + val + + '" is invalid for argument "value"') + } + for (i = 0; i < end - start; ++i) { + this[i + start] = bytes[i % len] + } + } + + return this +} + +// HELPER FUNCTIONS +// ================ + +var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g + +function base64clean (str) { + // Node takes equal signs as end of the Base64 encoding + str = str.split('=')[0] + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = str.trim().replace(INVALID_BASE64_RE, '') + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '=' + } + return str +} + +function toHex (n) { + if (n < 16) return '0' + n.toString(16) + return n.toString(16) +} + +function utf8ToBytes (string, units) { + units = units || Infinity + var codePoint + var length = string.length + var leadSurrogate = null + var bytes = [] + + for (var i = 0; i < length; ++i) { + codePoint = string.charCodeAt(i) + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } + + // valid lead + leadSurrogate = codePoint + + continue + } + + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } + + // valid surrogate pair + codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + } + + leadSurrogate = null + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint) + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else { + throw new Error('Invalid code point') + } + } + + return bytes +} + +function asciiToBytes (str) { + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF) + } + return byteArray +} + +function utf16leToBytes (str, units) { + var c, hi, lo + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break + + c = str.charCodeAt(i) + hi = c >> 8 + lo = c % 256 + byteArray.push(lo) + byteArray.push(hi) + } + + return byteArray +} + +function base64ToBytes (str) { + return base64.toByteArray(base64clean(str)) +} + +function blitBuffer (src, dst, offset, length) { + for (var i = 0; i < length; ++i) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i] + } + return i +} + +// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass +// the `instanceof` check but they should be treated as of that type. +// See: https://github.com/feross/buffer/issues/166 +function isInstance (obj, type) { + return obj instanceof type || + (obj != null && obj.constructor != null && obj.constructor.name != null && + obj.constructor.name === type.name) +} +function numberIsNaN (obj) { + // For IE11 support + return obj !== obj // eslint-disable-line no-self-compare +} + +}).call(this,require("buffer").Buffer) +},{"base64-js":62,"buffer":113,"ieee754":827}],114:[function(require,module,exports){ +module.exports = { + "100": "Continue", + "101": "Switching Protocols", + "102": "Processing", + "200": "OK", + "201": "Created", + "202": "Accepted", + "203": "Non-Authoritative Information", + "204": "No Content", + "205": "Reset Content", + "206": "Partial Content", + "207": "Multi-Status", + "208": "Already Reported", + "226": "IM Used", + "300": "Multiple Choices", + "301": "Moved Permanently", + "302": "Found", + "303": "See Other", + "304": "Not Modified", + "305": "Use Proxy", + "307": "Temporary Redirect", + "308": "Permanent Redirect", + "400": "Bad Request", + "401": "Unauthorized", + "402": "Payment Required", + "403": "Forbidden", + "404": "Not Found", + "405": "Method Not Allowed", + "406": "Not Acceptable", + "407": "Proxy Authentication Required", + "408": "Request Timeout", + "409": "Conflict", + "410": "Gone", + "411": "Length Required", + "412": "Precondition Failed", + "413": "Payload Too Large", + "414": "URI Too Long", + "415": "Unsupported Media Type", + "416": "Range Not Satisfiable", + "417": "Expectation Failed", + "418": "I'm a teapot", + "421": "Misdirected Request", + "422": "Unprocessable Entity", + "423": "Locked", + "424": "Failed Dependency", + "425": "Unordered Collection", + "426": "Upgrade Required", + "428": "Precondition Required", + "429": "Too Many Requests", + "431": "Request Header Fields Too Large", + "451": "Unavailable For Legal Reasons", + "500": "Internal Server Error", + "501": "Not Implemented", + "502": "Bad Gateway", + "503": "Service Unavailable", + "504": "Gateway Timeout", + "505": "HTTP Version Not Supported", + "506": "Variant Also Negotiates", + "507": "Insufficient Storage", + "508": "Loop Detected", + "509": "Bandwidth Limit Exceeded", + "510": "Not Extended", + "511": "Network Authentication Required" +} + +},{}],115:[function(require,module,exports){ +var upperCase = require('upper-case') +var noCase = require('no-case') + +/** + * Camel case a string. + * + * @param {string} value + * @param {string} [locale] + * @return {string} + */ +module.exports = function (value, locale, mergeNumbers) { + var result = noCase(value, locale) + + // Replace periods between numeric entities with an underscore. + if (!mergeNumbers) { + result = result.replace(/ (?=\d)/g, '_') + } + + // Replace spaces between words with an upper cased character. + return result.replace(/ (.)/g, function (m, $1) { + return upperCase($1, locale) + }) +} + +},{"no-case":967,"upper-case":1430}],116:[function(require,module,exports){ +function Caseless (dict) { + this.dict = dict || {} +} +Caseless.prototype.set = function (name, value, clobber) { + if (typeof name === 'object') { + for (var i in name) { + this.set(i, name[i], value) + } + } else { + if (typeof clobber === 'undefined') clobber = true + var has = this.has(name) + + if (!clobber && has) this.dict[has] = this.dict[has] + ',' + value + else this.dict[has || name] = value + return has + } +} +Caseless.prototype.has = function (name) { + var keys = Object.keys(this.dict) + , name = name.toLowerCase() + ; + for (var i=0;i 0; +} + +function Chalk(options) { + // We check for this.template here since calling `chalk.constructor()` + // by itself will have a `this` of a previously constructed chalk object + if (!this || !(this instanceof Chalk) || this.template) { + const chalk = {}; + applyOptions(chalk, options); + + chalk.template = function () { + const args = [].slice.call(arguments); + return chalkTag.apply(null, [chalk.template].concat(args)); + }; + + Object.setPrototypeOf(chalk, Chalk.prototype); + Object.setPrototypeOf(chalk.template, chalk); + + chalk.template.constructor = Chalk; + + return chalk.template; + } + + applyOptions(this, options); +} + +// Use bright blue on Windows as the normal blue color is illegible +if (isSimpleWindowsTerm) { + ansiStyles.blue.open = '\u001B[94m'; +} + +for (const key of Object.keys(ansiStyles)) { + ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g'); + + styles[key] = { + get() { + const codes = ansiStyles[key]; + return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, key); + } + }; +} + +styles.visible = { + get() { + return build.call(this, this._styles || [], true, 'visible'); + } +}; + +ansiStyles.color.closeRe = new RegExp(escapeStringRegexp(ansiStyles.color.close), 'g'); +for (const model of Object.keys(ansiStyles.color.ansi)) { + if (skipModels.has(model)) { + continue; + } + + styles[model] = { + get() { + const level = this.level; + return function () { + const open = ansiStyles.color[levelMapping[level]][model].apply(null, arguments); + const codes = { + open, + close: ansiStyles.color.close, + closeRe: ansiStyles.color.closeRe + }; + return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model); + }; + } + }; +} + +ansiStyles.bgColor.closeRe = new RegExp(escapeStringRegexp(ansiStyles.bgColor.close), 'g'); +for (const model of Object.keys(ansiStyles.bgColor.ansi)) { + if (skipModels.has(model)) { + continue; + } + + const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1); + styles[bgModel] = { + get() { + const level = this.level; + return function () { + const open = ansiStyles.bgColor[levelMapping[level]][model].apply(null, arguments); + const codes = { + open, + close: ansiStyles.bgColor.close, + closeRe: ansiStyles.bgColor.closeRe + }; + return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model); + }; + } + }; +} + +const proto = Object.defineProperties(() => {}, styles); + +function build(_styles, _empty, key) { + const builder = function () { + return applyStyle.apply(builder, arguments); + }; + + builder._styles = _styles; + builder._empty = _empty; + + const self = this; + + Object.defineProperty(builder, 'level', { + enumerable: true, + get() { + return self.level; + }, + set(level) { + self.level = level; + } + }); + + Object.defineProperty(builder, 'enabled', { + enumerable: true, + get() { + return self.enabled; + }, + set(enabled) { + self.enabled = enabled; + } + }); + + // See below for fix regarding invisible grey/dim combination on Windows + builder.hasGrey = this.hasGrey || key === 'gray' || key === 'grey'; + + // `__proto__` is used because we must return a function, but there is + // no way to create a function with a different prototype + builder.__proto__ = proto; // eslint-disable-line no-proto + + return builder; +} + +function applyStyle() { + // Support varags, but simply cast to string in case there's only one arg + const args = arguments; + const argsLen = args.length; + let str = String(arguments[0]); + + if (argsLen === 0) { + return ''; + } + + if (argsLen > 1) { + // Don't slice `arguments`, it prevents V8 optimizations + for (let a = 1; a < argsLen; a++) { + str += ' ' + args[a]; + } + } + + if (!this.enabled || this.level <= 0 || !str) { + return this._empty ? '' : str; + } + + // Turns out that on Windows dimmed gray text becomes invisible in cmd.exe, + // see https://github.com/chalk/chalk/issues/58 + // If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop. + const originalDim = ansiStyles.dim.open; + if (isSimpleWindowsTerm && this.hasGrey) { + ansiStyles.dim.open = ''; + } + + for (const code of this._styles.slice().reverse()) { + // Replace any instances already present with a re-opening code + // otherwise only the part of the string until said closing code + // will be colored, and the rest will simply be 'plain'. + str = code.open + str.replace(code.closeRe, code.open) + code.close; + + // Close the styling before a linebreak and reopen + // after next line to fix a bleed issue on macOS + // https://github.com/chalk/chalk/pull/92 + str = str.replace(/\r?\n/g, `${code.close}$&${code.open}`); + } + + // Reset the original `dim` if we changed it to work around the Windows dimmed gray issue + ansiStyles.dim.open = originalDim; + + return str; +} + +function chalkTag(chalk, strings) { + if (!Array.isArray(strings)) { + // If chalk() was called by itself or with a string, + // return the string itself as a string. + return [].slice.call(arguments, 1).join(' '); + } + + const args = [].slice.call(arguments, 2); + const parts = [strings.raw[0]]; + + for (let i = 1; i < strings.length; i++) { + parts.push(String(args[i - 1]).replace(/[{}\\]/g, '\\$&')); + parts.push(String(strings.raw[i])); + } + + return template(chalk, parts.join('')); +} + +Object.defineProperties(Chalk.prototype, styles); + +module.exports = Chalk(); // eslint-disable-line new-cap +module.exports.supportsColor = stdoutColor; +module.exports.default = module.exports; // For TypeScript + +}).call(this,require('_process')) +},{"./templates.js":118,"_process":109,"ansi-styles":9,"escape-string-regexp":578,"supports-color":1407}],118:[function(require,module,exports){ +'use strict'; +const TEMPLATE_REGEX = /(?:\\(u[a-f\d]{4}|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi; +const STYLE_REGEX = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g; +const STRING_REGEX = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/; +const ESCAPE_REGEX = /\\(u[a-f\d]{4}|x[a-f\d]{2}|.)|([^\\])/gi; + +const ESCAPES = new Map([ + ['n', '\n'], + ['r', '\r'], + ['t', '\t'], + ['b', '\b'], + ['f', '\f'], + ['v', '\v'], + ['0', '\0'], + ['\\', '\\'], + ['e', '\u001B'], + ['a', '\u0007'] +]); + +function unescape(c) { + if ((c[0] === 'u' && c.length === 5) || (c[0] === 'x' && c.length === 3)) { + return String.fromCharCode(parseInt(c.slice(1), 16)); + } + + return ESCAPES.get(c) || c; +} + +function parseArguments(name, args) { + const results = []; + const chunks = args.trim().split(/\s*,\s*/g); + let matches; + + for (const chunk of chunks) { + if (!isNaN(chunk)) { + results.push(Number(chunk)); + } else if ((matches = chunk.match(STRING_REGEX))) { + results.push(matches[2].replace(ESCAPE_REGEX, (m, escape, chr) => escape ? unescape(escape) : chr)); + } else { + throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`); + } + } + + return results; +} + +function parseStyle(style) { + STYLE_REGEX.lastIndex = 0; + + const results = []; + let matches; + + while ((matches = STYLE_REGEX.exec(style)) !== null) { + const name = matches[1]; + + if (matches[2]) { + const args = parseArguments(name, matches[2]); + results.push([name].concat(args)); + } else { + results.push([name]); + } + } + + return results; +} + +function buildStyle(chalk, styles) { + const enabled = {}; + + for (const layer of styles) { + for (const style of layer.styles) { + enabled[style[0]] = layer.inverse ? null : style.slice(1); + } + } + + let current = chalk; + for (const styleName of Object.keys(enabled)) { + if (Array.isArray(enabled[styleName])) { + if (!(styleName in current)) { + throw new Error(`Unknown Chalk style: ${styleName}`); + } + + if (enabled[styleName].length > 0) { + current = current[styleName].apply(current, enabled[styleName]); + } else { + current = current[styleName]; + } + } + } + + return current; +} + +module.exports = (chalk, tmp) => { + const styles = []; + const chunks = []; + let chunk = []; + + // eslint-disable-next-line max-params + tmp.replace(TEMPLATE_REGEX, (m, escapeChar, inverse, style, close, chr) => { + if (escapeChar) { + chunk.push(unescape(escapeChar)); + } else if (style) { + const str = chunk.join(''); + chunk = []; + chunks.push(styles.length === 0 ? str : buildStyle(chalk, styles)(str)); + styles.push({inverse, styles: parseStyle(style)}); + } else if (close) { + if (styles.length === 0) { + throw new Error('Found extraneous } in Chalk template literal'); + } + + chunks.push(buildStyle(chalk, styles)(chunk.join(''))); + chunk = []; + styles.pop(); + } else { + chunk.push(chr); + } + }); + + chunks.push(chunk.join('')); + + if (styles.length > 0) { + const errMsg = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\`}\`)`; + throw new Error(errMsg); + } + + return chunks.join(''); +}; + +},{}],119:[function(require,module,exports){ +exports.no = exports.noCase = require('no-case') +exports.dot = exports.dotCase = require('dot-case') +exports.swap = exports.swapCase = require('swap-case') +exports.path = exports.pathCase = require('path-case') +exports.upper = exports.upperCase = require('upper-case') +exports.lower = exports.lowerCase = require('lower-case') +exports.camel = exports.camelCase = require('camel-case') +exports.snake = exports.snakeCase = require('snake-case') +exports.title = exports.titleCase = require('title-case') +exports.param = exports.paramCase = require('param-case') +exports.kebab = exports.kebabCase = exports.paramCase +exports.hyphen = exports.hyphenCase = exports.paramCase +exports.header = exports.headerCase = require('header-case') +exports.pascal = exports.pascalCase = require('pascal-case') +exports.constant = exports.constantCase = require('constant-case') +exports.sentence = exports.sentenceCase = require('sentence-case') +exports.isUpper = exports.isUpperCase = require('is-upper-case') +exports.isLower = exports.isLowerCase = require('is-lower-case') +exports.ucFirst = exports.upperCaseFirst = require('upper-case-first') +exports.lcFirst = exports.lowerCaseFirst = require('lower-case-first') + +},{"camel-case":115,"constant-case":130,"dot-case":544,"header-case":815,"is-lower-case":848,"is-upper-case":851,"lower-case":933,"lower-case-first":932,"no-case":967,"param-case":1001,"pascal-case":1010,"path-case":1012,"sentence-case":1347,"snake-case":1362,"swap-case":1408,"title-case":1417,"upper-case":1430,"upper-case-first":1429}],120:[function(require,module,exports){ +var Buffer = require('safe-buffer').Buffer +var Transform = require('stream').Transform +var StringDecoder = require('string_decoder').StringDecoder +var inherits = require('inherits') + +function CipherBase (hashMode) { + Transform.call(this) + this.hashMode = typeof hashMode === 'string' + if (this.hashMode) { + this[hashMode] = this._finalOrDigest + } else { + this.final = this._finalOrDigest + } + if (this._final) { + this.__final = this._final + this._final = null + } + this._decoder = null + this._encoding = null +} +inherits(CipherBase, Transform) + +CipherBase.prototype.update = function (data, inputEnc, outputEnc) { + if (typeof data === 'string') { + data = Buffer.from(data, inputEnc) + } + + var outData = this._update(data) + if (this.hashMode) return this + + if (outputEnc) { + outData = this._toString(outData, outputEnc) + } + + return outData +} + +CipherBase.prototype.setAutoPadding = function () {} +CipherBase.prototype.getAuthTag = function () { + throw new Error('trying to get auth tag in unsupported state') +} + +CipherBase.prototype.setAuthTag = function () { + throw new Error('trying to set auth tag in unsupported state') +} + +CipherBase.prototype.setAAD = function () { + throw new Error('trying to set aad in unsupported state') +} + +CipherBase.prototype._transform = function (data, _, next) { + var err + try { + if (this.hashMode) { + this._update(data) + } else { + this.push(this._update(data)) + } + } catch (e) { + err = e + } finally { + next(err) + } +} +CipherBase.prototype._flush = function (done) { + var err + try { + this.push(this.__final()) + } catch (e) { + err = e + } + + done(err) +} +CipherBase.prototype._finalOrDigest = function (outputEnc) { + var outData = this.__final() || Buffer.alloc(0) + if (outputEnc) { + outData = this._toString(outData, outputEnc, true) + } + return outData +} + +CipherBase.prototype._toString = function (value, enc, fin) { + if (!this._decoder) { + this._decoder = new StringDecoder(enc) + this._encoding = enc + } + + if (this._encoding !== enc) throw new Error('can\'t switch encodings') + + var out = this._decoder.write(value) + if (fin) { + out += this._decoder.end() + } + + return out +} + +module.exports = CipherBase + +},{"inherits":834,"safe-buffer":1334,"stream":1394,"string_decoder":1404}],121:[function(require,module,exports){ +/*! +Copyright (C) 2013 by WebReflection + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ +var + // should be a not so common char + // possibly one JSON does not encode + // possibly one encodeURIComponent does not encode + // right now this char is '~' but this might change in the future + specialChar = '~', + safeSpecialChar = '\\x' + ( + '0' + specialChar.charCodeAt(0).toString(16) + ).slice(-2), + escapedSafeSpecialChar = '\\' + safeSpecialChar, + specialCharRG = new RegExp(safeSpecialChar, 'g'), + safeSpecialCharRG = new RegExp(escapedSafeSpecialChar, 'g'), + + safeStartWithSpecialCharRG = new RegExp('(?:^|([^\\\\]))' + escapedSafeSpecialChar), + + indexOf = [].indexOf || function(v){ + for(var i=this.length;i--&&this[i]!==v;); + return i; + }, + $String = String // there's no way to drop warnings in JSHint + // about new String ... well, I need that here! + // faked, and happy linter! +; + +function generateReplacer(value, replacer, resolve) { + var + path = [], + all = [value], + seen = [value], + mapp = [resolve ? specialChar : '[Circular]'], + last = value, + lvl = 1, + i + ; + return function(key, value) { + // the replacer has rights to decide + // if a new object should be returned + // or if there's some key to drop + // let's call it here rather than "too late" + if (replacer) value = replacer.call(this, key, value); + + // did you know ? Safari passes keys as integers for arrays + // which means if (key) when key === 0 won't pass the check + if (key !== '') { + if (last !== this) { + i = lvl - indexOf.call(all, this) - 1; + lvl -= i; + all.splice(lvl, all.length); + path.splice(lvl - 1, path.length); + last = this; + } + // console.log(lvl, key, path); + if (typeof value === 'object' && value) { + // if object isn't referring to parent object, add to the + // object path stack. Otherwise it is already there. + if (indexOf.call(all, value) < 0) { + all.push(last = value); + } + lvl = all.length; + i = indexOf.call(seen, value); + if (i < 0) { + i = seen.push(value) - 1; + if (resolve) { + // key cannot contain specialChar but could be not a string + path.push(('' + key).replace(specialCharRG, safeSpecialChar)); + mapp[i] = specialChar + path.join(specialChar); + } else { + mapp[i] = mapp[0]; + } + } else { + value = mapp[i]; + } + } else { + if (typeof value === 'string' && resolve) { + // ensure no special char involved on deserialization + // in this case only first char is important + // no need to replace all value (better performance) + value = value .replace(safeSpecialChar, escapedSafeSpecialChar) + .replace(specialChar, safeSpecialChar); + } + } + } + return value; + }; +} + +function retrieveFromPath(current, keys) { + for(var i = 0, length = keys.length; i < length; current = current[ + // keys should be normalized back here + keys[i++].replace(safeSpecialCharRG, specialChar) + ]); + return current; +} + +function generateReviver(reviver) { + return function(key, value) { + var isString = typeof value === 'string'; + if (isString && value.charAt(0) === specialChar) { + return new $String(value.slice(1)); + } + if (key === '') value = regenerate(value, value, {}); + // again, only one needed, do not use the RegExp for this replacement + // only keys need the RegExp + if (isString) value = value .replace(safeStartWithSpecialCharRG, '$1' + specialChar) + .replace(escapedSafeSpecialChar, safeSpecialChar); + return reviver ? reviver.call(this, key, value) : value; + }; +} + +function regenerateArray(root, current, retrieve) { + for (var i = 0, length = current.length; i < length; i++) { + current[i] = regenerate(root, current[i], retrieve); + } + return current; +} + +function regenerateObject(root, current, retrieve) { + for (var key in current) { + if (current.hasOwnProperty(key)) { + current[key] = regenerate(root, current[key], retrieve); + } + } + return current; +} + +function regenerate(root, current, retrieve) { + return current instanceof Array ? + // fast Array reconstruction + regenerateArray(root, current, retrieve) : + ( + current instanceof $String ? + ( + // root is an empty string + current.length ? + ( + retrieve.hasOwnProperty(current) ? + retrieve[current] : + retrieve[current] = retrieveFromPath( + root, current.split(specialChar) + ) + ) : + root + ) : + ( + current instanceof Object ? + // dedicated Object parser + regenerateObject(root, current, retrieve) : + // value as it is + current + ) + ) + ; +} + +function stringifyRecursion(value, replacer, space, doNotResolve) { + return JSON.stringify(value, generateReplacer(value, replacer, !doNotResolve), space); +} + +function parseRecursion(text, reviver) { + return JSON.parse(text, generateReviver(reviver)); +} +this.stringify = stringifyRecursion; +this.parse = parseRecursion; +},{}],122:[function(require,module,exports){ +/* MIT license */ +var cssKeywords = require('color-name'); + +// NOTE: conversions should only return primitive values (i.e. arrays, or +// values that give correct `typeof` results). +// do not use box values types (i.e. Number(), String(), etc.) + +var reverseKeywords = {}; +for (var key in cssKeywords) { + if (cssKeywords.hasOwnProperty(key)) { + reverseKeywords[cssKeywords[key]] = key; + } +} + +var convert = module.exports = { + rgb: {channels: 3, labels: 'rgb'}, + hsl: {channels: 3, labels: 'hsl'}, + hsv: {channels: 3, labels: 'hsv'}, + hwb: {channels: 3, labels: 'hwb'}, + cmyk: {channels: 4, labels: 'cmyk'}, + xyz: {channels: 3, labels: 'xyz'}, + lab: {channels: 3, labels: 'lab'}, + lch: {channels: 3, labels: 'lch'}, + hex: {channels: 1, labels: ['hex']}, + keyword: {channels: 1, labels: ['keyword']}, + ansi16: {channels: 1, labels: ['ansi16']}, + ansi256: {channels: 1, labels: ['ansi256']}, + hcg: {channels: 3, labels: ['h', 'c', 'g']}, + apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, + gray: {channels: 1, labels: ['gray']} +}; + +// hide .channels and .labels properties +for (var model in convert) { + if (convert.hasOwnProperty(model)) { + if (!('channels' in convert[model])) { + throw new Error('missing channels property: ' + model); + } + + if (!('labels' in convert[model])) { + throw new Error('missing channel labels property: ' + model); + } + + if (convert[model].labels.length !== convert[model].channels) { + throw new Error('channel and label counts mismatch: ' + model); + } + + var channels = convert[model].channels; + var labels = convert[model].labels; + delete convert[model].channels; + delete convert[model].labels; + Object.defineProperty(convert[model], 'channels', {value: channels}); + Object.defineProperty(convert[model], 'labels', {value: labels}); + } +} + +convert.rgb.hsl = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var min = Math.min(r, g, b); + var max = Math.max(r, g, b); + var delta = max - min; + var h; + var s; + var l; + + if (max === min) { + h = 0; + } else if (r === max) { + h = (g - b) / delta; + } else if (g === max) { + h = 2 + (b - r) / delta; + } else if (b === max) { + h = 4 + (r - g) / delta; + } + + h = Math.min(h * 60, 360); + + if (h < 0) { + h += 360; + } + + l = (min + max) / 2; + + if (max === min) { + s = 0; + } else if (l <= 0.5) { + s = delta / (max + min); + } else { + s = delta / (2 - max - min); + } + + return [h, s * 100, l * 100]; +}; + +convert.rgb.hsv = function (rgb) { + var rdif; + var gdif; + var bdif; + var h; + var s; + + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var v = Math.max(r, g, b); + var diff = v - Math.min(r, g, b); + var diffc = function (c) { + return (v - c) / 6 / diff + 1 / 2; + }; + + if (diff === 0) { + h = s = 0; + } else { + s = diff / v; + rdif = diffc(r); + gdif = diffc(g); + bdif = diffc(b); + + if (r === v) { + h = bdif - gdif; + } else if (g === v) { + h = (1 / 3) + rdif - bdif; + } else if (b === v) { + h = (2 / 3) + gdif - rdif; + } + if (h < 0) { + h += 1; + } else if (h > 1) { + h -= 1; + } + } + + return [ + h * 360, + s * 100, + v * 100 + ]; +}; + +convert.rgb.hwb = function (rgb) { + var r = rgb[0]; + var g = rgb[1]; + var b = rgb[2]; + var h = convert.rgb.hsl(rgb)[0]; + var w = 1 / 255 * Math.min(r, Math.min(g, b)); + + b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); + + return [h, w * 100, b * 100]; +}; + +convert.rgb.cmyk = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var c; + var m; + var y; + var k; + + k = Math.min(1 - r, 1 - g, 1 - b); + c = (1 - r - k) / (1 - k) || 0; + m = (1 - g - k) / (1 - k) || 0; + y = (1 - b - k) / (1 - k) || 0; + + return [c * 100, m * 100, y * 100, k * 100]; +}; + +/** + * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance + * */ +function comparativeDistance(x, y) { + return ( + Math.pow(x[0] - y[0], 2) + + Math.pow(x[1] - y[1], 2) + + Math.pow(x[2] - y[2], 2) + ); +} + +convert.rgb.keyword = function (rgb) { + var reversed = reverseKeywords[rgb]; + if (reversed) { + return reversed; + } + + var currentClosestDistance = Infinity; + var currentClosestKeyword; + + for (var keyword in cssKeywords) { + if (cssKeywords.hasOwnProperty(keyword)) { + var value = cssKeywords[keyword]; + + // Compute comparative distance + var distance = comparativeDistance(rgb, value); + + // Check if its less, if so set as closest + if (distance < currentClosestDistance) { + currentClosestDistance = distance; + currentClosestKeyword = keyword; + } + } + } + + return currentClosestKeyword; +}; + +convert.keyword.rgb = function (keyword) { + return cssKeywords[keyword]; +}; + +convert.rgb.xyz = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + + // assume sRGB + r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); + g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); + b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); + + var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); + var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); + var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); + + return [x * 100, y * 100, z * 100]; +}; + +convert.rgb.lab = function (rgb) { + var xyz = convert.rgb.xyz(rgb); + var x = xyz[0]; + var y = xyz[1]; + var z = xyz[2]; + var l; + var a; + var b; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); + + l = (116 * y) - 16; + a = 500 * (x - y); + b = 200 * (y - z); + + return [l, a, b]; +}; + +convert.hsl.rgb = function (hsl) { + var h = hsl[0] / 360; + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var t1; + var t2; + var t3; + var rgb; + var val; + + if (s === 0) { + val = l * 255; + return [val, val, val]; + } + + if (l < 0.5) { + t2 = l * (1 + s); + } else { + t2 = l + s - l * s; + } + + t1 = 2 * l - t2; + + rgb = [0, 0, 0]; + for (var i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + if (t3 < 0) { + t3++; + } + if (t3 > 1) { + t3--; + } + + if (6 * t3 < 1) { + val = t1 + (t2 - t1) * 6 * t3; + } else if (2 * t3 < 1) { + val = t2; + } else if (3 * t3 < 2) { + val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + } else { + val = t1; + } + + rgb[i] = val * 255; + } + + return rgb; +}; + +convert.hsl.hsv = function (hsl) { + var h = hsl[0]; + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var smin = s; + var lmin = Math.max(l, 0.01); + var sv; + var v; + + l *= 2; + s *= (l <= 1) ? l : 2 - l; + smin *= lmin <= 1 ? lmin : 2 - lmin; + v = (l + s) / 2; + sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); + + return [h, sv * 100, v * 100]; +}; + +convert.hsv.rgb = function (hsv) { + var h = hsv[0] / 60; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var hi = Math.floor(h) % 6; + + var f = h - Math.floor(h); + var p = 255 * v * (1 - s); + var q = 255 * v * (1 - (s * f)); + var t = 255 * v * (1 - (s * (1 - f))); + v *= 255; + + switch (hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; + } +}; + +convert.hsv.hsl = function (hsv) { + var h = hsv[0]; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var vmin = Math.max(v, 0.01); + var lmin; + var sl; + var l; + + l = (2 - s) * v; + lmin = (2 - s) * vmin; + sl = s * vmin; + sl /= (lmin <= 1) ? lmin : 2 - lmin; + sl = sl || 0; + l /= 2; + + return [h, sl * 100, l * 100]; +}; + +// http://dev.w3.org/csswg/css-color/#hwb-to-rgb +convert.hwb.rgb = function (hwb) { + var h = hwb[0] / 360; + var wh = hwb[1] / 100; + var bl = hwb[2] / 100; + var ratio = wh + bl; + var i; + var v; + var f; + var n; + + // wh + bl cant be > 1 + if (ratio > 1) { + wh /= ratio; + bl /= ratio; + } + + i = Math.floor(6 * h); + v = 1 - bl; + f = 6 * h - i; + + if ((i & 0x01) !== 0) { + f = 1 - f; + } + + n = wh + f * (v - wh); // linear interpolation + + var r; + var g; + var b; + switch (i) { + default: + case 6: + case 0: r = v; g = n; b = wh; break; + case 1: r = n; g = v; b = wh; break; + case 2: r = wh; g = v; b = n; break; + case 3: r = wh; g = n; b = v; break; + case 4: r = n; g = wh; b = v; break; + case 5: r = v; g = wh; b = n; break; + } + + return [r * 255, g * 255, b * 255]; +}; + +convert.cmyk.rgb = function (cmyk) { + var c = cmyk[0] / 100; + var m = cmyk[1] / 100; + var y = cmyk[2] / 100; + var k = cmyk[3] / 100; + var r; + var g; + var b; + + r = 1 - Math.min(1, c * (1 - k) + k); + g = 1 - Math.min(1, m * (1 - k) + k); + b = 1 - Math.min(1, y * (1 - k) + k); + + return [r * 255, g * 255, b * 255]; +}; + +convert.xyz.rgb = function (xyz) { + var x = xyz[0] / 100; + var y = xyz[1] / 100; + var z = xyz[2] / 100; + var r; + var g; + var b; + + r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); + g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); + b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); + + // assume sRGB + r = r > 0.0031308 + ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055) + : r * 12.92; + + g = g > 0.0031308 + ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055) + : g * 12.92; + + b = b > 0.0031308 + ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055) + : b * 12.92; + + r = Math.min(Math.max(0, r), 1); + g = Math.min(Math.max(0, g), 1); + b = Math.min(Math.max(0, b), 1); + + return [r * 255, g * 255, b * 255]; +}; + +convert.xyz.lab = function (xyz) { + var x = xyz[0]; + var y = xyz[1]; + var z = xyz[2]; + var l; + var a; + var b; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); + + l = (116 * y) - 16; + a = 500 * (x - y); + b = 200 * (y - z); + + return [l, a, b]; +}; + +convert.lab.xyz = function (lab) { + var l = lab[0]; + var a = lab[1]; + var b = lab[2]; + var x; + var y; + var z; + + y = (l + 16) / 116; + x = a / 500 + y; + z = y - b / 200; + + var y2 = Math.pow(y, 3); + var x2 = Math.pow(x, 3); + var z2 = Math.pow(z, 3); + y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; + x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; + z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; + + x *= 95.047; + y *= 100; + z *= 108.883; + + return [x, y, z]; +}; + +convert.lab.lch = function (lab) { + var l = lab[0]; + var a = lab[1]; + var b = lab[2]; + var hr; + var h; + var c; + + hr = Math.atan2(b, a); + h = hr * 360 / 2 / Math.PI; + + if (h < 0) { + h += 360; + } + + c = Math.sqrt(a * a + b * b); + + return [l, c, h]; +}; + +convert.lch.lab = function (lch) { + var l = lch[0]; + var c = lch[1]; + var h = lch[2]; + var a; + var b; + var hr; + + hr = h / 360 * 2 * Math.PI; + a = c * Math.cos(hr); + b = c * Math.sin(hr); + + return [l, a, b]; +}; + +convert.rgb.ansi16 = function (args) { + var r = args[0]; + var g = args[1]; + var b = args[2]; + var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization + + value = Math.round(value / 50); + + if (value === 0) { + return 30; + } + + var ansi = 30 + + ((Math.round(b / 255) << 2) + | (Math.round(g / 255) << 1) + | Math.round(r / 255)); + + if (value === 2) { + ansi += 60; + } + + return ansi; +}; + +convert.hsv.ansi16 = function (args) { + // optimization here; we already know the value and don't need to get + // it converted for us. + return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); +}; + +convert.rgb.ansi256 = function (args) { + var r = args[0]; + var g = args[1]; + var b = args[2]; + + // we use the extended greyscale palette here, with the exception of + // black and white. normal palette only has 4 greyscale shades. + if (r === g && g === b) { + if (r < 8) { + return 16; + } + + if (r > 248) { + return 231; + } + + return Math.round(((r - 8) / 247) * 24) + 232; + } + + var ansi = 16 + + (36 * Math.round(r / 255 * 5)) + + (6 * Math.round(g / 255 * 5)) + + Math.round(b / 255 * 5); + + return ansi; +}; + +convert.ansi16.rgb = function (args) { + var color = args % 10; + + // handle greyscale + if (color === 0 || color === 7) { + if (args > 50) { + color += 3.5; + } + + color = color / 10.5 * 255; + + return [color, color, color]; + } + + var mult = (~~(args > 50) + 1) * 0.5; + var r = ((color & 1) * mult) * 255; + var g = (((color >> 1) & 1) * mult) * 255; + var b = (((color >> 2) & 1) * mult) * 255; + + return [r, g, b]; +}; + +convert.ansi256.rgb = function (args) { + // handle greyscale + if (args >= 232) { + var c = (args - 232) * 10 + 8; + return [c, c, c]; + } + + args -= 16; + + var rem; + var r = Math.floor(args / 36) / 5 * 255; + var g = Math.floor((rem = args % 36) / 6) / 5 * 255; + var b = (rem % 6) / 5 * 255; + + return [r, g, b]; +}; + +convert.rgb.hex = function (args) { + var integer = ((Math.round(args[0]) & 0xFF) << 16) + + ((Math.round(args[1]) & 0xFF) << 8) + + (Math.round(args[2]) & 0xFF); + + var string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; + +convert.hex.rgb = function (args) { + var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); + if (!match) { + return [0, 0, 0]; + } + + var colorString = match[0]; + + if (match[0].length === 3) { + colorString = colorString.split('').map(function (char) { + return char + char; + }).join(''); + } + + var integer = parseInt(colorString, 16); + var r = (integer >> 16) & 0xFF; + var g = (integer >> 8) & 0xFF; + var b = integer & 0xFF; + + return [r, g, b]; +}; + +convert.rgb.hcg = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var max = Math.max(Math.max(r, g), b); + var min = Math.min(Math.min(r, g), b); + var chroma = (max - min); + var grayscale; + var hue; + + if (chroma < 1) { + grayscale = min / (1 - chroma); + } else { + grayscale = 0; + } + + if (chroma <= 0) { + hue = 0; + } else + if (max === r) { + hue = ((g - b) / chroma) % 6; + } else + if (max === g) { + hue = 2 + (b - r) / chroma; + } else { + hue = 4 + (r - g) / chroma + 4; + } + + hue /= 6; + hue %= 1; + + return [hue * 360, chroma * 100, grayscale * 100]; +}; + +convert.hsl.hcg = function (hsl) { + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var c = 1; + var f = 0; + + if (l < 0.5) { + c = 2.0 * s * l; + } else { + c = 2.0 * s * (1.0 - l); + } + + if (c < 1.0) { + f = (l - 0.5 * c) / (1.0 - c); + } + + return [hsl[0], c * 100, f * 100]; +}; + +convert.hsv.hcg = function (hsv) { + var s = hsv[1] / 100; + var v = hsv[2] / 100; + + var c = s * v; + var f = 0; + + if (c < 1.0) { + f = (v - c) / (1 - c); + } + + return [hsv[0], c * 100, f * 100]; +}; + +convert.hcg.rgb = function (hcg) { + var h = hcg[0] / 360; + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + if (c === 0.0) { + return [g * 255, g * 255, g * 255]; + } + + var pure = [0, 0, 0]; + var hi = (h % 1) * 6; + var v = hi % 1; + var w = 1 - v; + var mg = 0; + + switch (Math.floor(hi)) { + case 0: + pure[0] = 1; pure[1] = v; pure[2] = 0; break; + case 1: + pure[0] = w; pure[1] = 1; pure[2] = 0; break; + case 2: + pure[0] = 0; pure[1] = 1; pure[2] = v; break; + case 3: + pure[0] = 0; pure[1] = w; pure[2] = 1; break; + case 4: + pure[0] = v; pure[1] = 0; pure[2] = 1; break; + default: + pure[0] = 1; pure[1] = 0; pure[2] = w; + } + + mg = (1.0 - c) * g; + + return [ + (c * pure[0] + mg) * 255, + (c * pure[1] + mg) * 255, + (c * pure[2] + mg) * 255 + ]; +}; + +convert.hcg.hsv = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + var v = c + g * (1.0 - c); + var f = 0; + + if (v > 0.0) { + f = c / v; + } + + return [hcg[0], f * 100, v * 100]; +}; + +convert.hcg.hsl = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + var l = g * (1.0 - c) + 0.5 * c; + var s = 0; + + if (l > 0.0 && l < 0.5) { + s = c / (2 * l); + } else + if (l >= 0.5 && l < 1.0) { + s = c / (2 * (1 - l)); + } + + return [hcg[0], s * 100, l * 100]; +}; + +convert.hcg.hwb = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + var v = c + g * (1.0 - c); + return [hcg[0], (v - c) * 100, (1 - v) * 100]; +}; + +convert.hwb.hcg = function (hwb) { + var w = hwb[1] / 100; + var b = hwb[2] / 100; + var v = 1 - b; + var c = v - w; + var g = 0; + + if (c < 1) { + g = (v - c) / (1 - c); + } + + return [hwb[0], c * 100, g * 100]; +}; + +convert.apple.rgb = function (apple) { + return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; +}; + +convert.rgb.apple = function (rgb) { + return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; +}; + +convert.gray.rgb = function (args) { + return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; +}; + +convert.gray.hsl = convert.gray.hsv = function (args) { + return [0, 0, args[0]]; +}; + +convert.gray.hwb = function (gray) { + return [0, 100, gray[0]]; +}; + +convert.gray.cmyk = function (gray) { + return [0, 0, 0, gray[0]]; +}; + +convert.gray.lab = function (gray) { + return [gray[0], 0, 0]; +}; + +convert.gray.hex = function (gray) { + var val = Math.round(gray[0] / 100 * 255) & 0xFF; + var integer = (val << 16) + (val << 8) + val; + + var string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; + +convert.rgb.gray = function (rgb) { + var val = (rgb[0] + rgb[1] + rgb[2]) / 3; + return [val / 255 * 100]; +}; + +},{"color-name":125}],123:[function(require,module,exports){ +var conversions = require('./conversions'); +var route = require('./route'); + +var convert = {}; + +var models = Object.keys(conversions); + +function wrapRaw(fn) { + var wrappedFn = function (args) { + if (args === undefined || args === null) { + return args; + } + + if (arguments.length > 1) { + args = Array.prototype.slice.call(arguments); + } + + return fn(args); + }; + + // preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; +} + +function wrapRounded(fn) { + var wrappedFn = function (args) { + if (args === undefined || args === null) { + return args; + } + + if (arguments.length > 1) { + args = Array.prototype.slice.call(arguments); + } + + var result = fn(args); + + // we're assuming the result is an array here. + // see notice in conversions.js; don't use box types + // in conversion functions. + if (typeof result === 'object') { + for (var len = result.length, i = 0; i < len; i++) { + result[i] = Math.round(result[i]); + } + } + + return result; + }; + + // preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; +} + +models.forEach(function (fromModel) { + convert[fromModel] = {}; + + Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels}); + Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels}); + + var routes = route(fromModel); + var routeModels = Object.keys(routes); + + routeModels.forEach(function (toModel) { + var fn = routes[toModel]; + + convert[fromModel][toModel] = wrapRounded(fn); + convert[fromModel][toModel].raw = wrapRaw(fn); + }); +}); + +module.exports = convert; + +},{"./conversions":122,"./route":124}],124:[function(require,module,exports){ +var conversions = require('./conversions'); + +/* + this function routes a model to all other models. + + all functions that are routed have a property `.conversion` attached + to the returned synthetic function. This property is an array + of strings, each with the steps in between the 'from' and 'to' + color models (inclusive). + + conversions that are not possible simply are not included. +*/ + +function buildGraph() { + var graph = {}; + // https://jsperf.com/object-keys-vs-for-in-with-closure/3 + var models = Object.keys(conversions); + + for (var len = models.length, i = 0; i < len; i++) { + graph[models[i]] = { + // http://jsperf.com/1-vs-infinity + // micro-opt, but this is simple. + distance: -1, + parent: null + }; + } + + return graph; +} + +// https://en.wikipedia.org/wiki/Breadth-first_search +function deriveBFS(fromModel) { + var graph = buildGraph(); + var queue = [fromModel]; // unshift -> queue -> pop + + graph[fromModel].distance = 0; + + while (queue.length) { + var current = queue.pop(); + var adjacents = Object.keys(conversions[current]); + + for (var len = adjacents.length, i = 0; i < len; i++) { + var adjacent = adjacents[i]; + var node = graph[adjacent]; + + if (node.distance === -1) { + node.distance = graph[current].distance + 1; + node.parent = current; + queue.unshift(adjacent); + } + } + } + + return graph; +} + +function link(from, to) { + return function (args) { + return to(from(args)); + }; +} + +function wrapConversion(toModel, graph) { + var path = [graph[toModel].parent, toModel]; + var fn = conversions[graph[toModel].parent][toModel]; + + var cur = graph[toModel].parent; + while (graph[cur].parent) { + path.unshift(graph[cur].parent); + fn = link(conversions[graph[cur].parent][cur], fn); + cur = graph[cur].parent; + } + + fn.conversion = path; + return fn; +} + +module.exports = function (fromModel) { + var graph = deriveBFS(fromModel); + var conversion = {}; + + var models = Object.keys(graph); + for (var len = models.length, i = 0; i < len; i++) { + var toModel = models[i]; + var node = graph[toModel]; + + if (node.parent === null) { + // no possible conversion, or this node is the source model. + continue; + } + + conversion[toModel] = wrapConversion(toModel, graph); + } + + return conversion; +}; + + +},{"./conversions":122}],125:[function(require,module,exports){ +'use strict' + +module.exports = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] +}; + +},{}],126:[function(require,module,exports){ +module.exports = colorSupport({ alwaysReturn: true }, colorSupport) + +function colorSupport(options, obj) { + obj = obj || {} + options = options || {} + obj.level = 0 + obj.hasBasic = false + obj.has256 = false + obj.has16m = false + if (!options.alwaysReturn) { + return false + } + return obj +} + +},{}],127:[function(require,module,exports){ +(function (Buffer){ +var util = require('util'); +var Stream = require('stream').Stream; +var DelayedStream = require('delayed-stream'); +var defer = require('./defer.js'); + +module.exports = CombinedStream; +function CombinedStream() { + this.writable = false; + this.readable = true; + this.dataSize = 0; + this.maxDataSize = 2 * 1024 * 1024; + this.pauseStreams = true; + + this._released = false; + this._streams = []; + this._currentStream = null; +} +util.inherits(CombinedStream, Stream); + +CombinedStream.create = function(options) { + var combinedStream = new this(); + + options = options || {}; + for (var option in options) { + combinedStream[option] = options[option]; + } + + return combinedStream; +}; + +CombinedStream.isStreamLike = function(stream) { + return (typeof stream !== 'function') + && (typeof stream !== 'string') + && (typeof stream !== 'boolean') + && (typeof stream !== 'number') + && (!Buffer.isBuffer(stream)); +}; + +CombinedStream.prototype.append = function(stream) { + var isStreamLike = CombinedStream.isStreamLike(stream); + + if (isStreamLike) { + if (!(stream instanceof DelayedStream)) { + var newStream = DelayedStream.create(stream, { + maxDataSize: Infinity, + pauseStream: this.pauseStreams, + }); + stream.on('data', this._checkDataSize.bind(this)); + stream = newStream; + } + + this._handleErrors(stream); + + if (this.pauseStreams) { + stream.pause(); + } + } + + this._streams.push(stream); + return this; +}; + +CombinedStream.prototype.pipe = function(dest, options) { + Stream.prototype.pipe.call(this, dest, options); + this.resume(); + return dest; +}; + +CombinedStream.prototype._getNext = function() { + this._currentStream = null; + var stream = this._streams.shift(); + + + if (typeof stream == 'undefined') { + this.end(); + return; + } + + if (typeof stream !== 'function') { + this._pipeNext(stream); + return; + } + + var getStream = stream; + getStream(function(stream) { + var isStreamLike = CombinedStream.isStreamLike(stream); + if (isStreamLike) { + stream.on('data', this._checkDataSize.bind(this)); + this._handleErrors(stream); + } + + defer(this._pipeNext.bind(this, stream)); + }.bind(this)); +}; + +CombinedStream.prototype._pipeNext = function(stream) { + this._currentStream = stream; + + var isStreamLike = CombinedStream.isStreamLike(stream); + if (isStreamLike) { + stream.on('end', this._getNext.bind(this)); + stream.pipe(this, {end: false}); + return; + } + + var value = stream; + this.write(value); + this._getNext(); +}; + +CombinedStream.prototype._handleErrors = function(stream) { + var self = this; + stream.on('error', function(err) { + self._emitError(err); + }); +}; + +CombinedStream.prototype.write = function(data) { + this.emit('data', data); +}; + +CombinedStream.prototype.pause = function() { + if (!this.pauseStreams) { + return; + } + + if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause(); + this.emit('pause'); +}; + +CombinedStream.prototype.resume = function() { + if (!this._released) { + this._released = true; + this.writable = true; + this._getNext(); + } + + if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume(); + this.emit('resume'); +}; + +CombinedStream.prototype.end = function() { + this._reset(); + this.emit('end'); +}; + +CombinedStream.prototype.destroy = function() { + this._reset(); + this.emit('close'); +}; + +CombinedStream.prototype._reset = function() { + this.writable = false; + this._streams = []; + this._currentStream = null; +}; + +CombinedStream.prototype._checkDataSize = function() { + this._updateDataSize(); + if (this.dataSize <= this.maxDataSize) { + return; + } + + var message = + 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'; + this._emitError(new Error(message)); +}; + +CombinedStream.prototype._updateDataSize = function() { + this.dataSize = 0; + + var self = this; + this._streams.forEach(function(stream) { + if (!stream.dataSize) { + return; + } + + self.dataSize += stream.dataSize; + }); + + if (this._currentStream && this._currentStream.dataSize) { + this.dataSize += this._currentStream.dataSize; + } +}; + +CombinedStream.prototype._emitError = function(err) { + this._reset(); + this.emit('error', err); +}; + +}).call(this,{"isBuffer":require("../../is-buffer/index.js")}) +},{"../../is-buffer/index.js":839,"./defer.js":128,"delayed-stream":532,"stream":1394,"util":1439}],128:[function(require,module,exports){ +(function (process,setImmediate){ +module.exports = defer; + +/** + * Runs provided function on next iteration of the event loop + * + * @param {function} fn - function to run + */ +function defer(fn) +{ + var nextTick = typeof setImmediate == 'function' + ? setImmediate + : ( + typeof process == 'object' && typeof process.nextTick == 'function' + ? process.nextTick + : null + ); + + if (nextTick) + { + nextTick(fn); + } + else + { + setTimeout(fn, 0); + } +} + +}).call(this,require('_process'),require("timers").setImmediate) +},{"_process":109,"timers":1415}],129:[function(require,module,exports){ +/** + * toString ref. + */ + +var toString = Object.prototype.toString; + +/** + * Return the type of `val`. + * + * @param {Mixed} val + * @return {String} + * @api public + */ + +module.exports = function(val){ + switch (toString.call(val)) { + case '[object Date]': return 'date'; + case '[object RegExp]': return 'regexp'; + case '[object Arguments]': return 'arguments'; + case '[object Array]': return 'array'; + case '[object Error]': return 'error'; + } + + if (val === null) return 'null'; + if (val === undefined) return 'undefined'; + if (val !== val) return 'nan'; + if (val && val.nodeType === 1) return 'element'; + + if (isBuffer(val)) return 'buffer'; + + val = val.valueOf + ? val.valueOf() + : Object.prototype.valueOf.apply(val); + + return typeof val; +}; + +// code borrowed from https://github.com/feross/is-buffer/blob/master/index.js +function isBuffer(obj) { + return !!(obj != null && + (obj._isBuffer || // For Safari 5-7 (missing Object.prototype.constructor) + (obj.constructor && + typeof obj.constructor.isBuffer === 'function' && + obj.constructor.isBuffer(obj)) + )) +} + +},{}],130:[function(require,module,exports){ +var upperCase = require('upper-case') +var snakeCase = require('snake-case') + +/** + * Constant case a string. + * + * @param {string} value + * @param {string} [locale] + * @return {string} + */ +module.exports = function (value, locale) { + return upperCase(snakeCase(value, locale), locale) +} + +},{"snake-case":1362,"upper-case":1430}],131:[function(require,module,exports){ +module.exports={ + "O_RDONLY": 0, + "O_WRONLY": 1, + "O_RDWR": 2, + "S_IFMT": 61440, + "S_IFREG": 32768, + "S_IFDIR": 16384, + "S_IFCHR": 8192, + "S_IFBLK": 24576, + "S_IFIFO": 4096, + "S_IFLNK": 40960, + "S_IFSOCK": 49152, + "O_CREAT": 512, + "O_EXCL": 2048, + "O_NOCTTY": 131072, + "O_TRUNC": 1024, + "O_APPEND": 8, + "O_DIRECTORY": 1048576, + "O_NOFOLLOW": 256, + "O_SYNC": 128, + "O_SYMLINK": 2097152, + "O_NONBLOCK": 4, + "S_IRWXU": 448, + "S_IRUSR": 256, + "S_IWUSR": 128, + "S_IXUSR": 64, + "S_IRWXG": 56, + "S_IRGRP": 32, + "S_IWGRP": 16, + "S_IXGRP": 8, + "S_IRWXO": 7, + "S_IROTH": 4, + "S_IWOTH": 2, + "S_IXOTH": 1, + "E2BIG": 7, + "EACCES": 13, + "EADDRINUSE": 48, + "EADDRNOTAVAIL": 49, + "EAFNOSUPPORT": 47, + "EAGAIN": 35, + "EALREADY": 37, + "EBADF": 9, + "EBADMSG": 94, + "EBUSY": 16, + "ECANCELED": 89, + "ECHILD": 10, + "ECONNABORTED": 53, + "ECONNREFUSED": 61, + "ECONNRESET": 54, + "EDEADLK": 11, + "EDESTADDRREQ": 39, + "EDOM": 33, + "EDQUOT": 69, + "EEXIST": 17, + "EFAULT": 14, + "EFBIG": 27, + "EHOSTUNREACH": 65, + "EIDRM": 90, + "EILSEQ": 92, + "EINPROGRESS": 36, + "EINTR": 4, + "EINVAL": 22, + "EIO": 5, + "EISCONN": 56, + "EISDIR": 21, + "ELOOP": 62, + "EMFILE": 24, + "EMLINK": 31, + "EMSGSIZE": 40, + "EMULTIHOP": 95, + "ENAMETOOLONG": 63, + "ENETDOWN": 50, + "ENETRESET": 52, + "ENETUNREACH": 51, + "ENFILE": 23, + "ENOBUFS": 55, + "ENODATA": 96, + "ENODEV": 19, + "ENOENT": 2, + "ENOEXEC": 8, + "ENOLCK": 77, + "ENOLINK": 97, + "ENOMEM": 12, + "ENOMSG": 91, + "ENOPROTOOPT": 42, + "ENOSPC": 28, + "ENOSR": 98, + "ENOSTR": 99, + "ENOSYS": 78, + "ENOTCONN": 57, + "ENOTDIR": 20, + "ENOTEMPTY": 66, + "ENOTSOCK": 38, + "ENOTSUP": 45, + "ENOTTY": 25, + "ENXIO": 6, + "EOPNOTSUPP": 102, + "EOVERFLOW": 84, + "EPERM": 1, + "EPIPE": 32, + "EPROTO": 100, + "EPROTONOSUPPORT": 43, + "EPROTOTYPE": 41, + "ERANGE": 34, + "EROFS": 30, + "ESPIPE": 29, + "ESRCH": 3, + "ESTALE": 70, + "ETIME": 101, + "ETIMEDOUT": 60, + "ETXTBSY": 26, + "EWOULDBLOCK": 35, + "EXDEV": 18, + "SIGHUP": 1, + "SIGINT": 2, + "SIGQUIT": 3, + "SIGILL": 4, + "SIGTRAP": 5, + "SIGABRT": 6, + "SIGIOT": 6, + "SIGBUS": 10, + "SIGFPE": 8, + "SIGKILL": 9, + "SIGUSR1": 30, + "SIGSEGV": 11, + "SIGUSR2": 31, + "SIGPIPE": 13, + "SIGALRM": 14, + "SIGTERM": 15, + "SIGCHLD": 20, + "SIGCONT": 19, + "SIGSTOP": 17, + "SIGTSTP": 18, + "SIGTTIN": 21, + "SIGTTOU": 22, + "SIGURG": 16, + "SIGXCPU": 24, + "SIGXFSZ": 25, + "SIGVTALRM": 26, + "SIGPROF": 27, + "SIGWINCH": 28, + "SIGIO": 23, + "SIGSYS": 12, + "SSL_OP_ALL": 2147486719, + "SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION": 262144, + "SSL_OP_CIPHER_SERVER_PREFERENCE": 4194304, + "SSL_OP_CISCO_ANYCONNECT": 32768, + "SSL_OP_COOKIE_EXCHANGE": 8192, + "SSL_OP_CRYPTOPRO_TLSEXT_BUG": 2147483648, + "SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS": 2048, + "SSL_OP_EPHEMERAL_RSA": 0, + "SSL_OP_LEGACY_SERVER_CONNECT": 4, + "SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER": 32, + "SSL_OP_MICROSOFT_SESS_ID_BUG": 1, + "SSL_OP_MSIE_SSLV2_RSA_PADDING": 0, + "SSL_OP_NETSCAPE_CA_DN_BUG": 536870912, + "SSL_OP_NETSCAPE_CHALLENGE_BUG": 2, + "SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG": 1073741824, + "SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG": 8, + "SSL_OP_NO_COMPRESSION": 131072, + "SSL_OP_NO_QUERY_MTU": 4096, + "SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION": 65536, + "SSL_OP_NO_SSLv2": 16777216, + "SSL_OP_NO_SSLv3": 33554432, + "SSL_OP_NO_TICKET": 16384, + "SSL_OP_NO_TLSv1": 67108864, + "SSL_OP_NO_TLSv1_1": 268435456, + "SSL_OP_NO_TLSv1_2": 134217728, + "SSL_OP_PKCS1_CHECK_1": 0, + "SSL_OP_PKCS1_CHECK_2": 0, + "SSL_OP_SINGLE_DH_USE": 1048576, + "SSL_OP_SINGLE_ECDH_USE": 524288, + "SSL_OP_SSLEAY_080_CLIENT_DH_BUG": 128, + "SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG": 0, + "SSL_OP_TLS_BLOCK_PADDING_BUG": 512, + "SSL_OP_TLS_D5_BUG": 256, + "SSL_OP_TLS_ROLLBACK_BUG": 8388608, + "ENGINE_METHOD_DSA": 2, + "ENGINE_METHOD_DH": 4, + "ENGINE_METHOD_RAND": 8, + "ENGINE_METHOD_ECDH": 16, + "ENGINE_METHOD_ECDSA": 32, + "ENGINE_METHOD_CIPHERS": 64, + "ENGINE_METHOD_DIGESTS": 128, + "ENGINE_METHOD_STORE": 256, + "ENGINE_METHOD_PKEY_METHS": 512, + "ENGINE_METHOD_PKEY_ASN1_METHS": 1024, + "ENGINE_METHOD_ALL": 65535, + "ENGINE_METHOD_NONE": 0, + "DH_CHECK_P_NOT_SAFE_PRIME": 2, + "DH_CHECK_P_NOT_PRIME": 1, + "DH_UNABLE_TO_CHECK_GENERATOR": 4, + "DH_NOT_SUITABLE_GENERATOR": 8, + "NPN_ENABLED": 1, + "RSA_PKCS1_PADDING": 1, + "RSA_SSLV23_PADDING": 2, + "RSA_NO_PADDING": 3, + "RSA_PKCS1_OAEP_PADDING": 4, + "RSA_X931_PADDING": 5, + "RSA_PKCS1_PSS_PADDING": 6, + "POINT_CONVERSION_COMPRESSED": 2, + "POINT_CONVERSION_UNCOMPRESSED": 4, + "POINT_CONVERSION_HYBRID": 6, + "F_OK": 0, + "R_OK": 4, + "W_OK": 2, + "X_OK": 1, + "UV_UDP_REUSEADDR": 4 +} + +},{}],132:[function(require,module,exports){ +/* jshint node: true */ +(function () { + "use strict"; + + function CookieAccessInfo(domain, path, secure, script) { + if (this instanceof CookieAccessInfo) { + this.domain = domain || undefined; + this.path = path || "/"; + this.secure = !!secure; + this.script = !!script; + return this; + } + return new CookieAccessInfo(domain, path, secure, script); + } + CookieAccessInfo.All = Object.freeze(Object.create(null)); + exports.CookieAccessInfo = CookieAccessInfo; + + function Cookie(cookiestr, request_domain, request_path) { + if (cookiestr instanceof Cookie) { + return cookiestr; + } + if (this instanceof Cookie) { + this.name = null; + this.value = null; + this.expiration_date = Infinity; + this.path = String(request_path || "/"); + this.explicit_path = false; + this.domain = request_domain || null; + this.explicit_domain = false; + this.secure = false; //how to define default? + this.noscript = false; //httponly + if (cookiestr) { + this.parse(cookiestr, request_domain, request_path); + } + return this; + } + return new Cookie(cookiestr, request_domain, request_path); + } + exports.Cookie = Cookie; + + Cookie.prototype.toString = function toString() { + var str = [this.name + "=" + this.value]; + if (this.expiration_date !== Infinity) { + str.push("expires=" + (new Date(this.expiration_date)).toGMTString()); + } + if (this.domain) { + str.push("domain=" + this.domain); + } + if (this.path) { + str.push("path=" + this.path); + } + if (this.secure) { + str.push("secure"); + } + if (this.noscript) { + str.push("httponly"); + } + return str.join("; "); + }; + + Cookie.prototype.toValueString = function toValueString() { + return this.name + "=" + this.value; + }; + + var cookie_str_splitter = /[:](?=\s*[a-zA-Z0-9_\-]+\s*[=])/g; + Cookie.prototype.parse = function parse(str, request_domain, request_path) { + if (this instanceof Cookie) { + var parts = str.split(";").filter(function (value) { + return !!value; + }); + var i; + + var pair = parts[0].match(/([^=]+)=([\s\S]*)/); + if (!pair) { + console.warn("Invalid cookie header encountered. Header: '"+str+"'"); + return; + } + + var key = pair[1]; + var value = pair[2]; + if ( typeof key !== 'string' || key.length === 0 || typeof value !== 'string' ) { + console.warn("Unable to extract values from cookie header. Cookie: '"+str+"'"); + return; + } + + this.name = key; + this.value = value; + + for (i = 1; i < parts.length; i += 1) { + pair = parts[i].match(/([^=]+)(?:=([\s\S]*))?/); + key = pair[1].trim().toLowerCase(); + value = pair[2]; + switch (key) { + case "httponly": + this.noscript = true; + break; + case "expires": + this.expiration_date = value ? + Number(Date.parse(value)) : + Infinity; + break; + case "path": + this.path = value ? + value.trim() : + ""; + this.explicit_path = true; + break; + case "domain": + this.domain = value ? + value.trim() : + ""; + this.explicit_domain = !!this.domain; + break; + case "secure": + this.secure = true; + break; + } + } + + if (!this.explicit_path) { + this.path = request_path || "/"; + } + if (!this.explicit_domain) { + this.domain = request_domain; + } + + return this; + } + return new Cookie().parse(str, request_domain, request_path); + }; + + Cookie.prototype.matches = function matches(access_info) { + if (access_info === CookieAccessInfo.All) { + return true; + } + if (this.noscript && access_info.script || + this.secure && !access_info.secure || + !this.collidesWith(access_info)) { + return false; + } + return true; + }; + + Cookie.prototype.collidesWith = function collidesWith(access_info) { + if ((this.path && !access_info.path) || (this.domain && !access_info.domain)) { + return false; + } + if (this.path && access_info.path.indexOf(this.path) !== 0) { + return false; + } + if (this.explicit_path && access_info.path.indexOf( this.path ) !== 0) { + return false; + } + var access_domain = access_info.domain && access_info.domain.replace(/^[\.]/,''); + var cookie_domain = this.domain && this.domain.replace(/^[\.]/,''); + if (cookie_domain === access_domain) { + return true; + } + if (cookie_domain) { + if (!this.explicit_domain) { + return false; // we already checked if the domains were exactly the same + } + var wildcard = access_domain.indexOf(cookie_domain); + if (wildcard === -1 || wildcard !== access_domain.length - cookie_domain.length) { + return false; + } + return true; + } + return true; + }; + + function CookieJar() { + var cookies, cookies_list, collidable_cookie; + if (this instanceof CookieJar) { + cookies = Object.create(null); //name: [Cookie] + + this.setCookie = function setCookie(cookie, request_domain, request_path) { + var remove, i; + cookie = new Cookie(cookie, request_domain, request_path); + //Delete the cookie if the set is past the current time + remove = cookie.expiration_date <= Date.now(); + if (cookies[cookie.name] !== undefined) { + cookies_list = cookies[cookie.name]; + for (i = 0; i < cookies_list.length; i += 1) { + collidable_cookie = cookies_list[i]; + if (collidable_cookie.collidesWith(cookie)) { + if (remove) { + cookies_list.splice(i, 1); + if (cookies_list.length === 0) { + delete cookies[cookie.name]; + } + return false; + } + cookies_list[i] = cookie; + return cookie; + } + } + if (remove) { + return false; + } + cookies_list.push(cookie); + return cookie; + } + if (remove) { + return false; + } + cookies[cookie.name] = [cookie]; + return cookies[cookie.name]; + }; + //returns a cookie + this.getCookie = function getCookie(cookie_name, access_info) { + var cookie, i; + cookies_list = cookies[cookie_name]; + if (!cookies_list) { + return; + } + for (i = 0; i < cookies_list.length; i += 1) { + cookie = cookies_list[i]; + if (cookie.expiration_date <= Date.now()) { + if (cookies_list.length === 0) { + delete cookies[cookie.name]; + } + continue; + } + + if (cookie.matches(access_info)) { + return cookie; + } + } + }; + //returns a list of cookies + this.getCookies = function getCookies(access_info) { + var matches = [], cookie_name, cookie; + for (cookie_name in cookies) { + cookie = this.getCookie(cookie_name, access_info); + if (cookie) { + matches.push(cookie); + } + } + matches.toString = function toString() { + return matches.join(":"); + }; + matches.toValueString = function toValueString() { + return matches.map(function (c) { + return c.toValueString(); + }).join(';'); + }; + return matches; + }; + + return this; + } + return new CookieJar(); + } + exports.CookieJar = CookieJar; + + //returns list of cookies that were set correctly. Cookies that are expired and removed are not returned. + CookieJar.prototype.setCookies = function setCookies(cookies, request_domain, request_path) { + cookies = Array.isArray(cookies) ? + cookies : + cookies.split(cookie_str_splitter); + var successful = [], + i, + cookie; + cookies = cookies.map(function(item){ + return new Cookie(item, request_domain, request_path); + }); + for (i = 0; i < cookies.length; i += 1) { + cookie = cookies[i]; + if (this.setCookie(cookie, request_domain, request_path)) { + successful.push(cookie); + } + } + return successful; + }; +}()); + +},{}],133:[function(require,module,exports){ +/*! + * copy-descriptor + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +/** + * Copy a descriptor from one object to another. + * + * ```js + * function App() { + * this.cache = {}; + * } + * App.prototype.set = function(key, val) { + * this.cache[key] = val; + * return this; + * }; + * Object.defineProperty(App.prototype, 'count', { + * get: function() { + * return Object.keys(this.cache).length; + * } + * }); + * + * copy(App.prototype, 'count', 'len'); + * + * // create an instance + * var app = new App(); + * + * app.set('a', true); + * app.set('b', true); + * app.set('c', true); + * + * console.log(app.count); + * //=> 3 + * console.log(app.len); + * //=> 3 + * ``` + * @name copy + * @param {Object} `receiver` The target object + * @param {Object} `provider` The provider object + * @param {String} `from` The key to copy on provider. + * @param {String} `to` Optionally specify a new key name to use. + * @return {Object} + * @api public + */ + +module.exports = function copyDescriptor(receiver, provider, from, to) { + if (!isObject(provider) && typeof provider !== 'function') { + to = from; + from = provider; + provider = receiver; + } + if (!isObject(receiver) && typeof receiver !== 'function') { + throw new TypeError('expected the first argument to be an object'); + } + if (!isObject(provider) && typeof provider !== 'function') { + throw new TypeError('expected provider to be an object'); + } + + if (typeof to !== 'string') { + to = from; + } + if (typeof from !== 'string') { + throw new TypeError('expected key to be a string'); + } + + if (!(from in provider)) { + throw new Error('property "' + from + '" does not exist'); + } + + var val = Object.getOwnPropertyDescriptor(provider, from); + if (val) Object.defineProperty(receiver, to, val); +}; + +function isObject(val) { + return {}.toString.call(val) === '[object Object]'; +} + + +},{}],134:[function(require,module,exports){ +'use strict'; +module.exports = input => { + const el = document.createElement('textarea'); + + el.value = input; + + // Prevent keyboard from showing on mobile + el.setAttribute('readonly', ''); + + el.style.contain = 'strict'; + el.style.position = 'absolute'; + el.style.left = '-9999px'; + el.style.fontSize = '12pt'; // Prevent zooming on iOS + + const selection = document.getSelection(); + let originalRange = false; + if (selection.rangeCount > 0) { + originalRange = selection.getRangeAt(0); + } + + document.body.appendChild(el); + el.select(); + + // Explicit selection workaround for iOS + el.selectionStart = 0; + el.selectionEnd = input.length; + + let success = false; + try { + success = document.execCommand('copy'); + } catch (err) {} + + document.body.removeChild(el); + + if (originalRange) { + selection.removeAllRanges(); + selection.addRange(originalRange); + } + + return success; +}; + +},{}],135:[function(require,module,exports){ +require('../../modules/core.regexp.escape'); +module.exports = require('../../modules/_core').RegExp.escape; + +},{"../../modules/_core":157,"../../modules/core.regexp.escape":265}],136:[function(require,module,exports){ +module.exports = function (it) { + if (typeof it != 'function') throw TypeError(it + ' is not a function!'); + return it; +}; + +},{}],137:[function(require,module,exports){ +var cof = require('./_cof'); +module.exports = function (it, msg) { + if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg); + return +it; +}; + +},{"./_cof":152}],138:[function(require,module,exports){ +// 22.1.3.31 Array.prototype[@@unscopables] +var UNSCOPABLES = require('./_wks')('unscopables'); +var ArrayProto = Array.prototype; +if (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {}); +module.exports = function (key) { + ArrayProto[UNSCOPABLES][key] = true; +}; + +},{"./_hide":177,"./_wks":263}],139:[function(require,module,exports){ +'use strict'; +var at = require('./_string-at')(true); + + // `AdvanceStringIndex` abstract operation +// https://tc39.github.io/ecma262/#sec-advancestringindex +module.exports = function (S, index, unicode) { + return index + (unicode ? at(S, index).length : 1); +}; + +},{"./_string-at":240}],140:[function(require,module,exports){ +module.exports = function (it, Constructor, name, forbiddenField) { + if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) { + throw TypeError(name + ': incorrect invocation!'); + } return it; +}; + +},{}],141:[function(require,module,exports){ +var isObject = require('./_is-object'); +module.exports = function (it) { + if (!isObject(it)) throw TypeError(it + ' is not an object!'); + return it; +}; + +},{"./_is-object":186}],142:[function(require,module,exports){ +// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length) +'use strict'; +var toObject = require('./_to-object'); +var toAbsoluteIndex = require('./_to-absolute-index'); +var toLength = require('./_to-length'); + +module.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) { + var O = toObject(this); + var len = toLength(O.length); + var to = toAbsoluteIndex(target, len); + var from = toAbsoluteIndex(start, len); + var end = arguments.length > 2 ? arguments[2] : undefined; + var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to); + var inc = 1; + if (from < to && to < from + count) { + inc = -1; + from += count - 1; + to += count - 1; + } + while (count-- > 0) { + if (from in O) O[to] = O[from]; + else delete O[to]; + to += inc; + from += inc; + } return O; +}; + +},{"./_to-absolute-index":248,"./_to-length":252,"./_to-object":253}],143:[function(require,module,exports){ +// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length) +'use strict'; +var toObject = require('./_to-object'); +var toAbsoluteIndex = require('./_to-absolute-index'); +var toLength = require('./_to-length'); +module.exports = function fill(value /* , start = 0, end = @length */) { + var O = toObject(this); + var length = toLength(O.length); + var aLen = arguments.length; + var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length); + var end = aLen > 2 ? arguments[2] : undefined; + var endPos = end === undefined ? length : toAbsoluteIndex(end, length); + while (endPos > index) O[index++] = value; + return O; +}; + +},{"./_to-absolute-index":248,"./_to-length":252,"./_to-object":253}],144:[function(require,module,exports){ +var forOf = require('./_for-of'); + +module.exports = function (iter, ITERATOR) { + var result = []; + forOf(iter, false, result.push, result, ITERATOR); + return result; +}; + +},{"./_for-of":173}],145:[function(require,module,exports){ +// false -> Array#indexOf +// true -> Array#includes +var toIObject = require('./_to-iobject'); +var toLength = require('./_to-length'); +var toAbsoluteIndex = require('./_to-absolute-index'); +module.exports = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIObject($this); + var length = toLength(O.length); + var index = toAbsoluteIndex(fromIndex, length); + var value; + // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare + if (IS_INCLUDES && el != el) while (length > index) { + value = O[index++]; + // eslint-disable-next-line no-self-compare + if (value != value) return true; + // Array#indexOf ignores holes, Array#includes - not + } else for (;length > index; index++) if (IS_INCLUDES || index in O) { + if (O[index] === el) return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; +}; + +},{"./_to-absolute-index":248,"./_to-iobject":251,"./_to-length":252}],146:[function(require,module,exports){ +// 0 -> Array#forEach +// 1 -> Array#map +// 2 -> Array#filter +// 3 -> Array#some +// 4 -> Array#every +// 5 -> Array#find +// 6 -> Array#findIndex +var ctx = require('./_ctx'); +var IObject = require('./_iobject'); +var toObject = require('./_to-object'); +var toLength = require('./_to-length'); +var asc = require('./_array-species-create'); +module.exports = function (TYPE, $create) { + var IS_MAP = TYPE == 1; + var IS_FILTER = TYPE == 2; + var IS_SOME = TYPE == 3; + var IS_EVERY = TYPE == 4; + var IS_FIND_INDEX = TYPE == 6; + var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; + var create = $create || asc; + return function ($this, callbackfn, that) { + var O = toObject($this); + var self = IObject(O); + var f = ctx(callbackfn, that, 3); + var length = toLength(self.length); + var index = 0; + var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; + var val, res; + for (;length > index; index++) if (NO_HOLES || index in self) { + val = self[index]; + res = f(val, index, O); + if (TYPE) { + if (IS_MAP) result[index] = res; // map + else if (res) switch (TYPE) { + case 3: return true; // some + case 5: return val; // find + case 6: return index; // findIndex + case 2: result.push(val); // filter + } else if (IS_EVERY) return false; // every + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; + }; +}; + +},{"./_array-species-create":149,"./_ctx":159,"./_iobject":182,"./_to-length":252,"./_to-object":253}],147:[function(require,module,exports){ +var aFunction = require('./_a-function'); +var toObject = require('./_to-object'); +var IObject = require('./_iobject'); +var toLength = require('./_to-length'); + +module.exports = function (that, callbackfn, aLen, memo, isRight) { + aFunction(callbackfn); + var O = toObject(that); + var self = IObject(O); + var length = toLength(O.length); + var index = isRight ? length - 1 : 0; + var i = isRight ? -1 : 1; + if (aLen < 2) for (;;) { + if (index in self) { + memo = self[index]; + index += i; + break; + } + index += i; + if (isRight ? index < 0 : length <= index) { + throw TypeError('Reduce of empty array with no initial value'); + } + } + for (;isRight ? index >= 0 : length > index; index += i) if (index in self) { + memo = callbackfn(memo, self[index], index, O); + } + return memo; +}; + +},{"./_a-function":136,"./_iobject":182,"./_to-length":252,"./_to-object":253}],148:[function(require,module,exports){ +var isObject = require('./_is-object'); +var isArray = require('./_is-array'); +var SPECIES = require('./_wks')('species'); + +module.exports = function (original) { + var C; + if (isArray(original)) { + C = original.constructor; + // cross-realm fallback + if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined; + if (isObject(C)) { + C = C[SPECIES]; + if (C === null) C = undefined; + } + } return C === undefined ? Array : C; +}; + +},{"./_is-array":184,"./_is-object":186,"./_wks":263}],149:[function(require,module,exports){ +// 9.4.2.3 ArraySpeciesCreate(originalArray, length) +var speciesConstructor = require('./_array-species-constructor'); + +module.exports = function (original, length) { + return new (speciesConstructor(original))(length); +}; + +},{"./_array-species-constructor":148}],150:[function(require,module,exports){ +'use strict'; +var aFunction = require('./_a-function'); +var isObject = require('./_is-object'); +var invoke = require('./_invoke'); +var arraySlice = [].slice; +var factories = {}; + +var construct = function (F, len, args) { + if (!(len in factories)) { + for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']'; + // eslint-disable-next-line no-new-func + factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')'); + } return factories[len](F, args); +}; + +module.exports = Function.bind || function bind(that /* , ...args */) { + var fn = aFunction(this); + var partArgs = arraySlice.call(arguments, 1); + var bound = function (/* args... */) { + var args = partArgs.concat(arraySlice.call(arguments)); + return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that); + }; + if (isObject(fn.prototype)) bound.prototype = fn.prototype; + return bound; +}; + +},{"./_a-function":136,"./_invoke":181,"./_is-object":186}],151:[function(require,module,exports){ +// getting tag from 19.1.3.6 Object.prototype.toString() +var cof = require('./_cof'); +var TAG = require('./_wks')('toStringTag'); +// ES3 wrong here +var ARG = cof(function () { return arguments; }()) == 'Arguments'; + +// fallback for IE11 Script Access Denied error +var tryGet = function (it, key) { + try { + return it[key]; + } catch (e) { /* empty */ } +}; + +module.exports = function (it) { + var O, T, B; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T + // builtinTag case + : ARG ? cof(O) + // ES3 arguments fallback + : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; +}; + +},{"./_cof":152,"./_wks":263}],152:[function(require,module,exports){ +var toString = {}.toString; + +module.exports = function (it) { + return toString.call(it).slice(8, -1); +}; + +},{}],153:[function(require,module,exports){ +'use strict'; +var dP = require('./_object-dp').f; +var create = require('./_object-create'); +var redefineAll = require('./_redefine-all'); +var ctx = require('./_ctx'); +var anInstance = require('./_an-instance'); +var forOf = require('./_for-of'); +var $iterDefine = require('./_iter-define'); +var step = require('./_iter-step'); +var setSpecies = require('./_set-species'); +var DESCRIPTORS = require('./_descriptors'); +var fastKey = require('./_meta').fastKey; +var validate = require('./_validate-collection'); +var SIZE = DESCRIPTORS ? '_s' : 'size'; + +var getEntry = function (that, key) { + // fast case + var index = fastKey(key); + var entry; + if (index !== 'F') return that._i[index]; + // frozen object case + for (entry = that._f; entry; entry = entry.n) { + if (entry.k == key) return entry; + } +}; + +module.exports = { + getConstructor: function (wrapper, NAME, IS_MAP, ADDER) { + var C = wrapper(function (that, iterable) { + anInstance(that, C, NAME, '_i'); + that._t = NAME; // collection type + that._i = create(null); // index + that._f = undefined; // first entry + that._l = undefined; // last entry + that[SIZE] = 0; // size + if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); + }); + redefineAll(C.prototype, { + // 23.1.3.1 Map.prototype.clear() + // 23.2.3.2 Set.prototype.clear() + clear: function clear() { + for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) { + entry.r = true; + if (entry.p) entry.p = entry.p.n = undefined; + delete data[entry.i]; + } + that._f = that._l = undefined; + that[SIZE] = 0; + }, + // 23.1.3.3 Map.prototype.delete(key) + // 23.2.3.4 Set.prototype.delete(value) + 'delete': function (key) { + var that = validate(this, NAME); + var entry = getEntry(that, key); + if (entry) { + var next = entry.n; + var prev = entry.p; + delete that._i[entry.i]; + entry.r = true; + if (prev) prev.n = next; + if (next) next.p = prev; + if (that._f == entry) that._f = next; + if (that._l == entry) that._l = prev; + that[SIZE]--; + } return !!entry; + }, + // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined) + // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined) + forEach: function forEach(callbackfn /* , that = undefined */) { + validate(this, NAME); + var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + var entry; + while (entry = entry ? entry.n : this._f) { + f(entry.v, entry.k, this); + // revert to the last existing entry + while (entry && entry.r) entry = entry.p; + } + }, + // 23.1.3.7 Map.prototype.has(key) + // 23.2.3.7 Set.prototype.has(value) + has: function has(key) { + return !!getEntry(validate(this, NAME), key); + } + }); + if (DESCRIPTORS) dP(C.prototype, 'size', { + get: function () { + return validate(this, NAME)[SIZE]; + } + }); + return C; + }, + def: function (that, key, value) { + var entry = getEntry(that, key); + var prev, index; + // change existing entry + if (entry) { + entry.v = value; + // create new entry + } else { + that._l = entry = { + i: index = fastKey(key, true), // <- index + k: key, // <- key + v: value, // <- value + p: prev = that._l, // <- previous entry + n: undefined, // <- next entry + r: false // <- removed + }; + if (!that._f) that._f = entry; + if (prev) prev.n = entry; + that[SIZE]++; + // add to index + if (index !== 'F') that._i[index] = entry; + } return that; + }, + getEntry: getEntry, + setStrong: function (C, NAME, IS_MAP) { + // add .keys, .values, .entries, [@@iterator] + // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11 + $iterDefine(C, NAME, function (iterated, kind) { + this._t = validate(iterated, NAME); // target + this._k = kind; // kind + this._l = undefined; // previous + }, function () { + var that = this; + var kind = that._k; + var entry = that._l; + // revert to the last existing entry + while (entry && entry.r) entry = entry.p; + // get next entry + if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) { + // or finish the iteration + that._t = undefined; + return step(1); + } + // return step by kind + if (kind == 'keys') return step(0, entry.k); + if (kind == 'values') return step(0, entry.v); + return step(0, [entry.k, entry.v]); + }, IS_MAP ? 'entries' : 'values', !IS_MAP, true); + + // add [@@species], 23.1.2.2, 23.2.2.2 + setSpecies(NAME); + } +}; + +},{"./_an-instance":140,"./_ctx":159,"./_descriptors":163,"./_for-of":173,"./_iter-define":190,"./_iter-step":192,"./_meta":200,"./_object-create":205,"./_object-dp":206,"./_redefine-all":225,"./_set-species":234,"./_validate-collection":260}],154:[function(require,module,exports){ +// https://github.com/DavidBruant/Map-Set.prototype.toJSON +var classof = require('./_classof'); +var from = require('./_array-from-iterable'); +module.exports = function (NAME) { + return function toJSON() { + if (classof(this) != NAME) throw TypeError(NAME + "#toJSON isn't generic"); + return from(this); + }; +}; + +},{"./_array-from-iterable":144,"./_classof":151}],155:[function(require,module,exports){ +'use strict'; +var redefineAll = require('./_redefine-all'); +var getWeak = require('./_meta').getWeak; +var anObject = require('./_an-object'); +var isObject = require('./_is-object'); +var anInstance = require('./_an-instance'); +var forOf = require('./_for-of'); +var createArrayMethod = require('./_array-methods'); +var $has = require('./_has'); +var validate = require('./_validate-collection'); +var arrayFind = createArrayMethod(5); +var arrayFindIndex = createArrayMethod(6); +var id = 0; + +// fallback for uncaught frozen keys +var uncaughtFrozenStore = function (that) { + return that._l || (that._l = new UncaughtFrozenStore()); +}; +var UncaughtFrozenStore = function () { + this.a = []; +}; +var findUncaughtFrozen = function (store, key) { + return arrayFind(store.a, function (it) { + return it[0] === key; + }); +}; +UncaughtFrozenStore.prototype = { + get: function (key) { + var entry = findUncaughtFrozen(this, key); + if (entry) return entry[1]; + }, + has: function (key) { + return !!findUncaughtFrozen(this, key); + }, + set: function (key, value) { + var entry = findUncaughtFrozen(this, key); + if (entry) entry[1] = value; + else this.a.push([key, value]); + }, + 'delete': function (key) { + var index = arrayFindIndex(this.a, function (it) { + return it[0] === key; + }); + if (~index) this.a.splice(index, 1); + return !!~index; + } +}; + +module.exports = { + getConstructor: function (wrapper, NAME, IS_MAP, ADDER) { + var C = wrapper(function (that, iterable) { + anInstance(that, C, NAME, '_i'); + that._t = NAME; // collection type + that._i = id++; // collection id + that._l = undefined; // leak store for uncaught frozen objects + if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); + }); + redefineAll(C.prototype, { + // 23.3.3.2 WeakMap.prototype.delete(key) + // 23.4.3.3 WeakSet.prototype.delete(value) + 'delete': function (key) { + if (!isObject(key)) return false; + var data = getWeak(key); + if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key); + return data && $has(data, this._i) && delete data[this._i]; + }, + // 23.3.3.4 WeakMap.prototype.has(key) + // 23.4.3.4 WeakSet.prototype.has(value) + has: function has(key) { + if (!isObject(key)) return false; + var data = getWeak(key); + if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key); + return data && $has(data, this._i); + } + }); + return C; + }, + def: function (that, key, value) { + var data = getWeak(anObject(key), true); + if (data === true) uncaughtFrozenStore(that).set(key, value); + else data[that._i] = value; + return that; + }, + ufstore: uncaughtFrozenStore +}; + +},{"./_an-instance":140,"./_an-object":141,"./_array-methods":146,"./_for-of":173,"./_has":176,"./_is-object":186,"./_meta":200,"./_redefine-all":225,"./_validate-collection":260}],156:[function(require,module,exports){ +'use strict'; +var global = require('./_global'); +var $export = require('./_export'); +var redefine = require('./_redefine'); +var redefineAll = require('./_redefine-all'); +var meta = require('./_meta'); +var forOf = require('./_for-of'); +var anInstance = require('./_an-instance'); +var isObject = require('./_is-object'); +var fails = require('./_fails'); +var $iterDetect = require('./_iter-detect'); +var setToStringTag = require('./_set-to-string-tag'); +var inheritIfRequired = require('./_inherit-if-required'); + +module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) { + var Base = global[NAME]; + var C = Base; + var ADDER = IS_MAP ? 'set' : 'add'; + var proto = C && C.prototype; + var O = {}; + var fixMethod = function (KEY) { + var fn = proto[KEY]; + redefine(proto, KEY, + KEY == 'delete' ? function (a) { + return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); + } : KEY == 'has' ? function has(a) { + return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); + } : KEY == 'get' ? function get(a) { + return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a); + } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; } + : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; } + ); + }; + if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () { + new C().entries().next(); + }))) { + // create collection constructor + C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER); + redefineAll(C.prototype, methods); + meta.NEED = true; + } else { + var instance = new C(); + // early implementations not supports chaining + var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance; + // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false + var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); }); + // most early implementations doesn't supports iterables, most modern - not close it correctly + var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new + // for early implementations -0 and +0 not the same + var BUGGY_ZERO = !IS_WEAK && fails(function () { + // V8 ~ Chromium 42- fails only with 5+ elements + var $instance = new C(); + var index = 5; + while (index--) $instance[ADDER](index, index); + return !$instance.has(-0); + }); + if (!ACCEPT_ITERABLES) { + C = wrapper(function (target, iterable) { + anInstance(target, C, NAME); + var that = inheritIfRequired(new Base(), target, C); + if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); + return that; + }); + C.prototype = proto; + proto.constructor = C; + } + if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) { + fixMethod('delete'); + fixMethod('has'); + IS_MAP && fixMethod('get'); + } + if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER); + // weak collections should not contains .clear method + if (IS_WEAK && proto.clear) delete proto.clear; + } + + setToStringTag(C, NAME); + + O[NAME] = C; + $export($export.G + $export.W + $export.F * (C != Base), O); + + if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP); + + return C; +}; + +},{"./_an-instance":140,"./_export":167,"./_fails":169,"./_for-of":173,"./_global":175,"./_inherit-if-required":180,"./_is-object":186,"./_iter-detect":191,"./_meta":200,"./_redefine":226,"./_redefine-all":225,"./_set-to-string-tag":235}],157:[function(require,module,exports){ +var core = module.exports = { version: '2.6.5' }; +if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef + +},{}],158:[function(require,module,exports){ +'use strict'; +var $defineProperty = require('./_object-dp'); +var createDesc = require('./_property-desc'); + +module.exports = function (object, index, value) { + if (index in object) $defineProperty.f(object, index, createDesc(0, value)); + else object[index] = value; +}; + +},{"./_object-dp":206,"./_property-desc":224}],159:[function(require,module,exports){ +// optional / simple context binding +var aFunction = require('./_a-function'); +module.exports = function (fn, that, length) { + aFunction(fn); + if (that === undefined) return fn; + switch (length) { + case 1: return function (a) { + return fn.call(that, a); + }; + case 2: return function (a, b) { + return fn.call(that, a, b); + }; + case 3: return function (a, b, c) { + return fn.call(that, a, b, c); + }; + } + return function (/* ...args */) { + return fn.apply(that, arguments); + }; +}; + +},{"./_a-function":136}],160:[function(require,module,exports){ +'use strict'; +// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString() +var fails = require('./_fails'); +var getTime = Date.prototype.getTime; +var $toISOString = Date.prototype.toISOString; + +var lz = function (num) { + return num > 9 ? num : '0' + num; +}; + +// PhantomJS / old WebKit has a broken implementations +module.exports = (fails(function () { + return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z'; +}) || !fails(function () { + $toISOString.call(new Date(NaN)); +})) ? function toISOString() { + if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value'); + var d = this; + var y = d.getUTCFullYear(); + var m = d.getUTCMilliseconds(); + var s = y < 0 ? '-' : y > 9999 ? '+' : ''; + return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) + + '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) + + 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) + + ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z'; +} : $toISOString; + +},{"./_fails":169}],161:[function(require,module,exports){ +'use strict'; +var anObject = require('./_an-object'); +var toPrimitive = require('./_to-primitive'); +var NUMBER = 'number'; + +module.exports = function (hint) { + if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint'); + return toPrimitive(anObject(this), hint != NUMBER); +}; + +},{"./_an-object":141,"./_to-primitive":254}],162:[function(require,module,exports){ +// 7.2.1 RequireObjectCoercible(argument) +module.exports = function (it) { + if (it == undefined) throw TypeError("Can't call method on " + it); + return it; +}; + +},{}],163:[function(require,module,exports){ +// Thank's IE8 for his funny defineProperty +module.exports = !require('./_fails')(function () { + return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; +}); + +},{"./_fails":169}],164:[function(require,module,exports){ +var isObject = require('./_is-object'); +var document = require('./_global').document; +// typeof document.createElement is 'object' in old IE +var is = isObject(document) && isObject(document.createElement); +module.exports = function (it) { + return is ? document.createElement(it) : {}; +}; + +},{"./_global":175,"./_is-object":186}],165:[function(require,module,exports){ +// IE 8- don't enum bug keys +module.exports = ( + 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf' +).split(','); + +},{}],166:[function(require,module,exports){ +// all enumerable object keys, includes symbols +var getKeys = require('./_object-keys'); +var gOPS = require('./_object-gops'); +var pIE = require('./_object-pie'); +module.exports = function (it) { + var result = getKeys(it); + var getSymbols = gOPS.f; + if (getSymbols) { + var symbols = getSymbols(it); + var isEnum = pIE.f; + var i = 0; + var key; + while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key); + } return result; +}; + +},{"./_object-gops":212,"./_object-keys":215,"./_object-pie":216}],167:[function(require,module,exports){ +var global = require('./_global'); +var core = require('./_core'); +var hide = require('./_hide'); +var redefine = require('./_redefine'); +var ctx = require('./_ctx'); +var PROTOTYPE = 'prototype'; + +var $export = function (type, name, source) { + var IS_FORCED = type & $export.F; + var IS_GLOBAL = type & $export.G; + var IS_STATIC = type & $export.S; + var IS_PROTO = type & $export.P; + var IS_BIND = type & $export.B; + var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE]; + var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); + var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {}); + var key, own, out, exp; + if (IS_GLOBAL) source = name; + for (key in source) { + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + // export native or passed + out = (own ? target : source)[key]; + // bind timers to global for call from export context + exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; + // extend global + if (target) redefine(target, key, out, type & $export.U); + // export + if (exports[key] != out) hide(exports, key, exp); + if (IS_PROTO && expProto[key] != out) expProto[key] = out; + } +}; +global.core = core; +// type bitmap +$export.F = 1; // forced +$export.G = 2; // global +$export.S = 4; // static +$export.P = 8; // proto +$export.B = 16; // bind +$export.W = 32; // wrap +$export.U = 64; // safe +$export.R = 128; // real proto method for `library` +module.exports = $export; + +},{"./_core":157,"./_ctx":159,"./_global":175,"./_hide":177,"./_redefine":226}],168:[function(require,module,exports){ +var MATCH = require('./_wks')('match'); +module.exports = function (KEY) { + var re = /./; + try { + '/./'[KEY](re); + } catch (e) { + try { + re[MATCH] = false; + return !'/./'[KEY](re); + } catch (f) { /* empty */ } + } return true; +}; + +},{"./_wks":263}],169:[function(require,module,exports){ +module.exports = function (exec) { + try { + return !!exec(); + } catch (e) { + return true; + } +}; + +},{}],170:[function(require,module,exports){ +'use strict'; +require('./es6.regexp.exec'); +var redefine = require('./_redefine'); +var hide = require('./_hide'); +var fails = require('./_fails'); +var defined = require('./_defined'); +var wks = require('./_wks'); +var regexpExec = require('./_regexp-exec'); + +var SPECIES = wks('species'); + +var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () { + // #replace needs built-in support for named groups. + // #match works fine because it just return the exec results, even if it has + // a "grops" property. + var re = /./; + re.exec = function () { + var result = []; + result.groups = { a: '7' }; + return result; + }; + return ''.replace(re, '$
') !== '7'; +}); + +var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () { + // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec + var re = /(?:)/; + var originalExec = re.exec; + re.exec = function () { return originalExec.apply(this, arguments); }; + var result = 'ab'.split(re); + return result.length === 2 && result[0] === 'a' && result[1] === 'b'; +})(); + +module.exports = function (KEY, length, exec) { + var SYMBOL = wks(KEY); + + var DELEGATES_TO_SYMBOL = !fails(function () { + // String methods call symbol-named RegEp methods + var O = {}; + O[SYMBOL] = function () { return 7; }; + return ''[KEY](O) != 7; + }); + + var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () { + // Symbol-named RegExp methods call .exec + var execCalled = false; + var re = /a/; + re.exec = function () { execCalled = true; return null; }; + if (KEY === 'split') { + // RegExp[@@split] doesn't call the regex's exec method, but first creates + // a new one. We need to return the patched regex when creating the new one. + re.constructor = {}; + re.constructor[SPECIES] = function () { return re; }; + } + re[SYMBOL](''); + return !execCalled; + }) : undefined; + + if ( + !DELEGATES_TO_SYMBOL || + !DELEGATES_TO_EXEC || + (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) || + (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC) + ) { + var nativeRegExpMethod = /./[SYMBOL]; + var fns = exec( + defined, + SYMBOL, + ''[KEY], + function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) { + if (regexp.exec === regexpExec) { + if (DELEGATES_TO_SYMBOL && !forceStringMethod) { + // The native String method already delegates to @@method (this + // polyfilled function), leasing to infinite recursion. + // We avoid it by directly calling the native @@method method. + return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) }; + } + return { done: true, value: nativeMethod.call(str, regexp, arg2) }; + } + return { done: false }; + } + ); + var strfn = fns[0]; + var rxfn = fns[1]; + + redefine(String.prototype, KEY, strfn); + hide(RegExp.prototype, SYMBOL, length == 2 + // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue) + // 21.2.5.11 RegExp.prototype[@@split](string, limit) + ? function (string, arg) { return rxfn.call(string, this, arg); } + // 21.2.5.6 RegExp.prototype[@@match](string) + // 21.2.5.9 RegExp.prototype[@@search](string) + : function (string) { return rxfn.call(string, this); } + ); + } +}; + +},{"./_defined":162,"./_fails":169,"./_hide":177,"./_redefine":226,"./_regexp-exec":228,"./_wks":263,"./es6.regexp.exec":360}],171:[function(require,module,exports){ +'use strict'; +// 21.2.5.3 get RegExp.prototype.flags +var anObject = require('./_an-object'); +module.exports = function () { + var that = anObject(this); + var result = ''; + if (that.global) result += 'g'; + if (that.ignoreCase) result += 'i'; + if (that.multiline) result += 'm'; + if (that.unicode) result += 'u'; + if (that.sticky) result += 'y'; + return result; +}; + +},{"./_an-object":141}],172:[function(require,module,exports){ +'use strict'; +// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray +var isArray = require('./_is-array'); +var isObject = require('./_is-object'); +var toLength = require('./_to-length'); +var ctx = require('./_ctx'); +var IS_CONCAT_SPREADABLE = require('./_wks')('isConcatSpreadable'); + +function flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) { + var targetIndex = start; + var sourceIndex = 0; + var mapFn = mapper ? ctx(mapper, thisArg, 3) : false; + var element, spreadable; + + while (sourceIndex < sourceLen) { + if (sourceIndex in source) { + element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex]; + + spreadable = false; + if (isObject(element)) { + spreadable = element[IS_CONCAT_SPREADABLE]; + spreadable = spreadable !== undefined ? !!spreadable : isArray(element); + } + + if (spreadable && depth > 0) { + targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1; + } else { + if (targetIndex >= 0x1fffffffffffff) throw TypeError(); + target[targetIndex] = element; + } + + targetIndex++; + } + sourceIndex++; + } + return targetIndex; +} + +module.exports = flattenIntoArray; + +},{"./_ctx":159,"./_is-array":184,"./_is-object":186,"./_to-length":252,"./_wks":263}],173:[function(require,module,exports){ +var ctx = require('./_ctx'); +var call = require('./_iter-call'); +var isArrayIter = require('./_is-array-iter'); +var anObject = require('./_an-object'); +var toLength = require('./_to-length'); +var getIterFn = require('./core.get-iterator-method'); +var BREAK = {}; +var RETURN = {}; +var exports = module.exports = function (iterable, entries, fn, that, ITERATOR) { + var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable); + var f = ctx(fn, that, entries ? 2 : 1); + var index = 0; + var length, step, iterator, result; + if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!'); + // fast case for arrays with default iterator + if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) { + result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]); + if (result === BREAK || result === RETURN) return result; + } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) { + result = call(iterator, f, step.value, entries); + if (result === BREAK || result === RETURN) return result; + } +}; +exports.BREAK = BREAK; +exports.RETURN = RETURN; + +},{"./_an-object":141,"./_ctx":159,"./_is-array-iter":183,"./_iter-call":188,"./_to-length":252,"./core.get-iterator-method":264}],174:[function(require,module,exports){ +module.exports = require('./_shared')('native-function-to-string', Function.toString); + +},{"./_shared":237}],175:[function(require,module,exports){ +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self + // eslint-disable-next-line no-new-func + : Function('return this')(); +if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef + +},{}],176:[function(require,module,exports){ +var hasOwnProperty = {}.hasOwnProperty; +module.exports = function (it, key) { + return hasOwnProperty.call(it, key); +}; + +},{}],177:[function(require,module,exports){ +var dP = require('./_object-dp'); +var createDesc = require('./_property-desc'); +module.exports = require('./_descriptors') ? function (object, key, value) { + return dP.f(object, key, createDesc(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; + +},{"./_descriptors":163,"./_object-dp":206,"./_property-desc":224}],178:[function(require,module,exports){ +var document = require('./_global').document; +module.exports = document && document.documentElement; + +},{"./_global":175}],179:[function(require,module,exports){ +module.exports = !require('./_descriptors') && !require('./_fails')(function () { + return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7; +}); + +},{"./_descriptors":163,"./_dom-create":164,"./_fails":169}],180:[function(require,module,exports){ +var isObject = require('./_is-object'); +var setPrototypeOf = require('./_set-proto').set; +module.exports = function (that, target, C) { + var S = target.constructor; + var P; + if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) { + setPrototypeOf(that, P); + } return that; +}; + +},{"./_is-object":186,"./_set-proto":233}],181:[function(require,module,exports){ +// fast apply, http://jsperf.lnkit.com/fast-apply/5 +module.exports = function (fn, args, that) { + var un = that === undefined; + switch (args.length) { + case 0: return un ? fn() + : fn.call(that); + case 1: return un ? fn(args[0]) + : fn.call(that, args[0]); + case 2: return un ? fn(args[0], args[1]) + : fn.call(that, args[0], args[1]); + case 3: return un ? fn(args[0], args[1], args[2]) + : fn.call(that, args[0], args[1], args[2]); + case 4: return un ? fn(args[0], args[1], args[2], args[3]) + : fn.call(that, args[0], args[1], args[2], args[3]); + } return fn.apply(that, args); +}; + +},{}],182:[function(require,module,exports){ +// fallback for non-array-like ES3 and non-enumerable old V8 strings +var cof = require('./_cof'); +// eslint-disable-next-line no-prototype-builtins +module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) { + return cof(it) == 'String' ? it.split('') : Object(it); +}; + +},{"./_cof":152}],183:[function(require,module,exports){ +// check on default Array iterator +var Iterators = require('./_iterators'); +var ITERATOR = require('./_wks')('iterator'); +var ArrayProto = Array.prototype; + +module.exports = function (it) { + return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it); +}; + +},{"./_iterators":193,"./_wks":263}],184:[function(require,module,exports){ +// 7.2.2 IsArray(argument) +var cof = require('./_cof'); +module.exports = Array.isArray || function isArray(arg) { + return cof(arg) == 'Array'; +}; + +},{"./_cof":152}],185:[function(require,module,exports){ +// 20.1.2.3 Number.isInteger(number) +var isObject = require('./_is-object'); +var floor = Math.floor; +module.exports = function isInteger(it) { + return !isObject(it) && isFinite(it) && floor(it) === it; +}; + +},{"./_is-object":186}],186:[function(require,module,exports){ +module.exports = function (it) { + return typeof it === 'object' ? it !== null : typeof it === 'function'; +}; + +},{}],187:[function(require,module,exports){ +// 7.2.8 IsRegExp(argument) +var isObject = require('./_is-object'); +var cof = require('./_cof'); +var MATCH = require('./_wks')('match'); +module.exports = function (it) { + var isRegExp; + return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp'); +}; + +},{"./_cof":152,"./_is-object":186,"./_wks":263}],188:[function(require,module,exports){ +// call something on iterator step with safe closing on error +var anObject = require('./_an-object'); +module.exports = function (iterator, fn, value, entries) { + try { + return entries ? fn(anObject(value)[0], value[1]) : fn(value); + // 7.4.6 IteratorClose(iterator, completion) + } catch (e) { + var ret = iterator['return']; + if (ret !== undefined) anObject(ret.call(iterator)); + throw e; + } +}; + +},{"./_an-object":141}],189:[function(require,module,exports){ +'use strict'; +var create = require('./_object-create'); +var descriptor = require('./_property-desc'); +var setToStringTag = require('./_set-to-string-tag'); +var IteratorPrototype = {}; + +// 25.1.2.1.1 %IteratorPrototype%[@@iterator]() +require('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; }); + +module.exports = function (Constructor, NAME, next) { + Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) }); + setToStringTag(Constructor, NAME + ' Iterator'); +}; + +},{"./_hide":177,"./_object-create":205,"./_property-desc":224,"./_set-to-string-tag":235,"./_wks":263}],190:[function(require,module,exports){ +'use strict'; +var LIBRARY = require('./_library'); +var $export = require('./_export'); +var redefine = require('./_redefine'); +var hide = require('./_hide'); +var Iterators = require('./_iterators'); +var $iterCreate = require('./_iter-create'); +var setToStringTag = require('./_set-to-string-tag'); +var getPrototypeOf = require('./_object-gpo'); +var ITERATOR = require('./_wks')('iterator'); +var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next` +var FF_ITERATOR = '@@iterator'; +var KEYS = 'keys'; +var VALUES = 'values'; + +var returnThis = function () { return this; }; + +module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) { + $iterCreate(Constructor, NAME, next); + var getMethod = function (kind) { + if (!BUGGY && kind in proto) return proto[kind]; + switch (kind) { + case KEYS: return function keys() { return new Constructor(this, kind); }; + case VALUES: return function values() { return new Constructor(this, kind); }; + } return function entries() { return new Constructor(this, kind); }; + }; + var TAG = NAME + ' Iterator'; + var DEF_VALUES = DEFAULT == VALUES; + var VALUES_BUG = false; + var proto = Base.prototype; + var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]; + var $default = $native || getMethod(DEFAULT); + var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined; + var $anyNative = NAME == 'Array' ? proto.entries || $native : $native; + var methods, key, IteratorPrototype; + // Fix native + if ($anyNative) { + IteratorPrototype = getPrototypeOf($anyNative.call(new Base())); + if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) { + // Set @@toStringTag to native iterators + setToStringTag(IteratorPrototype, TAG, true); + // fix for some old engines + if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis); + } + } + // fix Array#{values, @@iterator}.name in V8 / FF + if (DEF_VALUES && $native && $native.name !== VALUES) { + VALUES_BUG = true; + $default = function values() { return $native.call(this); }; + } + // Define iterator + if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) { + hide(proto, ITERATOR, $default); + } + // Plug for library + Iterators[NAME] = $default; + Iterators[TAG] = returnThis; + if (DEFAULT) { + methods = { + values: DEF_VALUES ? $default : getMethod(VALUES), + keys: IS_SET ? $default : getMethod(KEYS), + entries: $entries + }; + if (FORCED) for (key in methods) { + if (!(key in proto)) redefine(proto, key, methods[key]); + } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods); + } + return methods; +}; + +},{"./_export":167,"./_hide":177,"./_iter-create":189,"./_iterators":193,"./_library":194,"./_object-gpo":213,"./_redefine":226,"./_set-to-string-tag":235,"./_wks":263}],191:[function(require,module,exports){ +var ITERATOR = require('./_wks')('iterator'); +var SAFE_CLOSING = false; + +try { + var riter = [7][ITERATOR](); + riter['return'] = function () { SAFE_CLOSING = true; }; + // eslint-disable-next-line no-throw-literal + Array.from(riter, function () { throw 2; }); +} catch (e) { /* empty */ } + +module.exports = function (exec, skipClosing) { + if (!skipClosing && !SAFE_CLOSING) return false; + var safe = false; + try { + var arr = [7]; + var iter = arr[ITERATOR](); + iter.next = function () { return { done: safe = true }; }; + arr[ITERATOR] = function () { return iter; }; + exec(arr); + } catch (e) { /* empty */ } + return safe; +}; + +},{"./_wks":263}],192:[function(require,module,exports){ +module.exports = function (done, value) { + return { value: value, done: !!done }; +}; + +},{}],193:[function(require,module,exports){ +module.exports = {}; + +},{}],194:[function(require,module,exports){ +module.exports = false; + +},{}],195:[function(require,module,exports){ +// 20.2.2.14 Math.expm1(x) +var $expm1 = Math.expm1; +module.exports = (!$expm1 + // Old FF bug + || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168 + // Tor Browser bug + || $expm1(-2e-17) != -2e-17 +) ? function expm1(x) { + return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1; +} : $expm1; + +},{}],196:[function(require,module,exports){ +// 20.2.2.16 Math.fround(x) +var sign = require('./_math-sign'); +var pow = Math.pow; +var EPSILON = pow(2, -52); +var EPSILON32 = pow(2, -23); +var MAX32 = pow(2, 127) * (2 - EPSILON32); +var MIN32 = pow(2, -126); + +var roundTiesToEven = function (n) { + return n + 1 / EPSILON - 1 / EPSILON; +}; + +module.exports = Math.fround || function fround(x) { + var $abs = Math.abs(x); + var $sign = sign(x); + var a, result; + if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32; + a = (1 + EPSILON32 / EPSILON) * $abs; + result = a - (a - $abs); + // eslint-disable-next-line no-self-compare + if (result > MAX32 || result != result) return $sign * Infinity; + return $sign * result; +}; + +},{"./_math-sign":199}],197:[function(require,module,exports){ +// 20.2.2.20 Math.log1p(x) +module.exports = Math.log1p || function log1p(x) { + return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x); +}; + +},{}],198:[function(require,module,exports){ +// https://rwaldron.github.io/proposal-math-extensions/ +module.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) { + if ( + arguments.length === 0 + // eslint-disable-next-line no-self-compare + || x != x + // eslint-disable-next-line no-self-compare + || inLow != inLow + // eslint-disable-next-line no-self-compare + || inHigh != inHigh + // eslint-disable-next-line no-self-compare + || outLow != outLow + // eslint-disable-next-line no-self-compare + || outHigh != outHigh + ) return NaN; + if (x === Infinity || x === -Infinity) return x; + return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow; +}; + +},{}],199:[function(require,module,exports){ +// 20.2.2.28 Math.sign(x) +module.exports = Math.sign || function sign(x) { + // eslint-disable-next-line no-self-compare + return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1; +}; + +},{}],200:[function(require,module,exports){ +var META = require('./_uid')('meta'); +var isObject = require('./_is-object'); +var has = require('./_has'); +var setDesc = require('./_object-dp').f; +var id = 0; +var isExtensible = Object.isExtensible || function () { + return true; +}; +var FREEZE = !require('./_fails')(function () { + return isExtensible(Object.preventExtensions({})); +}); +var setMeta = function (it) { + setDesc(it, META, { value: { + i: 'O' + ++id, // object ID + w: {} // weak collections IDs + } }); +}; +var fastKey = function (it, create) { + // return primitive with prefix + if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; + if (!has(it, META)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return 'F'; + // not necessary to add metadata + if (!create) return 'E'; + // add missing metadata + setMeta(it); + // return object ID + } return it[META].i; +}; +var getWeak = function (it, create) { + if (!has(it, META)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return true; + // not necessary to add metadata + if (!create) return false; + // add missing metadata + setMeta(it); + // return hash weak collections IDs + } return it[META].w; +}; +// add metadata on freeze-family methods calling +var onFreeze = function (it) { + if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it); + return it; +}; +var meta = module.exports = { + KEY: META, + NEED: false, + fastKey: fastKey, + getWeak: getWeak, + onFreeze: onFreeze +}; + +},{"./_fails":169,"./_has":176,"./_is-object":186,"./_object-dp":206,"./_uid":258}],201:[function(require,module,exports){ +var Map = require('./es6.map'); +var $export = require('./_export'); +var shared = require('./_shared')('metadata'); +var store = shared.store || (shared.store = new (require('./es6.weak-map'))()); + +var getOrCreateMetadataMap = function (target, targetKey, create) { + var targetMetadata = store.get(target); + if (!targetMetadata) { + if (!create) return undefined; + store.set(target, targetMetadata = new Map()); + } + var keyMetadata = targetMetadata.get(targetKey); + if (!keyMetadata) { + if (!create) return undefined; + targetMetadata.set(targetKey, keyMetadata = new Map()); + } return keyMetadata; +}; +var ordinaryHasOwnMetadata = function (MetadataKey, O, P) { + var metadataMap = getOrCreateMetadataMap(O, P, false); + return metadataMap === undefined ? false : metadataMap.has(MetadataKey); +}; +var ordinaryGetOwnMetadata = function (MetadataKey, O, P) { + var metadataMap = getOrCreateMetadataMap(O, P, false); + return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey); +}; +var ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) { + getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue); +}; +var ordinaryOwnMetadataKeys = function (target, targetKey) { + var metadataMap = getOrCreateMetadataMap(target, targetKey, false); + var keys = []; + if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); }); + return keys; +}; +var toMetaKey = function (it) { + return it === undefined || typeof it == 'symbol' ? it : String(it); +}; +var exp = function (O) { + $export($export.S, 'Reflect', O); +}; + +module.exports = { + store: store, + map: getOrCreateMetadataMap, + has: ordinaryHasOwnMetadata, + get: ordinaryGetOwnMetadata, + set: ordinaryDefineOwnMetadata, + keys: ordinaryOwnMetadataKeys, + key: toMetaKey, + exp: exp +}; + +},{"./_export":167,"./_shared":237,"./es6.map":295,"./es6.weak-map":402}],202:[function(require,module,exports){ +var global = require('./_global'); +var macrotask = require('./_task').set; +var Observer = global.MutationObserver || global.WebKitMutationObserver; +var process = global.process; +var Promise = global.Promise; +var isNode = require('./_cof')(process) == 'process'; + +module.exports = function () { + var head, last, notify; + + var flush = function () { + var parent, fn; + if (isNode && (parent = process.domain)) parent.exit(); + while (head) { + fn = head.fn; + head = head.next; + try { + fn(); + } catch (e) { + if (head) notify(); + else last = undefined; + throw e; + } + } last = undefined; + if (parent) parent.enter(); + }; + + // Node.js + if (isNode) { + notify = function () { + process.nextTick(flush); + }; + // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339 + } else if (Observer && !(global.navigator && global.navigator.standalone)) { + var toggle = true; + var node = document.createTextNode(''); + new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new + notify = function () { + node.data = toggle = !toggle; + }; + // environments with maybe non-completely correct, but existent Promise + } else if (Promise && Promise.resolve) { + // Promise.resolve without an argument throws an error in LG WebOS 2 + var promise = Promise.resolve(undefined); + notify = function () { + promise.then(flush); + }; + // for other environments - macrotask based on: + // - setImmediate + // - MessageChannel + // - window.postMessag + // - onreadystatechange + // - setTimeout + } else { + notify = function () { + // strange IE + webpack dev server bug - use .call(global) + macrotask.call(global, flush); + }; + } + + return function (fn) { + var task = { fn: fn, next: undefined }; + if (last) last.next = task; + if (!head) { + head = task; + notify(); + } last = task; + }; +}; + +},{"./_cof":152,"./_global":175,"./_task":247}],203:[function(require,module,exports){ +'use strict'; +// 25.4.1.5 NewPromiseCapability(C) +var aFunction = require('./_a-function'); + +function PromiseCapability(C) { + var resolve, reject; + this.promise = new C(function ($$resolve, $$reject) { + if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); + resolve = $$resolve; + reject = $$reject; + }); + this.resolve = aFunction(resolve); + this.reject = aFunction(reject); +} + +module.exports.f = function (C) { + return new PromiseCapability(C); +}; + +},{"./_a-function":136}],204:[function(require,module,exports){ +'use strict'; +// 19.1.2.1 Object.assign(target, source, ...) +var getKeys = require('./_object-keys'); +var gOPS = require('./_object-gops'); +var pIE = require('./_object-pie'); +var toObject = require('./_to-object'); +var IObject = require('./_iobject'); +var $assign = Object.assign; + +// should work with symbols and should have deterministic property order (V8 bug) +module.exports = !$assign || require('./_fails')(function () { + var A = {}; + var B = {}; + // eslint-disable-next-line no-undef + var S = Symbol(); + var K = 'abcdefghijklmnopqrst'; + A[S] = 7; + K.split('').forEach(function (k) { B[k] = k; }); + return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K; +}) ? function assign(target, source) { // eslint-disable-line no-unused-vars + var T = toObject(target); + var aLen = arguments.length; + var index = 1; + var getSymbols = gOPS.f; + var isEnum = pIE.f; + while (aLen > index) { + var S = IObject(arguments[index++]); + var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S); + var length = keys.length; + var j = 0; + var key; + while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key]; + } return T; +} : $assign; + +},{"./_fails":169,"./_iobject":182,"./_object-gops":212,"./_object-keys":215,"./_object-pie":216,"./_to-object":253}],205:[function(require,module,exports){ +// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) +var anObject = require('./_an-object'); +var dPs = require('./_object-dps'); +var enumBugKeys = require('./_enum-bug-keys'); +var IE_PROTO = require('./_shared-key')('IE_PROTO'); +var Empty = function () { /* empty */ }; +var PROTOTYPE = 'prototype'; + +// Create object with fake `null` prototype: use iframe Object with cleared prototype +var createDict = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = require('./_dom-create')('iframe'); + var i = enumBugKeys.length; + var lt = '<'; + var gt = '>'; + var iframeDocument; + iframe.style.display = 'none'; + require('./_html').appendChild(iframe); + iframe.src = 'javascript:'; // eslint-disable-line no-script-url + // createDict = iframe.contentWindow.Object; + // html.removeChild(iframe); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt); + iframeDocument.close(); + createDict = iframeDocument.F; + while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]]; + return createDict(); +}; + +module.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + Empty[PROTOTYPE] = anObject(O); + result = new Empty(); + Empty[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = createDict(); + return Properties === undefined ? result : dPs(result, Properties); +}; + +},{"./_an-object":141,"./_dom-create":164,"./_enum-bug-keys":165,"./_html":178,"./_object-dps":207,"./_shared-key":236}],206:[function(require,module,exports){ +var anObject = require('./_an-object'); +var IE8_DOM_DEFINE = require('./_ie8-dom-define'); +var toPrimitive = require('./_to-primitive'); +var dP = Object.defineProperty; + +exports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if (IE8_DOM_DEFINE) try { + return dP(O, P, Attributes); + } catch (e) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; +}; + +},{"./_an-object":141,"./_descriptors":163,"./_ie8-dom-define":179,"./_to-primitive":254}],207:[function(require,module,exports){ +var dP = require('./_object-dp'); +var anObject = require('./_an-object'); +var getKeys = require('./_object-keys'); + +module.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var keys = getKeys(Properties); + var length = keys.length; + var i = 0; + var P; + while (length > i) dP.f(O, P = keys[i++], Properties[P]); + return O; +}; + +},{"./_an-object":141,"./_descriptors":163,"./_object-dp":206,"./_object-keys":215}],208:[function(require,module,exports){ +'use strict'; +// Forced replacement prototype accessors methods +module.exports = require('./_library') || !require('./_fails')(function () { + var K = Math.random(); + // In FF throws only define methods + // eslint-disable-next-line no-undef, no-useless-call + __defineSetter__.call(null, K, function () { /* empty */ }); + delete require('./_global')[K]; +}); + +},{"./_fails":169,"./_global":175,"./_library":194}],209:[function(require,module,exports){ +var pIE = require('./_object-pie'); +var createDesc = require('./_property-desc'); +var toIObject = require('./_to-iobject'); +var toPrimitive = require('./_to-primitive'); +var has = require('./_has'); +var IE8_DOM_DEFINE = require('./_ie8-dom-define'); +var gOPD = Object.getOwnPropertyDescriptor; + +exports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) { + O = toIObject(O); + P = toPrimitive(P, true); + if (IE8_DOM_DEFINE) try { + return gOPD(O, P); + } catch (e) { /* empty */ } + if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]); +}; + +},{"./_descriptors":163,"./_has":176,"./_ie8-dom-define":179,"./_object-pie":216,"./_property-desc":224,"./_to-iobject":251,"./_to-primitive":254}],210:[function(require,module,exports){ +// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window +var toIObject = require('./_to-iobject'); +var gOPN = require('./_object-gopn').f; +var toString = {}.toString; + +var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames + ? Object.getOwnPropertyNames(window) : []; + +var getWindowNames = function (it) { + try { + return gOPN(it); + } catch (e) { + return windowNames.slice(); + } +}; + +module.exports.f = function getOwnPropertyNames(it) { + return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it)); +}; + +},{"./_object-gopn":211,"./_to-iobject":251}],211:[function(require,module,exports){ +// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O) +var $keys = require('./_object-keys-internal'); +var hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype'); + +exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return $keys(O, hiddenKeys); +}; + +},{"./_enum-bug-keys":165,"./_object-keys-internal":214}],212:[function(require,module,exports){ +exports.f = Object.getOwnPropertySymbols; + +},{}],213:[function(require,module,exports){ +// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O) +var has = require('./_has'); +var toObject = require('./_to-object'); +var IE_PROTO = require('./_shared-key')('IE_PROTO'); +var ObjectProto = Object.prototype; + +module.exports = Object.getPrototypeOf || function (O) { + O = toObject(O); + if (has(O, IE_PROTO)) return O[IE_PROTO]; + if (typeof O.constructor == 'function' && O instanceof O.constructor) { + return O.constructor.prototype; + } return O instanceof Object ? ObjectProto : null; +}; + +},{"./_has":176,"./_shared-key":236,"./_to-object":253}],214:[function(require,module,exports){ +var has = require('./_has'); +var toIObject = require('./_to-iobject'); +var arrayIndexOf = require('./_array-includes')(false); +var IE_PROTO = require('./_shared-key')('IE_PROTO'); + +module.exports = function (object, names) { + var O = toIObject(object); + var i = 0; + var result = []; + var key; + for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key); + // Don't enum bug & hidden keys + while (names.length > i) if (has(O, key = names[i++])) { + ~arrayIndexOf(result, key) || result.push(key); + } + return result; +}; + +},{"./_array-includes":145,"./_has":176,"./_shared-key":236,"./_to-iobject":251}],215:[function(require,module,exports){ +// 19.1.2.14 / 15.2.3.14 Object.keys(O) +var $keys = require('./_object-keys-internal'); +var enumBugKeys = require('./_enum-bug-keys'); + +module.exports = Object.keys || function keys(O) { + return $keys(O, enumBugKeys); +}; + +},{"./_enum-bug-keys":165,"./_object-keys-internal":214}],216:[function(require,module,exports){ +exports.f = {}.propertyIsEnumerable; + +},{}],217:[function(require,module,exports){ +// most Object methods by ES6 should accept primitives +var $export = require('./_export'); +var core = require('./_core'); +var fails = require('./_fails'); +module.exports = function (KEY, exec) { + var fn = (core.Object || {})[KEY] || Object[KEY]; + var exp = {}; + exp[KEY] = exec(fn); + $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp); +}; + +},{"./_core":157,"./_export":167,"./_fails":169}],218:[function(require,module,exports){ +var getKeys = require('./_object-keys'); +var toIObject = require('./_to-iobject'); +var isEnum = require('./_object-pie').f; +module.exports = function (isEntries) { + return function (it) { + var O = toIObject(it); + var keys = getKeys(O); + var length = keys.length; + var i = 0; + var result = []; + var key; + while (length > i) if (isEnum.call(O, key = keys[i++])) { + result.push(isEntries ? [key, O[key]] : O[key]); + } return result; + }; +}; + +},{"./_object-keys":215,"./_object-pie":216,"./_to-iobject":251}],219:[function(require,module,exports){ +// all object keys, includes non-enumerable and symbols +var gOPN = require('./_object-gopn'); +var gOPS = require('./_object-gops'); +var anObject = require('./_an-object'); +var Reflect = require('./_global').Reflect; +module.exports = Reflect && Reflect.ownKeys || function ownKeys(it) { + var keys = gOPN.f(anObject(it)); + var getSymbols = gOPS.f; + return getSymbols ? keys.concat(getSymbols(it)) : keys; +}; + +},{"./_an-object":141,"./_global":175,"./_object-gopn":211,"./_object-gops":212}],220:[function(require,module,exports){ +var $parseFloat = require('./_global').parseFloat; +var $trim = require('./_string-trim').trim; + +module.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) { + var string = $trim(String(str), 3); + var result = $parseFloat(string); + return result === 0 && string.charAt(0) == '-' ? -0 : result; +} : $parseFloat; + +},{"./_global":175,"./_string-trim":245,"./_string-ws":246}],221:[function(require,module,exports){ +var $parseInt = require('./_global').parseInt; +var $trim = require('./_string-trim').trim; +var ws = require('./_string-ws'); +var hex = /^[-+]?0[xX]/; + +module.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) { + var string = $trim(String(str), 3); + return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10)); +} : $parseInt; + +},{"./_global":175,"./_string-trim":245,"./_string-ws":246}],222:[function(require,module,exports){ +module.exports = function (exec) { + try { + return { e: false, v: exec() }; + } catch (e) { + return { e: true, v: e }; + } +}; + +},{}],223:[function(require,module,exports){ +var anObject = require('./_an-object'); +var isObject = require('./_is-object'); +var newPromiseCapability = require('./_new-promise-capability'); + +module.exports = function (C, x) { + anObject(C); + if (isObject(x) && x.constructor === C) return x; + var promiseCapability = newPromiseCapability.f(C); + var resolve = promiseCapability.resolve; + resolve(x); + return promiseCapability.promise; +}; + +},{"./_an-object":141,"./_is-object":186,"./_new-promise-capability":203}],224:[function(require,module,exports){ +module.exports = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; +}; + +},{}],225:[function(require,module,exports){ +var redefine = require('./_redefine'); +module.exports = function (target, src, safe) { + for (var key in src) redefine(target, key, src[key], safe); + return target; +}; + +},{"./_redefine":226}],226:[function(require,module,exports){ +var global = require('./_global'); +var hide = require('./_hide'); +var has = require('./_has'); +var SRC = require('./_uid')('src'); +var $toString = require('./_function-to-string'); +var TO_STRING = 'toString'; +var TPL = ('' + $toString).split(TO_STRING); + +require('./_core').inspectSource = function (it) { + return $toString.call(it); +}; + +(module.exports = function (O, key, val, safe) { + var isFunction = typeof val == 'function'; + if (isFunction) has(val, 'name') || hide(val, 'name', key); + if (O[key] === val) return; + if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); + if (O === global) { + O[key] = val; + } else if (!safe) { + delete O[key]; + hide(O, key, val); + } else if (O[key]) { + O[key] = val; + } else { + hide(O, key, val); + } +// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative +})(Function.prototype, TO_STRING, function toString() { + return typeof this == 'function' && this[SRC] || $toString.call(this); +}); + +},{"./_core":157,"./_function-to-string":174,"./_global":175,"./_has":176,"./_hide":177,"./_uid":258}],227:[function(require,module,exports){ +'use strict'; + +var classof = require('./_classof'); +var builtinExec = RegExp.prototype.exec; + + // `RegExpExec` abstract operation +// https://tc39.github.io/ecma262/#sec-regexpexec +module.exports = function (R, S) { + var exec = R.exec; + if (typeof exec === 'function') { + var result = exec.call(R, S); + if (typeof result !== 'object') { + throw new TypeError('RegExp exec method returned something other than an Object or null'); + } + return result; + } + if (classof(R) !== 'RegExp') { + throw new TypeError('RegExp#exec called on incompatible receiver'); + } + return builtinExec.call(R, S); +}; + +},{"./_classof":151}],228:[function(require,module,exports){ +'use strict'; + +var regexpFlags = require('./_flags'); + +var nativeExec = RegExp.prototype.exec; +// This always refers to the native implementation, because the +// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js, +// which loads this file before patching the method. +var nativeReplace = String.prototype.replace; + +var patchedExec = nativeExec; + +var LAST_INDEX = 'lastIndex'; + +var UPDATES_LAST_INDEX_WRONG = (function () { + var re1 = /a/, + re2 = /b*/g; + nativeExec.call(re1, 'a'); + nativeExec.call(re2, 'a'); + return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0; +})(); + +// nonparticipating capturing group, copied from es5-shim's String#split patch. +var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; + +var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED; + +if (PATCH) { + patchedExec = function exec(str) { + var re = this; + var lastIndex, reCopy, match, i; + + if (NPCG_INCLUDED) { + reCopy = new RegExp('^' + re.source + '$(?!\\s)', regexpFlags.call(re)); + } + if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX]; + + match = nativeExec.call(re, str); + + if (UPDATES_LAST_INDEX_WRONG && match) { + re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex; + } + if (NPCG_INCLUDED && match && match.length > 1) { + // Fix browsers whose `exec` methods don't consistently return `undefined` + // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/ + // eslint-disable-next-line no-loop-func + nativeReplace.call(match[0], reCopy, function () { + for (i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === undefined) match[i] = undefined; + } + }); + } + + return match; + }; +} + +module.exports = patchedExec; + +},{"./_flags":171}],229:[function(require,module,exports){ +module.exports = function (regExp, replace) { + var replacer = replace === Object(replace) ? function (part) { + return replace[part]; + } : replace; + return function (it) { + return String(it).replace(regExp, replacer); + }; +}; + +},{}],230:[function(require,module,exports){ +// 7.2.9 SameValue(x, y) +module.exports = Object.is || function is(x, y) { + // eslint-disable-next-line no-self-compare + return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y; +}; + +},{}],231:[function(require,module,exports){ +'use strict'; +// https://tc39.github.io/proposal-setmap-offrom/ +var $export = require('./_export'); +var aFunction = require('./_a-function'); +var ctx = require('./_ctx'); +var forOf = require('./_for-of'); + +module.exports = function (COLLECTION) { + $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) { + var mapFn = arguments[1]; + var mapping, A, n, cb; + aFunction(this); + mapping = mapFn !== undefined; + if (mapping) aFunction(mapFn); + if (source == undefined) return new this(); + A = []; + if (mapping) { + n = 0; + cb = ctx(mapFn, arguments[2], 2); + forOf(source, false, function (nextItem) { + A.push(cb(nextItem, n++)); + }); + } else { + forOf(source, false, A.push, A); + } + return new this(A); + } }); +}; + +},{"./_a-function":136,"./_ctx":159,"./_export":167,"./_for-of":173}],232:[function(require,module,exports){ +'use strict'; +// https://tc39.github.io/proposal-setmap-offrom/ +var $export = require('./_export'); + +module.exports = function (COLLECTION) { + $export($export.S, COLLECTION, { of: function of() { + var length = arguments.length; + var A = new Array(length); + while (length--) A[length] = arguments[length]; + return new this(A); + } }); +}; + +},{"./_export":167}],233:[function(require,module,exports){ +// Works with __proto__ only. Old v8 can't work with null proto objects. +/* eslint-disable no-proto */ +var isObject = require('./_is-object'); +var anObject = require('./_an-object'); +var check = function (O, proto) { + anObject(O); + if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!"); +}; +module.exports = { + set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line + function (test, buggy, set) { + try { + set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2); + set(test, []); + buggy = !(test instanceof Array); + } catch (e) { buggy = true; } + return function setPrototypeOf(O, proto) { + check(O, proto); + if (buggy) O.__proto__ = proto; + else set(O, proto); + return O; + }; + }({}, false) : undefined), + check: check +}; + +},{"./_an-object":141,"./_ctx":159,"./_is-object":186,"./_object-gopd":209}],234:[function(require,module,exports){ +'use strict'; +var global = require('./_global'); +var dP = require('./_object-dp'); +var DESCRIPTORS = require('./_descriptors'); +var SPECIES = require('./_wks')('species'); + +module.exports = function (KEY) { + var C = global[KEY]; + if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, { + configurable: true, + get: function () { return this; } + }); +}; + +},{"./_descriptors":163,"./_global":175,"./_object-dp":206,"./_wks":263}],235:[function(require,module,exports){ +var def = require('./_object-dp').f; +var has = require('./_has'); +var TAG = require('./_wks')('toStringTag'); + +module.exports = function (it, tag, stat) { + if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag }); +}; + +},{"./_has":176,"./_object-dp":206,"./_wks":263}],236:[function(require,module,exports){ +var shared = require('./_shared')('keys'); +var uid = require('./_uid'); +module.exports = function (key) { + return shared[key] || (shared[key] = uid(key)); +}; + +},{"./_shared":237,"./_uid":258}],237:[function(require,module,exports){ +var core = require('./_core'); +var global = require('./_global'); +var SHARED = '__core-js_shared__'; +var store = global[SHARED] || (global[SHARED] = {}); + +(module.exports = function (key, value) { + return store[key] || (store[key] = value !== undefined ? value : {}); +})('versions', []).push({ + version: core.version, + mode: require('./_library') ? 'pure' : 'global', + copyright: '© 2019 Denis Pushkarev (zloirock.ru)' +}); + +},{"./_core":157,"./_global":175,"./_library":194}],238:[function(require,module,exports){ +// 7.3.20 SpeciesConstructor(O, defaultConstructor) +var anObject = require('./_an-object'); +var aFunction = require('./_a-function'); +var SPECIES = require('./_wks')('species'); +module.exports = function (O, D) { + var C = anObject(O).constructor; + var S; + return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S); +}; + +},{"./_a-function":136,"./_an-object":141,"./_wks":263}],239:[function(require,module,exports){ +'use strict'; +var fails = require('./_fails'); + +module.exports = function (method, arg) { + return !!method && fails(function () { + // eslint-disable-next-line no-useless-call + arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null); + }); +}; + +},{"./_fails":169}],240:[function(require,module,exports){ +var toInteger = require('./_to-integer'); +var defined = require('./_defined'); +// true -> String#at +// false -> String#codePointAt +module.exports = function (TO_STRING) { + return function (that, pos) { + var s = String(defined(that)); + var i = toInteger(pos); + var l = s.length; + var a, b; + if (i < 0 || i >= l) return TO_STRING ? '' : undefined; + a = s.charCodeAt(i); + return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff + ? TO_STRING ? s.charAt(i) : a + : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; + }; +}; + +},{"./_defined":162,"./_to-integer":250}],241:[function(require,module,exports){ +// helper for String#{startsWith, endsWith, includes} +var isRegExp = require('./_is-regexp'); +var defined = require('./_defined'); + +module.exports = function (that, searchString, NAME) { + if (isRegExp(searchString)) throw TypeError('String#' + NAME + " doesn't accept regex!"); + return String(defined(that)); +}; + +},{"./_defined":162,"./_is-regexp":187}],242:[function(require,module,exports){ +var $export = require('./_export'); +var fails = require('./_fails'); +var defined = require('./_defined'); +var quot = /"/g; +// B.2.3.2.1 CreateHTML(string, tag, attribute, value) +var createHTML = function (string, tag, attribute, value) { + var S = String(defined(string)); + var p1 = '<' + tag; + if (attribute !== '') p1 += ' ' + attribute + '="' + String(value).replace(quot, '"') + '"'; + return p1 + '>' + S + ''; +}; +module.exports = function (NAME, exec) { + var O = {}; + O[NAME] = exec(createHTML); + $export($export.P + $export.F * fails(function () { + var test = ''[NAME]('"'); + return test !== test.toLowerCase() || test.split('"').length > 3; + }), 'String', O); +}; + +},{"./_defined":162,"./_export":167,"./_fails":169}],243:[function(require,module,exports){ +// https://github.com/tc39/proposal-string-pad-start-end +var toLength = require('./_to-length'); +var repeat = require('./_string-repeat'); +var defined = require('./_defined'); + +module.exports = function (that, maxLength, fillString, left) { + var S = String(defined(that)); + var stringLength = S.length; + var fillStr = fillString === undefined ? ' ' : String(fillString); + var intMaxLength = toLength(maxLength); + if (intMaxLength <= stringLength || fillStr == '') return S; + var fillLen = intMaxLength - stringLength; + var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length)); + if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen); + return left ? stringFiller + S : S + stringFiller; +}; + +},{"./_defined":162,"./_string-repeat":244,"./_to-length":252}],244:[function(require,module,exports){ +'use strict'; +var toInteger = require('./_to-integer'); +var defined = require('./_defined'); + +module.exports = function repeat(count) { + var str = String(defined(this)); + var res = ''; + var n = toInteger(count); + if (n < 0 || n == Infinity) throw RangeError("Count can't be negative"); + for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str; + return res; +}; + +},{"./_defined":162,"./_to-integer":250}],245:[function(require,module,exports){ +var $export = require('./_export'); +var defined = require('./_defined'); +var fails = require('./_fails'); +var spaces = require('./_string-ws'); +var space = '[' + spaces + ']'; +var non = '\u200b\u0085'; +var ltrim = RegExp('^' + space + space + '*'); +var rtrim = RegExp(space + space + '*$'); + +var exporter = function (KEY, exec, ALIAS) { + var exp = {}; + var FORCE = fails(function () { + return !!spaces[KEY]() || non[KEY]() != non; + }); + var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY]; + if (ALIAS) exp[ALIAS] = fn; + $export($export.P + $export.F * FORCE, 'String', exp); +}; + +// 1 -> String#trimLeft +// 2 -> String#trimRight +// 3 -> String#trim +var trim = exporter.trim = function (string, TYPE) { + string = String(defined(string)); + if (TYPE & 1) string = string.replace(ltrim, ''); + if (TYPE & 2) string = string.replace(rtrim, ''); + return string; +}; + +module.exports = exporter; + +},{"./_defined":162,"./_export":167,"./_fails":169,"./_string-ws":246}],246:[function(require,module,exports){ +module.exports = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' + + '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'; + +},{}],247:[function(require,module,exports){ +var ctx = require('./_ctx'); +var invoke = require('./_invoke'); +var html = require('./_html'); +var cel = require('./_dom-create'); +var global = require('./_global'); +var process = global.process; +var setTask = global.setImmediate; +var clearTask = global.clearImmediate; +var MessageChannel = global.MessageChannel; +var Dispatch = global.Dispatch; +var counter = 0; +var queue = {}; +var ONREADYSTATECHANGE = 'onreadystatechange'; +var defer, channel, port; +var run = function () { + var id = +this; + // eslint-disable-next-line no-prototype-builtins + if (queue.hasOwnProperty(id)) { + var fn = queue[id]; + delete queue[id]; + fn(); + } +}; +var listener = function (event) { + run.call(event.data); +}; +// Node.js 0.9+ & IE10+ has setImmediate, otherwise: +if (!setTask || !clearTask) { + setTask = function setImmediate(fn) { + var args = []; + var i = 1; + while (arguments.length > i) args.push(arguments[i++]); + queue[++counter] = function () { + // eslint-disable-next-line no-new-func + invoke(typeof fn == 'function' ? fn : Function(fn), args); + }; + defer(counter); + return counter; + }; + clearTask = function clearImmediate(id) { + delete queue[id]; + }; + // Node.js 0.8- + if (require('./_cof')(process) == 'process') { + defer = function (id) { + process.nextTick(ctx(run, id, 1)); + }; + // Sphere (JS game engine) Dispatch API + } else if (Dispatch && Dispatch.now) { + defer = function (id) { + Dispatch.now(ctx(run, id, 1)); + }; + // Browsers with MessageChannel, includes WebWorkers + } else if (MessageChannel) { + channel = new MessageChannel(); + port = channel.port2; + channel.port1.onmessage = listener; + defer = ctx(port.postMessage, port, 1); + // Browsers with postMessage, skip WebWorkers + // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' + } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) { + defer = function (id) { + global.postMessage(id + '', '*'); + }; + global.addEventListener('message', listener, false); + // IE8- + } else if (ONREADYSTATECHANGE in cel('script')) { + defer = function (id) { + html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () { + html.removeChild(this); + run.call(id); + }; + }; + // Rest old browsers + } else { + defer = function (id) { + setTimeout(ctx(run, id, 1), 0); + }; + } +} +module.exports = { + set: setTask, + clear: clearTask +}; + +},{"./_cof":152,"./_ctx":159,"./_dom-create":164,"./_global":175,"./_html":178,"./_invoke":181}],248:[function(require,module,exports){ +var toInteger = require('./_to-integer'); +var max = Math.max; +var min = Math.min; +module.exports = function (index, length) { + index = toInteger(index); + return index < 0 ? max(index + length, 0) : min(index, length); +}; + +},{"./_to-integer":250}],249:[function(require,module,exports){ +// https://tc39.github.io/ecma262/#sec-toindex +var toInteger = require('./_to-integer'); +var toLength = require('./_to-length'); +module.exports = function (it) { + if (it === undefined) return 0; + var number = toInteger(it); + var length = toLength(number); + if (number !== length) throw RangeError('Wrong length!'); + return length; +}; + +},{"./_to-integer":250,"./_to-length":252}],250:[function(require,module,exports){ +// 7.1.4 ToInteger +var ceil = Math.ceil; +var floor = Math.floor; +module.exports = function (it) { + return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); +}; + +},{}],251:[function(require,module,exports){ +// to indexed object, toObject with fallback for non-array-like ES3 strings +var IObject = require('./_iobject'); +var defined = require('./_defined'); +module.exports = function (it) { + return IObject(defined(it)); +}; + +},{"./_defined":162,"./_iobject":182}],252:[function(require,module,exports){ +// 7.1.15 ToLength +var toInteger = require('./_to-integer'); +var min = Math.min; +module.exports = function (it) { + return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 +}; + +},{"./_to-integer":250}],253:[function(require,module,exports){ +// 7.1.13 ToObject(argument) +var defined = require('./_defined'); +module.exports = function (it) { + return Object(defined(it)); +}; + +},{"./_defined":162}],254:[function(require,module,exports){ +// 7.1.1 ToPrimitive(input [, PreferredType]) +var isObject = require('./_is-object'); +// instead of the ES6 spec version, we didn't implement @@toPrimitive case +// and the second argument - flag - preferred type is a string +module.exports = function (it, S) { + if (!isObject(it)) return it; + var fn, val; + if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; + if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val; + if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; + throw TypeError("Can't convert object to primitive value"); +}; + +},{"./_is-object":186}],255:[function(require,module,exports){ +'use strict'; +if (require('./_descriptors')) { + var LIBRARY = require('./_library'); + var global = require('./_global'); + var fails = require('./_fails'); + var $export = require('./_export'); + var $typed = require('./_typed'); + var $buffer = require('./_typed-buffer'); + var ctx = require('./_ctx'); + var anInstance = require('./_an-instance'); + var propertyDesc = require('./_property-desc'); + var hide = require('./_hide'); + var redefineAll = require('./_redefine-all'); + var toInteger = require('./_to-integer'); + var toLength = require('./_to-length'); + var toIndex = require('./_to-index'); + var toAbsoluteIndex = require('./_to-absolute-index'); + var toPrimitive = require('./_to-primitive'); + var has = require('./_has'); + var classof = require('./_classof'); + var isObject = require('./_is-object'); + var toObject = require('./_to-object'); + var isArrayIter = require('./_is-array-iter'); + var create = require('./_object-create'); + var getPrototypeOf = require('./_object-gpo'); + var gOPN = require('./_object-gopn').f; + var getIterFn = require('./core.get-iterator-method'); + var uid = require('./_uid'); + var wks = require('./_wks'); + var createArrayMethod = require('./_array-methods'); + var createArrayIncludes = require('./_array-includes'); + var speciesConstructor = require('./_species-constructor'); + var ArrayIterators = require('./es6.array.iterator'); + var Iterators = require('./_iterators'); + var $iterDetect = require('./_iter-detect'); + var setSpecies = require('./_set-species'); + var arrayFill = require('./_array-fill'); + var arrayCopyWithin = require('./_array-copy-within'); + var $DP = require('./_object-dp'); + var $GOPD = require('./_object-gopd'); + var dP = $DP.f; + var gOPD = $GOPD.f; + var RangeError = global.RangeError; + var TypeError = global.TypeError; + var Uint8Array = global.Uint8Array; + var ARRAY_BUFFER = 'ArrayBuffer'; + var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER; + var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT'; + var PROTOTYPE = 'prototype'; + var ArrayProto = Array[PROTOTYPE]; + var $ArrayBuffer = $buffer.ArrayBuffer; + var $DataView = $buffer.DataView; + var arrayForEach = createArrayMethod(0); + var arrayFilter = createArrayMethod(2); + var arraySome = createArrayMethod(3); + var arrayEvery = createArrayMethod(4); + var arrayFind = createArrayMethod(5); + var arrayFindIndex = createArrayMethod(6); + var arrayIncludes = createArrayIncludes(true); + var arrayIndexOf = createArrayIncludes(false); + var arrayValues = ArrayIterators.values; + var arrayKeys = ArrayIterators.keys; + var arrayEntries = ArrayIterators.entries; + var arrayLastIndexOf = ArrayProto.lastIndexOf; + var arrayReduce = ArrayProto.reduce; + var arrayReduceRight = ArrayProto.reduceRight; + var arrayJoin = ArrayProto.join; + var arraySort = ArrayProto.sort; + var arraySlice = ArrayProto.slice; + var arrayToString = ArrayProto.toString; + var arrayToLocaleString = ArrayProto.toLocaleString; + var ITERATOR = wks('iterator'); + var TAG = wks('toStringTag'); + var TYPED_CONSTRUCTOR = uid('typed_constructor'); + var DEF_CONSTRUCTOR = uid('def_constructor'); + var ALL_CONSTRUCTORS = $typed.CONSTR; + var TYPED_ARRAY = $typed.TYPED; + var VIEW = $typed.VIEW; + var WRONG_LENGTH = 'Wrong length!'; + + var $map = createArrayMethod(1, function (O, length) { + return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length); + }); + + var LITTLE_ENDIAN = fails(function () { + // eslint-disable-next-line no-undef + return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1; + }); + + var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () { + new Uint8Array(1).set({}); + }); + + var toOffset = function (it, BYTES) { + var offset = toInteger(it); + if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!'); + return offset; + }; + + var validate = function (it) { + if (isObject(it) && TYPED_ARRAY in it) return it; + throw TypeError(it + ' is not a typed array!'); + }; + + var allocate = function (C, length) { + if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) { + throw TypeError('It is not a typed array constructor!'); + } return new C(length); + }; + + var speciesFromList = function (O, list) { + return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list); + }; + + var fromList = function (C, list) { + var index = 0; + var length = list.length; + var result = allocate(C, length); + while (length > index) result[index] = list[index++]; + return result; + }; + + var addGetter = function (it, key, internal) { + dP(it, key, { get: function () { return this._d[internal]; } }); + }; + + var $from = function from(source /* , mapfn, thisArg */) { + var O = toObject(source); + var aLen = arguments.length; + var mapfn = aLen > 1 ? arguments[1] : undefined; + var mapping = mapfn !== undefined; + var iterFn = getIterFn(O); + var i, length, values, result, step, iterator; + if (iterFn != undefined && !isArrayIter(iterFn)) { + for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) { + values.push(step.value); + } O = values; + } + if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2); + for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) { + result[i] = mapping ? mapfn(O[i], i) : O[i]; + } + return result; + }; + + var $of = function of(/* ...items */) { + var index = 0; + var length = arguments.length; + var result = allocate(this, length); + while (length > index) result[index] = arguments[index++]; + return result; + }; + + // iOS Safari 6.x fails here + var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); }); + + var $toLocaleString = function toLocaleString() { + return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments); + }; + + var proto = { + copyWithin: function copyWithin(target, start /* , end */) { + return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined); + }, + every: function every(callbackfn /* , thisArg */) { + return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + }, + fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars + return arrayFill.apply(validate(this), arguments); + }, + filter: function filter(callbackfn /* , thisArg */) { + return speciesFromList(this, arrayFilter(validate(this), callbackfn, + arguments.length > 1 ? arguments[1] : undefined)); + }, + find: function find(predicate /* , thisArg */) { + return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined); + }, + findIndex: function findIndex(predicate /* , thisArg */) { + return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined); + }, + forEach: function forEach(callbackfn /* , thisArg */) { + arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + }, + indexOf: function indexOf(searchElement /* , fromIndex */) { + return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined); + }, + includes: function includes(searchElement /* , fromIndex */) { + return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined); + }, + join: function join(separator) { // eslint-disable-line no-unused-vars + return arrayJoin.apply(validate(this), arguments); + }, + lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars + return arrayLastIndexOf.apply(validate(this), arguments); + }, + map: function map(mapfn /* , thisArg */) { + return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined); + }, + reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars + return arrayReduce.apply(validate(this), arguments); + }, + reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars + return arrayReduceRight.apply(validate(this), arguments); + }, + reverse: function reverse() { + var that = this; + var length = validate(that).length; + var middle = Math.floor(length / 2); + var index = 0; + var value; + while (index < middle) { + value = that[index]; + that[index++] = that[--length]; + that[length] = value; + } return that; + }, + some: function some(callbackfn /* , thisArg */) { + return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + }, + sort: function sort(comparefn) { + return arraySort.call(validate(this), comparefn); + }, + subarray: function subarray(begin, end) { + var O = validate(this); + var length = O.length; + var $begin = toAbsoluteIndex(begin, length); + return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))( + O.buffer, + O.byteOffset + $begin * O.BYTES_PER_ELEMENT, + toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin) + ); + } + }; + + var $slice = function slice(start, end) { + return speciesFromList(this, arraySlice.call(validate(this), start, end)); + }; + + var $set = function set(arrayLike /* , offset */) { + validate(this); + var offset = toOffset(arguments[1], 1); + var length = this.length; + var src = toObject(arrayLike); + var len = toLength(src.length); + var index = 0; + if (len + offset > length) throw RangeError(WRONG_LENGTH); + while (index < len) this[offset + index] = src[index++]; + }; + + var $iterators = { + entries: function entries() { + return arrayEntries.call(validate(this)); + }, + keys: function keys() { + return arrayKeys.call(validate(this)); + }, + values: function values() { + return arrayValues.call(validate(this)); + } + }; + + var isTAIndex = function (target, key) { + return isObject(target) + && target[TYPED_ARRAY] + && typeof key != 'symbol' + && key in target + && String(+key) == String(key); + }; + var $getDesc = function getOwnPropertyDescriptor(target, key) { + return isTAIndex(target, key = toPrimitive(key, true)) + ? propertyDesc(2, target[key]) + : gOPD(target, key); + }; + var $setDesc = function defineProperty(target, key, desc) { + if (isTAIndex(target, key = toPrimitive(key, true)) + && isObject(desc) + && has(desc, 'value') + && !has(desc, 'get') + && !has(desc, 'set') + // TODO: add validation descriptor w/o calling accessors + && !desc.configurable + && (!has(desc, 'writable') || desc.writable) + && (!has(desc, 'enumerable') || desc.enumerable) + ) { + target[key] = desc.value; + return target; + } return dP(target, key, desc); + }; + + if (!ALL_CONSTRUCTORS) { + $GOPD.f = $getDesc; + $DP.f = $setDesc; + } + + $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', { + getOwnPropertyDescriptor: $getDesc, + defineProperty: $setDesc + }); + + if (fails(function () { arrayToString.call({}); })) { + arrayToString = arrayToLocaleString = function toString() { + return arrayJoin.call(this); + }; + } + + var $TypedArrayPrototype$ = redefineAll({}, proto); + redefineAll($TypedArrayPrototype$, $iterators); + hide($TypedArrayPrototype$, ITERATOR, $iterators.values); + redefineAll($TypedArrayPrototype$, { + slice: $slice, + set: $set, + constructor: function () { /* noop */ }, + toString: arrayToString, + toLocaleString: $toLocaleString + }); + addGetter($TypedArrayPrototype$, 'buffer', 'b'); + addGetter($TypedArrayPrototype$, 'byteOffset', 'o'); + addGetter($TypedArrayPrototype$, 'byteLength', 'l'); + addGetter($TypedArrayPrototype$, 'length', 'e'); + dP($TypedArrayPrototype$, TAG, { + get: function () { return this[TYPED_ARRAY]; } + }); + + // eslint-disable-next-line max-statements + module.exports = function (KEY, BYTES, wrapper, CLAMPED) { + CLAMPED = !!CLAMPED; + var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array'; + var GETTER = 'get' + KEY; + var SETTER = 'set' + KEY; + var TypedArray = global[NAME]; + var Base = TypedArray || {}; + var TAC = TypedArray && getPrototypeOf(TypedArray); + var FORCED = !TypedArray || !$typed.ABV; + var O = {}; + var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE]; + var getter = function (that, index) { + var data = that._d; + return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN); + }; + var setter = function (that, index, value) { + var data = that._d; + if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff; + data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN); + }; + var addElement = function (that, index) { + dP(that, index, { + get: function () { + return getter(this, index); + }, + set: function (value) { + return setter(this, index, value); + }, + enumerable: true + }); + }; + if (FORCED) { + TypedArray = wrapper(function (that, data, $offset, $length) { + anInstance(that, TypedArray, NAME, '_d'); + var index = 0; + var offset = 0; + var buffer, byteLength, length, klass; + if (!isObject(data)) { + length = toIndex(data); + byteLength = length * BYTES; + buffer = new $ArrayBuffer(byteLength); + } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) { + buffer = data; + offset = toOffset($offset, BYTES); + var $len = data.byteLength; + if ($length === undefined) { + if ($len % BYTES) throw RangeError(WRONG_LENGTH); + byteLength = $len - offset; + if (byteLength < 0) throw RangeError(WRONG_LENGTH); + } else { + byteLength = toLength($length) * BYTES; + if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH); + } + length = byteLength / BYTES; + } else if (TYPED_ARRAY in data) { + return fromList(TypedArray, data); + } else { + return $from.call(TypedArray, data); + } + hide(that, '_d', { + b: buffer, + o: offset, + l: byteLength, + e: length, + v: new $DataView(buffer) + }); + while (index < length) addElement(that, index++); + }); + TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$); + hide(TypedArrayPrototype, 'constructor', TypedArray); + } else if (!fails(function () { + TypedArray(1); + }) || !fails(function () { + new TypedArray(-1); // eslint-disable-line no-new + }) || !$iterDetect(function (iter) { + new TypedArray(); // eslint-disable-line no-new + new TypedArray(null); // eslint-disable-line no-new + new TypedArray(1.5); // eslint-disable-line no-new + new TypedArray(iter); // eslint-disable-line no-new + }, true)) { + TypedArray = wrapper(function (that, data, $offset, $length) { + anInstance(that, TypedArray, NAME); + var klass; + // `ws` module bug, temporarily remove validation length for Uint8Array + // https://github.com/websockets/ws/pull/645 + if (!isObject(data)) return new Base(toIndex(data)); + if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) { + return $length !== undefined + ? new Base(data, toOffset($offset, BYTES), $length) + : $offset !== undefined + ? new Base(data, toOffset($offset, BYTES)) + : new Base(data); + } + if (TYPED_ARRAY in data) return fromList(TypedArray, data); + return $from.call(TypedArray, data); + }); + arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) { + if (!(key in TypedArray)) hide(TypedArray, key, Base[key]); + }); + TypedArray[PROTOTYPE] = TypedArrayPrototype; + if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray; + } + var $nativeIterator = TypedArrayPrototype[ITERATOR]; + var CORRECT_ITER_NAME = !!$nativeIterator + && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined); + var $iterator = $iterators.values; + hide(TypedArray, TYPED_CONSTRUCTOR, true); + hide(TypedArrayPrototype, TYPED_ARRAY, NAME); + hide(TypedArrayPrototype, VIEW, true); + hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray); + + if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) { + dP(TypedArrayPrototype, TAG, { + get: function () { return NAME; } + }); + } + + O[NAME] = TypedArray; + + $export($export.G + $export.W + $export.F * (TypedArray != Base), O); + + $export($export.S, NAME, { + BYTES_PER_ELEMENT: BYTES + }); + + $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, { + from: $from, + of: $of + }); + + if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES); + + $export($export.P, NAME, proto); + + setSpecies(NAME); + + $export($export.P + $export.F * FORCED_SET, NAME, { set: $set }); + + $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators); + + if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString; + + $export($export.P + $export.F * fails(function () { + new TypedArray(1).slice(); + }), NAME, { slice: $slice }); + + $export($export.P + $export.F * (fails(function () { + return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString(); + }) || !fails(function () { + TypedArrayPrototype.toLocaleString.call([1, 2]); + })), NAME, { toLocaleString: $toLocaleString }); + + Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator; + if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator); + }; +} else module.exports = function () { /* empty */ }; + +},{"./_an-instance":140,"./_array-copy-within":142,"./_array-fill":143,"./_array-includes":145,"./_array-methods":146,"./_classof":151,"./_ctx":159,"./_descriptors":163,"./_export":167,"./_fails":169,"./_global":175,"./_has":176,"./_hide":177,"./_is-array-iter":183,"./_is-object":186,"./_iter-detect":191,"./_iterators":193,"./_library":194,"./_object-create":205,"./_object-dp":206,"./_object-gopd":209,"./_object-gopn":211,"./_object-gpo":213,"./_property-desc":224,"./_redefine-all":225,"./_set-species":234,"./_species-constructor":238,"./_to-absolute-index":248,"./_to-index":249,"./_to-integer":250,"./_to-length":252,"./_to-object":253,"./_to-primitive":254,"./_typed":257,"./_typed-buffer":256,"./_uid":258,"./_wks":263,"./core.get-iterator-method":264,"./es6.array.iterator":276}],256:[function(require,module,exports){ +'use strict'; +var global = require('./_global'); +var DESCRIPTORS = require('./_descriptors'); +var LIBRARY = require('./_library'); +var $typed = require('./_typed'); +var hide = require('./_hide'); +var redefineAll = require('./_redefine-all'); +var fails = require('./_fails'); +var anInstance = require('./_an-instance'); +var toInteger = require('./_to-integer'); +var toLength = require('./_to-length'); +var toIndex = require('./_to-index'); +var gOPN = require('./_object-gopn').f; +var dP = require('./_object-dp').f; +var arrayFill = require('./_array-fill'); +var setToStringTag = require('./_set-to-string-tag'); +var ARRAY_BUFFER = 'ArrayBuffer'; +var DATA_VIEW = 'DataView'; +var PROTOTYPE = 'prototype'; +var WRONG_LENGTH = 'Wrong length!'; +var WRONG_INDEX = 'Wrong index!'; +var $ArrayBuffer = global[ARRAY_BUFFER]; +var $DataView = global[DATA_VIEW]; +var Math = global.Math; +var RangeError = global.RangeError; +// eslint-disable-next-line no-shadow-restricted-names +var Infinity = global.Infinity; +var BaseBuffer = $ArrayBuffer; +var abs = Math.abs; +var pow = Math.pow; +var floor = Math.floor; +var log = Math.log; +var LN2 = Math.LN2; +var BUFFER = 'buffer'; +var BYTE_LENGTH = 'byteLength'; +var BYTE_OFFSET = 'byteOffset'; +var $BUFFER = DESCRIPTORS ? '_b' : BUFFER; +var $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH; +var $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET; + +// IEEE754 conversions based on https://github.com/feross/ieee754 +function packIEEE754(value, mLen, nBytes) { + var buffer = new Array(nBytes); + var eLen = nBytes * 8 - mLen - 1; + var eMax = (1 << eLen) - 1; + var eBias = eMax >> 1; + var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0; + var i = 0; + var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0; + var e, m, c; + value = abs(value); + // eslint-disable-next-line no-self-compare + if (value != value || value === Infinity) { + // eslint-disable-next-line no-self-compare + m = value != value ? 1 : 0; + e = eMax; + } else { + e = floor(log(value) / LN2); + if (value * (c = pow(2, -e)) < 1) { + e--; + c *= 2; + } + if (e + eBias >= 1) { + value += rt / c; + } else { + value += rt * pow(2, 1 - eBias); + } + if (value * c >= 2) { + e++; + c /= 2; + } + if (e + eBias >= eMax) { + m = 0; + e = eMax; + } else if (e + eBias >= 1) { + m = (value * c - 1) * pow(2, mLen); + e = e + eBias; + } else { + m = value * pow(2, eBias - 1) * pow(2, mLen); + e = 0; + } + } + for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8); + e = e << mLen | m; + eLen += mLen; + for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8); + buffer[--i] |= s * 128; + return buffer; +} +function unpackIEEE754(buffer, mLen, nBytes) { + var eLen = nBytes * 8 - mLen - 1; + var eMax = (1 << eLen) - 1; + var eBias = eMax >> 1; + var nBits = eLen - 7; + var i = nBytes - 1; + var s = buffer[i--]; + var e = s & 127; + var m; + s >>= 7; + for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8); + m = e & (1 << -nBits) - 1; + e >>= -nBits; + nBits += mLen; + for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8); + if (e === 0) { + e = 1 - eBias; + } else if (e === eMax) { + return m ? NaN : s ? -Infinity : Infinity; + } else { + m = m + pow(2, mLen); + e = e - eBias; + } return (s ? -1 : 1) * m * pow(2, e - mLen); +} + +function unpackI32(bytes) { + return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0]; +} +function packI8(it) { + return [it & 0xff]; +} +function packI16(it) { + return [it & 0xff, it >> 8 & 0xff]; +} +function packI32(it) { + return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff]; +} +function packF64(it) { + return packIEEE754(it, 52, 8); +} +function packF32(it) { + return packIEEE754(it, 23, 4); +} + +function addGetter(C, key, internal) { + dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } }); +} + +function get(view, bytes, index, isLittleEndian) { + var numIndex = +index; + var intIndex = toIndex(numIndex); + if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX); + var store = view[$BUFFER]._b; + var start = intIndex + view[$OFFSET]; + var pack = store.slice(start, start + bytes); + return isLittleEndian ? pack : pack.reverse(); +} +function set(view, bytes, index, conversion, value, isLittleEndian) { + var numIndex = +index; + var intIndex = toIndex(numIndex); + if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX); + var store = view[$BUFFER]._b; + var start = intIndex + view[$OFFSET]; + var pack = conversion(+value); + for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1]; +} + +if (!$typed.ABV) { + $ArrayBuffer = function ArrayBuffer(length) { + anInstance(this, $ArrayBuffer, ARRAY_BUFFER); + var byteLength = toIndex(length); + this._b = arrayFill.call(new Array(byteLength), 0); + this[$LENGTH] = byteLength; + }; + + $DataView = function DataView(buffer, byteOffset, byteLength) { + anInstance(this, $DataView, DATA_VIEW); + anInstance(buffer, $ArrayBuffer, DATA_VIEW); + var bufferLength = buffer[$LENGTH]; + var offset = toInteger(byteOffset); + if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!'); + byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength); + if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH); + this[$BUFFER] = buffer; + this[$OFFSET] = offset; + this[$LENGTH] = byteLength; + }; + + if (DESCRIPTORS) { + addGetter($ArrayBuffer, BYTE_LENGTH, '_l'); + addGetter($DataView, BUFFER, '_b'); + addGetter($DataView, BYTE_LENGTH, '_l'); + addGetter($DataView, BYTE_OFFSET, '_o'); + } + + redefineAll($DataView[PROTOTYPE], { + getInt8: function getInt8(byteOffset) { + return get(this, 1, byteOffset)[0] << 24 >> 24; + }, + getUint8: function getUint8(byteOffset) { + return get(this, 1, byteOffset)[0]; + }, + getInt16: function getInt16(byteOffset /* , littleEndian */) { + var bytes = get(this, 2, byteOffset, arguments[1]); + return (bytes[1] << 8 | bytes[0]) << 16 >> 16; + }, + getUint16: function getUint16(byteOffset /* , littleEndian */) { + var bytes = get(this, 2, byteOffset, arguments[1]); + return bytes[1] << 8 | bytes[0]; + }, + getInt32: function getInt32(byteOffset /* , littleEndian */) { + return unpackI32(get(this, 4, byteOffset, arguments[1])); + }, + getUint32: function getUint32(byteOffset /* , littleEndian */) { + return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0; + }, + getFloat32: function getFloat32(byteOffset /* , littleEndian */) { + return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4); + }, + getFloat64: function getFloat64(byteOffset /* , littleEndian */) { + return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8); + }, + setInt8: function setInt8(byteOffset, value) { + set(this, 1, byteOffset, packI8, value); + }, + setUint8: function setUint8(byteOffset, value) { + set(this, 1, byteOffset, packI8, value); + }, + setInt16: function setInt16(byteOffset, value /* , littleEndian */) { + set(this, 2, byteOffset, packI16, value, arguments[2]); + }, + setUint16: function setUint16(byteOffset, value /* , littleEndian */) { + set(this, 2, byteOffset, packI16, value, arguments[2]); + }, + setInt32: function setInt32(byteOffset, value /* , littleEndian */) { + set(this, 4, byteOffset, packI32, value, arguments[2]); + }, + setUint32: function setUint32(byteOffset, value /* , littleEndian */) { + set(this, 4, byteOffset, packI32, value, arguments[2]); + }, + setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) { + set(this, 4, byteOffset, packF32, value, arguments[2]); + }, + setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) { + set(this, 8, byteOffset, packF64, value, arguments[2]); + } + }); +} else { + if (!fails(function () { + $ArrayBuffer(1); + }) || !fails(function () { + new $ArrayBuffer(-1); // eslint-disable-line no-new + }) || fails(function () { + new $ArrayBuffer(); // eslint-disable-line no-new + new $ArrayBuffer(1.5); // eslint-disable-line no-new + new $ArrayBuffer(NaN); // eslint-disable-line no-new + return $ArrayBuffer.name != ARRAY_BUFFER; + })) { + $ArrayBuffer = function ArrayBuffer(length) { + anInstance(this, $ArrayBuffer); + return new BaseBuffer(toIndex(length)); + }; + var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE]; + for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) { + if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]); + } + if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer; + } + // iOS Safari 7.x bug + var view = new $DataView(new $ArrayBuffer(2)); + var $setInt8 = $DataView[PROTOTYPE].setInt8; + view.setInt8(0, 2147483648); + view.setInt8(1, 2147483649); + if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], { + setInt8: function setInt8(byteOffset, value) { + $setInt8.call(this, byteOffset, value << 24 >> 24); + }, + setUint8: function setUint8(byteOffset, value) { + $setInt8.call(this, byteOffset, value << 24 >> 24); + } + }, true); +} +setToStringTag($ArrayBuffer, ARRAY_BUFFER); +setToStringTag($DataView, DATA_VIEW); +hide($DataView[PROTOTYPE], $typed.VIEW, true); +exports[ARRAY_BUFFER] = $ArrayBuffer; +exports[DATA_VIEW] = $DataView; + +},{"./_an-instance":140,"./_array-fill":143,"./_descriptors":163,"./_fails":169,"./_global":175,"./_hide":177,"./_library":194,"./_object-dp":206,"./_object-gopn":211,"./_redefine-all":225,"./_set-to-string-tag":235,"./_to-index":249,"./_to-integer":250,"./_to-length":252,"./_typed":257}],257:[function(require,module,exports){ +var global = require('./_global'); +var hide = require('./_hide'); +var uid = require('./_uid'); +var TYPED = uid('typed_array'); +var VIEW = uid('view'); +var ABV = !!(global.ArrayBuffer && global.DataView); +var CONSTR = ABV; +var i = 0; +var l = 9; +var Typed; + +var TypedArrayConstructors = ( + 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array' +).split(','); + +while (i < l) { + if (Typed = global[TypedArrayConstructors[i++]]) { + hide(Typed.prototype, TYPED, true); + hide(Typed.prototype, VIEW, true); + } else CONSTR = false; +} + +module.exports = { + ABV: ABV, + CONSTR: CONSTR, + TYPED: TYPED, + VIEW: VIEW +}; + +},{"./_global":175,"./_hide":177,"./_uid":258}],258:[function(require,module,exports){ +var id = 0; +var px = Math.random(); +module.exports = function (key) { + return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); +}; + +},{}],259:[function(require,module,exports){ +var global = require('./_global'); +var navigator = global.navigator; + +module.exports = navigator && navigator.userAgent || ''; + +},{"./_global":175}],260:[function(require,module,exports){ +var isObject = require('./_is-object'); +module.exports = function (it, TYPE) { + if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!'); + return it; +}; + +},{"./_is-object":186}],261:[function(require,module,exports){ +var global = require('./_global'); +var core = require('./_core'); +var LIBRARY = require('./_library'); +var wksExt = require('./_wks-ext'); +var defineProperty = require('./_object-dp').f; +module.exports = function (name) { + var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {}); + if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) }); +}; + +},{"./_core":157,"./_global":175,"./_library":194,"./_object-dp":206,"./_wks-ext":262}],262:[function(require,module,exports){ +exports.f = require('./_wks'); + +},{"./_wks":263}],263:[function(require,module,exports){ +var store = require('./_shared')('wks'); +var uid = require('./_uid'); +var Symbol = require('./_global').Symbol; +var USE_SYMBOL = typeof Symbol == 'function'; + +var $exports = module.exports = function (name) { + return store[name] || (store[name] = + USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name)); +}; + +$exports.store = store; + +},{"./_global":175,"./_shared":237,"./_uid":258}],264:[function(require,module,exports){ +var classof = require('./_classof'); +var ITERATOR = require('./_wks')('iterator'); +var Iterators = require('./_iterators'); +module.exports = require('./_core').getIteratorMethod = function (it) { + if (it != undefined) return it[ITERATOR] + || it['@@iterator'] + || Iterators[classof(it)]; +}; + +},{"./_classof":151,"./_core":157,"./_iterators":193,"./_wks":263}],265:[function(require,module,exports){ +// https://github.com/benjamingr/RexExp.escape +var $export = require('./_export'); +var $re = require('./_replacer')(/[\\^$*+?.()|[\]{}]/g, '\\$&'); + +$export($export.S, 'RegExp', { escape: function escape(it) { return $re(it); } }); + +},{"./_export":167,"./_replacer":229}],266:[function(require,module,exports){ +// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length) +var $export = require('./_export'); + +$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') }); + +require('./_add-to-unscopables')('copyWithin'); + +},{"./_add-to-unscopables":138,"./_array-copy-within":142,"./_export":167}],267:[function(require,module,exports){ +'use strict'; +var $export = require('./_export'); +var $every = require('./_array-methods')(4); + +$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', { + // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg]) + every: function every(callbackfn /* , thisArg */) { + return $every(this, callbackfn, arguments[1]); + } +}); + +},{"./_array-methods":146,"./_export":167,"./_strict-method":239}],268:[function(require,module,exports){ +// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length) +var $export = require('./_export'); + +$export($export.P, 'Array', { fill: require('./_array-fill') }); + +require('./_add-to-unscopables')('fill'); + +},{"./_add-to-unscopables":138,"./_array-fill":143,"./_export":167}],269:[function(require,module,exports){ +'use strict'; +var $export = require('./_export'); +var $filter = require('./_array-methods')(2); + +$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', { + // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg]) + filter: function filter(callbackfn /* , thisArg */) { + return $filter(this, callbackfn, arguments[1]); + } +}); + +},{"./_array-methods":146,"./_export":167,"./_strict-method":239}],270:[function(require,module,exports){ +'use strict'; +// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined) +var $export = require('./_export'); +var $find = require('./_array-methods')(6); +var KEY = 'findIndex'; +var forced = true; +// Shouldn't skip holes +if (KEY in []) Array(1)[KEY](function () { forced = false; }); +$export($export.P + $export.F * forced, 'Array', { + findIndex: function findIndex(callbackfn /* , that = undefined */) { + return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); +require('./_add-to-unscopables')(KEY); + +},{"./_add-to-unscopables":138,"./_array-methods":146,"./_export":167}],271:[function(require,module,exports){ +'use strict'; +// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined) +var $export = require('./_export'); +var $find = require('./_array-methods')(5); +var KEY = 'find'; +var forced = true; +// Shouldn't skip holes +if (KEY in []) Array(1)[KEY](function () { forced = false; }); +$export($export.P + $export.F * forced, 'Array', { + find: function find(callbackfn /* , that = undefined */) { + return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); +require('./_add-to-unscopables')(KEY); + +},{"./_add-to-unscopables":138,"./_array-methods":146,"./_export":167}],272:[function(require,module,exports){ +'use strict'; +var $export = require('./_export'); +var $forEach = require('./_array-methods')(0); +var STRICT = require('./_strict-method')([].forEach, true); + +$export($export.P + $export.F * !STRICT, 'Array', { + // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg]) + forEach: function forEach(callbackfn /* , thisArg */) { + return $forEach(this, callbackfn, arguments[1]); + } +}); + +},{"./_array-methods":146,"./_export":167,"./_strict-method":239}],273:[function(require,module,exports){ +'use strict'; +var ctx = require('./_ctx'); +var $export = require('./_export'); +var toObject = require('./_to-object'); +var call = require('./_iter-call'); +var isArrayIter = require('./_is-array-iter'); +var toLength = require('./_to-length'); +var createProperty = require('./_create-property'); +var getIterFn = require('./core.get-iterator-method'); + +$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', { + // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined) + from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) { + var O = toObject(arrayLike); + var C = typeof this == 'function' ? this : Array; + var aLen = arguments.length; + var mapfn = aLen > 1 ? arguments[1] : undefined; + var mapping = mapfn !== undefined; + var index = 0; + var iterFn = getIterFn(O); + var length, result, step, iterator; + if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2); + // if object isn't iterable or it's array with default iterator - use simple case + if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) { + for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) { + createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value); + } + } else { + length = toLength(O.length); + for (result = new C(length); length > index; index++) { + createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]); + } + } + result.length = index; + return result; + } +}); + +},{"./_create-property":158,"./_ctx":159,"./_export":167,"./_is-array-iter":183,"./_iter-call":188,"./_iter-detect":191,"./_to-length":252,"./_to-object":253,"./core.get-iterator-method":264}],274:[function(require,module,exports){ +'use strict'; +var $export = require('./_export'); +var $indexOf = require('./_array-includes')(false); +var $native = [].indexOf; +var NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0; + +$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', { + // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex]) + indexOf: function indexOf(searchElement /* , fromIndex = 0 */) { + return NEGATIVE_ZERO + // convert -0 to +0 + ? $native.apply(this, arguments) || 0 + : $indexOf(this, searchElement, arguments[1]); + } +}); + +},{"./_array-includes":145,"./_export":167,"./_strict-method":239}],275:[function(require,module,exports){ +// 22.1.2.2 / 15.4.3.2 Array.isArray(arg) +var $export = require('./_export'); + +$export($export.S, 'Array', { isArray: require('./_is-array') }); + +},{"./_export":167,"./_is-array":184}],276:[function(require,module,exports){ +'use strict'; +var addToUnscopables = require('./_add-to-unscopables'); +var step = require('./_iter-step'); +var Iterators = require('./_iterators'); +var toIObject = require('./_to-iobject'); + +// 22.1.3.4 Array.prototype.entries() +// 22.1.3.13 Array.prototype.keys() +// 22.1.3.29 Array.prototype.values() +// 22.1.3.30 Array.prototype[@@iterator]() +module.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) { + this._t = toIObject(iterated); // target + this._i = 0; // next index + this._k = kind; // kind +// 22.1.5.2.1 %ArrayIteratorPrototype%.next() +}, function () { + var O = this._t; + var kind = this._k; + var index = this._i++; + if (!O || index >= O.length) { + this._t = undefined; + return step(1); + } + if (kind == 'keys') return step(0, index); + if (kind == 'values') return step(0, O[index]); + return step(0, [index, O[index]]); +}, 'values'); + +// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7) +Iterators.Arguments = Iterators.Array; + +addToUnscopables('keys'); +addToUnscopables('values'); +addToUnscopables('entries'); + +},{"./_add-to-unscopables":138,"./_iter-define":190,"./_iter-step":192,"./_iterators":193,"./_to-iobject":251}],277:[function(require,module,exports){ +'use strict'; +// 22.1.3.13 Array.prototype.join(separator) +var $export = require('./_export'); +var toIObject = require('./_to-iobject'); +var arrayJoin = [].join; + +// fallback for not array-like strings +$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', { + join: function join(separator) { + return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator); + } +}); + +},{"./_export":167,"./_iobject":182,"./_strict-method":239,"./_to-iobject":251}],278:[function(require,module,exports){ +'use strict'; +var $export = require('./_export'); +var toIObject = require('./_to-iobject'); +var toInteger = require('./_to-integer'); +var toLength = require('./_to-length'); +var $native = [].lastIndexOf; +var NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0; + +$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', { + // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex]) + lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) { + // convert -0 to +0 + if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0; + var O = toIObject(this); + var length = toLength(O.length); + var index = length - 1; + if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1])); + if (index < 0) index = length + index; + for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0; + return -1; + } +}); + +},{"./_export":167,"./_strict-method":239,"./_to-integer":250,"./_to-iobject":251,"./_to-length":252}],279:[function(require,module,exports){ +'use strict'; +var $export = require('./_export'); +var $map = require('./_array-methods')(1); + +$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', { + // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg]) + map: function map(callbackfn /* , thisArg */) { + return $map(this, callbackfn, arguments[1]); + } +}); + +},{"./_array-methods":146,"./_export":167,"./_strict-method":239}],280:[function(require,module,exports){ +'use strict'; +var $export = require('./_export'); +var createProperty = require('./_create-property'); + +// WebKit Array.of isn't generic +$export($export.S + $export.F * require('./_fails')(function () { + function F() { /* empty */ } + return !(Array.of.call(F) instanceof F); +}), 'Array', { + // 22.1.2.3 Array.of( ...items) + of: function of(/* ...args */) { + var index = 0; + var aLen = arguments.length; + var result = new (typeof this == 'function' ? this : Array)(aLen); + while (aLen > index) createProperty(result, index, arguments[index++]); + result.length = aLen; + return result; + } +}); + +},{"./_create-property":158,"./_export":167,"./_fails":169}],281:[function(require,module,exports){ +'use strict'; +var $export = require('./_export'); +var $reduce = require('./_array-reduce'); + +$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', { + // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue]) + reduceRight: function reduceRight(callbackfn /* , initialValue */) { + return $reduce(this, callbackfn, arguments.length, arguments[1], true); + } +}); + +},{"./_array-reduce":147,"./_export":167,"./_strict-method":239}],282:[function(require,module,exports){ +'use strict'; +var $export = require('./_export'); +var $reduce = require('./_array-reduce'); + +$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', { + // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue]) + reduce: function reduce(callbackfn /* , initialValue */) { + return $reduce(this, callbackfn, arguments.length, arguments[1], false); + } +}); + +},{"./_array-reduce":147,"./_export":167,"./_strict-method":239}],283:[function(require,module,exports){ +'use strict'; +var $export = require('./_export'); +var html = require('./_html'); +var cof = require('./_cof'); +var toAbsoluteIndex = require('./_to-absolute-index'); +var toLength = require('./_to-length'); +var arraySlice = [].slice; + +// fallback for not array-like ES3 strings and DOM objects +$export($export.P + $export.F * require('./_fails')(function () { + if (html) arraySlice.call(html); +}), 'Array', { + slice: function slice(begin, end) { + var len = toLength(this.length); + var klass = cof(this); + end = end === undefined ? len : end; + if (klass == 'Array') return arraySlice.call(this, begin, end); + var start = toAbsoluteIndex(begin, len); + var upTo = toAbsoluteIndex(end, len); + var size = toLength(upTo - start); + var cloned = new Array(size); + var i = 0; + for (; i < size; i++) cloned[i] = klass == 'String' + ? this.charAt(start + i) + : this[start + i]; + return cloned; + } +}); + +},{"./_cof":152,"./_export":167,"./_fails":169,"./_html":178,"./_to-absolute-index":248,"./_to-length":252}],284:[function(require,module,exports){ +'use strict'; +var $export = require('./_export'); +var $some = require('./_array-methods')(3); + +$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', { + // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg]) + some: function some(callbackfn /* , thisArg */) { + return $some(this, callbackfn, arguments[1]); + } +}); + +},{"./_array-methods":146,"./_export":167,"./_strict-method":239}],285:[function(require,module,exports){ +'use strict'; +var $export = require('./_export'); +var aFunction = require('./_a-function'); +var toObject = require('./_to-object'); +var fails = require('./_fails'); +var $sort = [].sort; +var test = [1, 2, 3]; + +$export($export.P + $export.F * (fails(function () { + // IE8- + test.sort(undefined); +}) || !fails(function () { + // V8 bug + test.sort(null); + // Old WebKit +}) || !require('./_strict-method')($sort)), 'Array', { + // 22.1.3.25 Array.prototype.sort(comparefn) + sort: function sort(comparefn) { + return comparefn === undefined + ? $sort.call(toObject(this)) + : $sort.call(toObject(this), aFunction(comparefn)); + } +}); + +},{"./_a-function":136,"./_export":167,"./_fails":169,"./_strict-method":239,"./_to-object":253}],286:[function(require,module,exports){ +require('./_set-species')('Array'); + +},{"./_set-species":234}],287:[function(require,module,exports){ +// 20.3.3.1 / 15.9.4.4 Date.now() +var $export = require('./_export'); + +$export($export.S, 'Date', { now: function () { return new Date().getTime(); } }); + +},{"./_export":167}],288:[function(require,module,exports){ +// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString() +var $export = require('./_export'); +var toISOString = require('./_date-to-iso-string'); + +// PhantomJS / old WebKit has a broken implementations +$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', { + toISOString: toISOString +}); + +},{"./_date-to-iso-string":160,"./_export":167}],289:[function(require,module,exports){ +'use strict'; +var $export = require('./_export'); +var toObject = require('./_to-object'); +var toPrimitive = require('./_to-primitive'); + +$export($export.P + $export.F * require('./_fails')(function () { + return new Date(NaN).toJSON() !== null + || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1; +}), 'Date', { + // eslint-disable-next-line no-unused-vars + toJSON: function toJSON(key) { + var O = toObject(this); + var pv = toPrimitive(O); + return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString(); + } +}); + +},{"./_export":167,"./_fails":169,"./_to-object":253,"./_to-primitive":254}],290:[function(require,module,exports){ +var TO_PRIMITIVE = require('./_wks')('toPrimitive'); +var proto = Date.prototype; + +if (!(TO_PRIMITIVE in proto)) require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive')); + +},{"./_date-to-primitive":161,"./_hide":177,"./_wks":263}],291:[function(require,module,exports){ +var DateProto = Date.prototype; +var INVALID_DATE = 'Invalid Date'; +var TO_STRING = 'toString'; +var $toString = DateProto[TO_STRING]; +var getTime = DateProto.getTime; +if (new Date(NaN) + '' != INVALID_DATE) { + require('./_redefine')(DateProto, TO_STRING, function toString() { + var value = getTime.call(this); + // eslint-disable-next-line no-self-compare + return value === value ? $toString.call(this) : INVALID_DATE; + }); +} + +},{"./_redefine":226}],292:[function(require,module,exports){ +// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...) +var $export = require('./_export'); + +$export($export.P, 'Function', { bind: require('./_bind') }); + +},{"./_bind":150,"./_export":167}],293:[function(require,module,exports){ +'use strict'; +var isObject = require('./_is-object'); +var getPrototypeOf = require('./_object-gpo'); +var HAS_INSTANCE = require('./_wks')('hasInstance'); +var FunctionProto = Function.prototype; +// 19.2.3.6 Function.prototype[@@hasInstance](V) +if (!(HAS_INSTANCE in FunctionProto)) require('./_object-dp').f(FunctionProto, HAS_INSTANCE, { value: function (O) { + if (typeof this != 'function' || !isObject(O)) return false; + if (!isObject(this.prototype)) return O instanceof this; + // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this: + while (O = getPrototypeOf(O)) if (this.prototype === O) return true; + return false; +} }); + +},{"./_is-object":186,"./_object-dp":206,"./_object-gpo":213,"./_wks":263}],294:[function(require,module,exports){ +var dP = require('./_object-dp').f; +var FProto = Function.prototype; +var nameRE = /^\s*function ([^ (]*)/; +var NAME = 'name'; + +// 19.2.4.2 name +NAME in FProto || require('./_descriptors') && dP(FProto, NAME, { + configurable: true, + get: function () { + try { + return ('' + this).match(nameRE)[1]; + } catch (e) { + return ''; + } + } +}); + +},{"./_descriptors":163,"./_object-dp":206}],295:[function(require,module,exports){ +'use strict'; +var strong = require('./_collection-strong'); +var validate = require('./_validate-collection'); +var MAP = 'Map'; + +// 23.1 Map Objects +module.exports = require('./_collection')(MAP, function (get) { + return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); }; +}, { + // 23.1.3.6 Map.prototype.get(key) + get: function get(key) { + var entry = strong.getEntry(validate(this, MAP), key); + return entry && entry.v; + }, + // 23.1.3.9 Map.prototype.set(key, value) + set: function set(key, value) { + return strong.def(validate(this, MAP), key === 0 ? 0 : key, value); + } +}, strong, true); + +},{"./_collection":156,"./_collection-strong":153,"./_validate-collection":260}],296:[function(require,module,exports){ +// 20.2.2.3 Math.acosh(x) +var $export = require('./_export'); +var log1p = require('./_math-log1p'); +var sqrt = Math.sqrt; +var $acosh = Math.acosh; + +$export($export.S + $export.F * !($acosh + // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509 + && Math.floor($acosh(Number.MAX_VALUE)) == 710 + // Tor Browser bug: Math.acosh(Infinity) -> NaN + && $acosh(Infinity) == Infinity +), 'Math', { + acosh: function acosh(x) { + return (x = +x) < 1 ? NaN : x > 94906265.62425156 + ? Math.log(x) + Math.LN2 + : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1)); + } +}); + +},{"./_export":167,"./_math-log1p":197}],297:[function(require,module,exports){ +// 20.2.2.5 Math.asinh(x) +var $export = require('./_export'); +var $asinh = Math.asinh; + +function asinh(x) { + return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1)); +} + +// Tor Browser bug: Math.asinh(0) -> -0 +$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh }); + +},{"./_export":167}],298:[function(require,module,exports){ +// 20.2.2.7 Math.atanh(x) +var $export = require('./_export'); +var $atanh = Math.atanh; + +// Tor Browser bug: Math.atanh(-0) -> 0 +$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', { + atanh: function atanh(x) { + return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2; + } +}); + +},{"./_export":167}],299:[function(require,module,exports){ +// 20.2.2.9 Math.cbrt(x) +var $export = require('./_export'); +var sign = require('./_math-sign'); + +$export($export.S, 'Math', { + cbrt: function cbrt(x) { + return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3); + } +}); + +},{"./_export":167,"./_math-sign":199}],300:[function(require,module,exports){ +// 20.2.2.11 Math.clz32(x) +var $export = require('./_export'); + +$export($export.S, 'Math', { + clz32: function clz32(x) { + return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32; + } +}); + +},{"./_export":167}],301:[function(require,module,exports){ +// 20.2.2.12 Math.cosh(x) +var $export = require('./_export'); +var exp = Math.exp; + +$export($export.S, 'Math', { + cosh: function cosh(x) { + return (exp(x = +x) + exp(-x)) / 2; + } +}); + +},{"./_export":167}],302:[function(require,module,exports){ +// 20.2.2.14 Math.expm1(x) +var $export = require('./_export'); +var $expm1 = require('./_math-expm1'); + +$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 }); + +},{"./_export":167,"./_math-expm1":195}],303:[function(require,module,exports){ +// 20.2.2.16 Math.fround(x) +var $export = require('./_export'); + +$export($export.S, 'Math', { fround: require('./_math-fround') }); + +},{"./_export":167,"./_math-fround":196}],304:[function(require,module,exports){ +// 20.2.2.17 Math.hypot([value1[, value2[, … ]]]) +var $export = require('./_export'); +var abs = Math.abs; + +$export($export.S, 'Math', { + hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars + var sum = 0; + var i = 0; + var aLen = arguments.length; + var larg = 0; + var arg, div; + while (i < aLen) { + arg = abs(arguments[i++]); + if (larg < arg) { + div = larg / arg; + sum = sum * div * div + 1; + larg = arg; + } else if (arg > 0) { + div = arg / larg; + sum += div * div; + } else sum += arg; + } + return larg === Infinity ? Infinity : larg * Math.sqrt(sum); + } +}); + +},{"./_export":167}],305:[function(require,module,exports){ +// 20.2.2.18 Math.imul(x, y) +var $export = require('./_export'); +var $imul = Math.imul; + +// some WebKit versions fails with big numbers, some has wrong arity +$export($export.S + $export.F * require('./_fails')(function () { + return $imul(0xffffffff, 5) != -5 || $imul.length != 2; +}), 'Math', { + imul: function imul(x, y) { + var UINT16 = 0xffff; + var xn = +x; + var yn = +y; + var xl = UINT16 & xn; + var yl = UINT16 & yn; + return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0); + } +}); + +},{"./_export":167,"./_fails":169}],306:[function(require,module,exports){ +// 20.2.2.21 Math.log10(x) +var $export = require('./_export'); + +$export($export.S, 'Math', { + log10: function log10(x) { + return Math.log(x) * Math.LOG10E; + } +}); + +},{"./_export":167}],307:[function(require,module,exports){ +// 20.2.2.20 Math.log1p(x) +var $export = require('./_export'); + +$export($export.S, 'Math', { log1p: require('./_math-log1p') }); + +},{"./_export":167,"./_math-log1p":197}],308:[function(require,module,exports){ +// 20.2.2.22 Math.log2(x) +var $export = require('./_export'); + +$export($export.S, 'Math', { + log2: function log2(x) { + return Math.log(x) / Math.LN2; + } +}); + +},{"./_export":167}],309:[function(require,module,exports){ +// 20.2.2.28 Math.sign(x) +var $export = require('./_export'); + +$export($export.S, 'Math', { sign: require('./_math-sign') }); + +},{"./_export":167,"./_math-sign":199}],310:[function(require,module,exports){ +// 20.2.2.30 Math.sinh(x) +var $export = require('./_export'); +var expm1 = require('./_math-expm1'); +var exp = Math.exp; + +// V8 near Chromium 38 has a problem with very small numbers +$export($export.S + $export.F * require('./_fails')(function () { + return !Math.sinh(-2e-17) != -2e-17; +}), 'Math', { + sinh: function sinh(x) { + return Math.abs(x = +x) < 1 + ? (expm1(x) - expm1(-x)) / 2 + : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2); + } +}); + +},{"./_export":167,"./_fails":169,"./_math-expm1":195}],311:[function(require,module,exports){ +// 20.2.2.33 Math.tanh(x) +var $export = require('./_export'); +var expm1 = require('./_math-expm1'); +var exp = Math.exp; + +$export($export.S, 'Math', { + tanh: function tanh(x) { + var a = expm1(x = +x); + var b = expm1(-x); + return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x)); + } +}); + +},{"./_export":167,"./_math-expm1":195}],312:[function(require,module,exports){ +// 20.2.2.34 Math.trunc(x) +var $export = require('./_export'); + +$export($export.S, 'Math', { + trunc: function trunc(it) { + return (it > 0 ? Math.floor : Math.ceil)(it); + } +}); + +},{"./_export":167}],313:[function(require,module,exports){ +'use strict'; +var global = require('./_global'); +var has = require('./_has'); +var cof = require('./_cof'); +var inheritIfRequired = require('./_inherit-if-required'); +var toPrimitive = require('./_to-primitive'); +var fails = require('./_fails'); +var gOPN = require('./_object-gopn').f; +var gOPD = require('./_object-gopd').f; +var dP = require('./_object-dp').f; +var $trim = require('./_string-trim').trim; +var NUMBER = 'Number'; +var $Number = global[NUMBER]; +var Base = $Number; +var proto = $Number.prototype; +// Opera ~12 has broken Object#toString +var BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER; +var TRIM = 'trim' in String.prototype; + +// 7.1.3 ToNumber(argument) +var toNumber = function (argument) { + var it = toPrimitive(argument, false); + if (typeof it == 'string' && it.length > 2) { + it = TRIM ? it.trim() : $trim(it, 3); + var first = it.charCodeAt(0); + var third, radix, maxCode; + if (first === 43 || first === 45) { + third = it.charCodeAt(2); + if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix + } else if (first === 48) { + switch (it.charCodeAt(1)) { + case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i + case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i + default: return +it; + } + for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) { + code = digits.charCodeAt(i); + // parseInt parses a string to a first unavailable symbol + // but ToNumber should return NaN if a string contains unavailable symbols + if (code < 48 || code > maxCode) return NaN; + } return parseInt(digits, radix); + } + } return +it; +}; + +if (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) { + $Number = function Number(value) { + var it = arguments.length < 1 ? 0 : value; + var that = this; + return that instanceof $Number + // check on 1..constructor(foo) case + && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER) + ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it); + }; + for (var keys = require('./_descriptors') ? gOPN(Base) : ( + // ES3: + 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' + + // ES6 (in case, if modules with ES6 Number statics required before): + 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' + + 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger' + ).split(','), j = 0, key; keys.length > j; j++) { + if (has(Base, key = keys[j]) && !has($Number, key)) { + dP($Number, key, gOPD(Base, key)); + } + } + $Number.prototype = proto; + proto.constructor = $Number; + require('./_redefine')(global, NUMBER, $Number); +} + +},{"./_cof":152,"./_descriptors":163,"./_fails":169,"./_global":175,"./_has":176,"./_inherit-if-required":180,"./_object-create":205,"./_object-dp":206,"./_object-gopd":209,"./_object-gopn":211,"./_redefine":226,"./_string-trim":245,"./_to-primitive":254}],314:[function(require,module,exports){ +// 20.1.2.1 Number.EPSILON +var $export = require('./_export'); + +$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) }); + +},{"./_export":167}],315:[function(require,module,exports){ +// 20.1.2.2 Number.isFinite(number) +var $export = require('./_export'); +var _isFinite = require('./_global').isFinite; + +$export($export.S, 'Number', { + isFinite: function isFinite(it) { + return typeof it == 'number' && _isFinite(it); + } +}); + +},{"./_export":167,"./_global":175}],316:[function(require,module,exports){ +// 20.1.2.3 Number.isInteger(number) +var $export = require('./_export'); + +$export($export.S, 'Number', { isInteger: require('./_is-integer') }); + +},{"./_export":167,"./_is-integer":185}],317:[function(require,module,exports){ +// 20.1.2.4 Number.isNaN(number) +var $export = require('./_export'); + +$export($export.S, 'Number', { + isNaN: function isNaN(number) { + // eslint-disable-next-line no-self-compare + return number != number; + } +}); + +},{"./_export":167}],318:[function(require,module,exports){ +// 20.1.2.5 Number.isSafeInteger(number) +var $export = require('./_export'); +var isInteger = require('./_is-integer'); +var abs = Math.abs; + +$export($export.S, 'Number', { + isSafeInteger: function isSafeInteger(number) { + return isInteger(number) && abs(number) <= 0x1fffffffffffff; + } +}); + +},{"./_export":167,"./_is-integer":185}],319:[function(require,module,exports){ +// 20.1.2.6 Number.MAX_SAFE_INTEGER +var $export = require('./_export'); + +$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff }); + +},{"./_export":167}],320:[function(require,module,exports){ +// 20.1.2.10 Number.MIN_SAFE_INTEGER +var $export = require('./_export'); + +$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff }); + +},{"./_export":167}],321:[function(require,module,exports){ +var $export = require('./_export'); +var $parseFloat = require('./_parse-float'); +// 20.1.2.12 Number.parseFloat(string) +$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat }); + +},{"./_export":167,"./_parse-float":220}],322:[function(require,module,exports){ +var $export = require('./_export'); +var $parseInt = require('./_parse-int'); +// 20.1.2.13 Number.parseInt(string, radix) +$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt }); + +},{"./_export":167,"./_parse-int":221}],323:[function(require,module,exports){ +'use strict'; +var $export = require('./_export'); +var toInteger = require('./_to-integer'); +var aNumberValue = require('./_a-number-value'); +var repeat = require('./_string-repeat'); +var $toFixed = 1.0.toFixed; +var floor = Math.floor; +var data = [0, 0, 0, 0, 0, 0]; +var ERROR = 'Number.toFixed: incorrect invocation!'; +var ZERO = '0'; + +var multiply = function (n, c) { + var i = -1; + var c2 = c; + while (++i < 6) { + c2 += n * data[i]; + data[i] = c2 % 1e7; + c2 = floor(c2 / 1e7); + } +}; +var divide = function (n) { + var i = 6; + var c = 0; + while (--i >= 0) { + c += data[i]; + data[i] = floor(c / n); + c = (c % n) * 1e7; + } +}; +var numToString = function () { + var i = 6; + var s = ''; + while (--i >= 0) { + if (s !== '' || i === 0 || data[i] !== 0) { + var t = String(data[i]); + s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t; + } + } return s; +}; +var pow = function (x, n, acc) { + return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc); +}; +var log = function (x) { + var n = 0; + var x2 = x; + while (x2 >= 4096) { + n += 12; + x2 /= 4096; + } + while (x2 >= 2) { + n += 1; + x2 /= 2; + } return n; +}; + +$export($export.P + $export.F * (!!$toFixed && ( + 0.00008.toFixed(3) !== '0.000' || + 0.9.toFixed(0) !== '1' || + 1.255.toFixed(2) !== '1.25' || + 1000000000000000128.0.toFixed(0) !== '1000000000000000128' +) || !require('./_fails')(function () { + // V8 ~ Android 4.3- + $toFixed.call({}); +})), 'Number', { + toFixed: function toFixed(fractionDigits) { + var x = aNumberValue(this, ERROR); + var f = toInteger(fractionDigits); + var s = ''; + var m = ZERO; + var e, z, j, k; + if (f < 0 || f > 20) throw RangeError(ERROR); + // eslint-disable-next-line no-self-compare + if (x != x) return 'NaN'; + if (x <= -1e21 || x >= 1e21) return String(x); + if (x < 0) { + s = '-'; + x = -x; + } + if (x > 1e-21) { + e = log(x * pow(2, 69, 1)) - 69; + z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1); + z *= 0x10000000000000; + e = 52 - e; + if (e > 0) { + multiply(0, z); + j = f; + while (j >= 7) { + multiply(1e7, 0); + j -= 7; + } + multiply(pow(10, j, 1), 0); + j = e - 1; + while (j >= 23) { + divide(1 << 23); + j -= 23; + } + divide(1 << j); + multiply(1, 1); + divide(2); + m = numToString(); + } else { + multiply(0, z); + multiply(1 << -e, 0); + m = numToString() + repeat.call(ZERO, f); + } + } + if (f > 0) { + k = m.length; + m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f)); + } else { + m = s + m; + } return m; + } +}); + +},{"./_a-number-value":137,"./_export":167,"./_fails":169,"./_string-repeat":244,"./_to-integer":250}],324:[function(require,module,exports){ +'use strict'; +var $export = require('./_export'); +var $fails = require('./_fails'); +var aNumberValue = require('./_a-number-value'); +var $toPrecision = 1.0.toPrecision; + +$export($export.P + $export.F * ($fails(function () { + // IE7- + return $toPrecision.call(1, undefined) !== '1'; +}) || !$fails(function () { + // V8 ~ Android 4.3- + $toPrecision.call({}); +})), 'Number', { + toPrecision: function toPrecision(precision) { + var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!'); + return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision); + } +}); + +},{"./_a-number-value":137,"./_export":167,"./_fails":169}],325:[function(require,module,exports){ +// 19.1.3.1 Object.assign(target, source) +var $export = require('./_export'); + +$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') }); + +},{"./_export":167,"./_object-assign":204}],326:[function(require,module,exports){ +var $export = require('./_export'); +// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) +$export($export.S, 'Object', { create: require('./_object-create') }); + +},{"./_export":167,"./_object-create":205}],327:[function(require,module,exports){ +var $export = require('./_export'); +// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties) +$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') }); + +},{"./_descriptors":163,"./_export":167,"./_object-dps":207}],328:[function(require,module,exports){ +var $export = require('./_export'); +// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes) +$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f }); + +},{"./_descriptors":163,"./_export":167,"./_object-dp":206}],329:[function(require,module,exports){ +// 19.1.2.5 Object.freeze(O) +var isObject = require('./_is-object'); +var meta = require('./_meta').onFreeze; + +require('./_object-sap')('freeze', function ($freeze) { + return function freeze(it) { + return $freeze && isObject(it) ? $freeze(meta(it)) : it; + }; +}); + +},{"./_is-object":186,"./_meta":200,"./_object-sap":217}],330:[function(require,module,exports){ +// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P) +var toIObject = require('./_to-iobject'); +var $getOwnPropertyDescriptor = require('./_object-gopd').f; + +require('./_object-sap')('getOwnPropertyDescriptor', function () { + return function getOwnPropertyDescriptor(it, key) { + return $getOwnPropertyDescriptor(toIObject(it), key); + }; +}); + +},{"./_object-gopd":209,"./_object-sap":217,"./_to-iobject":251}],331:[function(require,module,exports){ +// 19.1.2.7 Object.getOwnPropertyNames(O) +require('./_object-sap')('getOwnPropertyNames', function () { + return require('./_object-gopn-ext').f; +}); + +},{"./_object-gopn-ext":210,"./_object-sap":217}],332:[function(require,module,exports){ +// 19.1.2.9 Object.getPrototypeOf(O) +var toObject = require('./_to-object'); +var $getPrototypeOf = require('./_object-gpo'); + +require('./_object-sap')('getPrototypeOf', function () { + return function getPrototypeOf(it) { + return $getPrototypeOf(toObject(it)); + }; +}); + +},{"./_object-gpo":213,"./_object-sap":217,"./_to-object":253}],333:[function(require,module,exports){ +// 19.1.2.11 Object.isExtensible(O) +var isObject = require('./_is-object'); + +require('./_object-sap')('isExtensible', function ($isExtensible) { + return function isExtensible(it) { + return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false; + }; +}); + +},{"./_is-object":186,"./_object-sap":217}],334:[function(require,module,exports){ +// 19.1.2.12 Object.isFrozen(O) +var isObject = require('./_is-object'); + +require('./_object-sap')('isFrozen', function ($isFrozen) { + return function isFrozen(it) { + return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true; + }; +}); + +},{"./_is-object":186,"./_object-sap":217}],335:[function(require,module,exports){ +// 19.1.2.13 Object.isSealed(O) +var isObject = require('./_is-object'); + +require('./_object-sap')('isSealed', function ($isSealed) { + return function isSealed(it) { + return isObject(it) ? $isSealed ? $isSealed(it) : false : true; + }; +}); + +},{"./_is-object":186,"./_object-sap":217}],336:[function(require,module,exports){ +// 19.1.3.10 Object.is(value1, value2) +var $export = require('./_export'); +$export($export.S, 'Object', { is: require('./_same-value') }); + +},{"./_export":167,"./_same-value":230}],337:[function(require,module,exports){ +// 19.1.2.14 Object.keys(O) +var toObject = require('./_to-object'); +var $keys = require('./_object-keys'); + +require('./_object-sap')('keys', function () { + return function keys(it) { + return $keys(toObject(it)); + }; +}); + +},{"./_object-keys":215,"./_object-sap":217,"./_to-object":253}],338:[function(require,module,exports){ +// 19.1.2.15 Object.preventExtensions(O) +var isObject = require('./_is-object'); +var meta = require('./_meta').onFreeze; + +require('./_object-sap')('preventExtensions', function ($preventExtensions) { + return function preventExtensions(it) { + return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it; + }; +}); + +},{"./_is-object":186,"./_meta":200,"./_object-sap":217}],339:[function(require,module,exports){ +// 19.1.2.17 Object.seal(O) +var isObject = require('./_is-object'); +var meta = require('./_meta').onFreeze; + +require('./_object-sap')('seal', function ($seal) { + return function seal(it) { + return $seal && isObject(it) ? $seal(meta(it)) : it; + }; +}); + +},{"./_is-object":186,"./_meta":200,"./_object-sap":217}],340:[function(require,module,exports){ +// 19.1.3.19 Object.setPrototypeOf(O, proto) +var $export = require('./_export'); +$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set }); + +},{"./_export":167,"./_set-proto":233}],341:[function(require,module,exports){ +'use strict'; +// 19.1.3.6 Object.prototype.toString() +var classof = require('./_classof'); +var test = {}; +test[require('./_wks')('toStringTag')] = 'z'; +if (test + '' != '[object z]') { + require('./_redefine')(Object.prototype, 'toString', function toString() { + return '[object ' + classof(this) + ']'; + }, true); +} + +},{"./_classof":151,"./_redefine":226,"./_wks":263}],342:[function(require,module,exports){ +var $export = require('./_export'); +var $parseFloat = require('./_parse-float'); +// 18.2.4 parseFloat(string) +$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat }); + +},{"./_export":167,"./_parse-float":220}],343:[function(require,module,exports){ +var $export = require('./_export'); +var $parseInt = require('./_parse-int'); +// 18.2.5 parseInt(string, radix) +$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt }); + +},{"./_export":167,"./_parse-int":221}],344:[function(require,module,exports){ +'use strict'; +var LIBRARY = require('./_library'); +var global = require('./_global'); +var ctx = require('./_ctx'); +var classof = require('./_classof'); +var $export = require('./_export'); +var isObject = require('./_is-object'); +var aFunction = require('./_a-function'); +var anInstance = require('./_an-instance'); +var forOf = require('./_for-of'); +var speciesConstructor = require('./_species-constructor'); +var task = require('./_task').set; +var microtask = require('./_microtask')(); +var newPromiseCapabilityModule = require('./_new-promise-capability'); +var perform = require('./_perform'); +var userAgent = require('./_user-agent'); +var promiseResolve = require('./_promise-resolve'); +var PROMISE = 'Promise'; +var TypeError = global.TypeError; +var process = global.process; +var versions = process && process.versions; +var v8 = versions && versions.v8 || ''; +var $Promise = global[PROMISE]; +var isNode = classof(process) == 'process'; +var empty = function () { /* empty */ }; +var Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper; +var newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f; + +var USE_NATIVE = !!function () { + try { + // correct subclassing with @@species support + var promise = $Promise.resolve(1); + var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) { + exec(empty, empty); + }; + // unhandled rejections tracking support, NodeJS Promise without it fails @@species test + return (isNode || typeof PromiseRejectionEvent == 'function') + && promise.then(empty) instanceof FakePromise + // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables + // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 + // we can't detect it synchronously, so just check versions + && v8.indexOf('6.6') !== 0 + && userAgent.indexOf('Chrome/66') === -1; + } catch (e) { /* empty */ } +}(); + +// helpers +var isThenable = function (it) { + var then; + return isObject(it) && typeof (then = it.then) == 'function' ? then : false; +}; +var notify = function (promise, isReject) { + if (promise._n) return; + promise._n = true; + var chain = promise._c; + microtask(function () { + var value = promise._v; + var ok = promise._s == 1; + var i = 0; + var run = function (reaction) { + var handler = ok ? reaction.ok : reaction.fail; + var resolve = reaction.resolve; + var reject = reaction.reject; + var domain = reaction.domain; + var result, then, exited; + try { + if (handler) { + if (!ok) { + if (promise._h == 2) onHandleUnhandled(promise); + promise._h = 1; + } + if (handler === true) result = value; + else { + if (domain) domain.enter(); + result = handler(value); // may throw + if (domain) { + domain.exit(); + exited = true; + } + } + if (result === reaction.promise) { + reject(TypeError('Promise-chain cycle')); + } else if (then = isThenable(result)) { + then.call(result, resolve, reject); + } else resolve(result); + } else reject(value); + } catch (e) { + if (domain && !exited) domain.exit(); + reject(e); + } + }; + while (chain.length > i) run(chain[i++]); // variable length - can't use forEach + promise._c = []; + promise._n = false; + if (isReject && !promise._h) onUnhandled(promise); + }); +}; +var onUnhandled = function (promise) { + task.call(global, function () { + var value = promise._v; + var unhandled = isUnhandled(promise); + var result, handler, console; + if (unhandled) { + result = perform(function () { + if (isNode) { + process.emit('unhandledRejection', value, promise); + } else if (handler = global.onunhandledrejection) { + handler({ promise: promise, reason: value }); + } else if ((console = global.console) && console.error) { + console.error('Unhandled promise rejection', value); + } + }); + // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should + promise._h = isNode || isUnhandled(promise) ? 2 : 1; + } promise._a = undefined; + if (unhandled && result.e) throw result.v; + }); +}; +var isUnhandled = function (promise) { + return promise._h !== 1 && (promise._a || promise._c).length === 0; +}; +var onHandleUnhandled = function (promise) { + task.call(global, function () { + var handler; + if (isNode) { + process.emit('rejectionHandled', promise); + } else if (handler = global.onrejectionhandled) { + handler({ promise: promise, reason: promise._v }); + } + }); +}; +var $reject = function (value) { + var promise = this; + if (promise._d) return; + promise._d = true; + promise = promise._w || promise; // unwrap + promise._v = value; + promise._s = 2; + if (!promise._a) promise._a = promise._c.slice(); + notify(promise, true); +}; +var $resolve = function (value) { + var promise = this; + var then; + if (promise._d) return; + promise._d = true; + promise = promise._w || promise; // unwrap + try { + if (promise === value) throw TypeError("Promise can't be resolved itself"); + if (then = isThenable(value)) { + microtask(function () { + var wrapper = { _w: promise, _d: false }; // wrap + try { + then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1)); + } catch (e) { + $reject.call(wrapper, e); + } + }); + } else { + promise._v = value; + promise._s = 1; + notify(promise, false); + } + } catch (e) { + $reject.call({ _w: promise, _d: false }, e); // wrap + } +}; + +// constructor polyfill +if (!USE_NATIVE) { + // 25.4.3.1 Promise(executor) + $Promise = function Promise(executor) { + anInstance(this, $Promise, PROMISE, '_h'); + aFunction(executor); + Internal.call(this); + try { + executor(ctx($resolve, this, 1), ctx($reject, this, 1)); + } catch (err) { + $reject.call(this, err); + } + }; + // eslint-disable-next-line no-unused-vars + Internal = function Promise(executor) { + this._c = []; // <- awaiting reactions + this._a = undefined; // <- checked in isUnhandled reactions + this._s = 0; // <- state + this._d = false; // <- done + this._v = undefined; // <- value + this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled + this._n = false; // <- notify + }; + Internal.prototype = require('./_redefine-all')($Promise.prototype, { + // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected) + then: function then(onFulfilled, onRejected) { + var reaction = newPromiseCapability(speciesConstructor(this, $Promise)); + reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; + reaction.fail = typeof onRejected == 'function' && onRejected; + reaction.domain = isNode ? process.domain : undefined; + this._c.push(reaction); + if (this._a) this._a.push(reaction); + if (this._s) notify(this, false); + return reaction.promise; + }, + // 25.4.5.1 Promise.prototype.catch(onRejected) + 'catch': function (onRejected) { + return this.then(undefined, onRejected); + } + }); + OwnPromiseCapability = function () { + var promise = new Internal(); + this.promise = promise; + this.resolve = ctx($resolve, promise, 1); + this.reject = ctx($reject, promise, 1); + }; + newPromiseCapabilityModule.f = newPromiseCapability = function (C) { + return C === $Promise || C === Wrapper + ? new OwnPromiseCapability(C) + : newGenericPromiseCapability(C); + }; +} + +$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise }); +require('./_set-to-string-tag')($Promise, PROMISE); +require('./_set-species')(PROMISE); +Wrapper = require('./_core')[PROMISE]; + +// statics +$export($export.S + $export.F * !USE_NATIVE, PROMISE, { + // 25.4.4.5 Promise.reject(r) + reject: function reject(r) { + var capability = newPromiseCapability(this); + var $$reject = capability.reject; + $$reject(r); + return capability.promise; + } +}); +$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, { + // 25.4.4.6 Promise.resolve(x) + resolve: function resolve(x) { + return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x); + } +}); +$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) { + $Promise.all(iter)['catch'](empty); +})), PROMISE, { + // 25.4.4.1 Promise.all(iterable) + all: function all(iterable) { + var C = this; + var capability = newPromiseCapability(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform(function () { + var values = []; + var index = 0; + var remaining = 1; + forOf(iterable, false, function (promise) { + var $index = index++; + var alreadyCalled = false; + values.push(undefined); + remaining++; + C.resolve(promise).then(function (value) { + if (alreadyCalled) return; + alreadyCalled = true; + values[$index] = value; + --remaining || resolve(values); + }, reject); + }); + --remaining || resolve(values); + }); + if (result.e) reject(result.v); + return capability.promise; + }, + // 25.4.4.4 Promise.race(iterable) + race: function race(iterable) { + var C = this; + var capability = newPromiseCapability(C); + var reject = capability.reject; + var result = perform(function () { + forOf(iterable, false, function (promise) { + C.resolve(promise).then(capability.resolve, reject); + }); + }); + if (result.e) reject(result.v); + return capability.promise; + } +}); + +},{"./_a-function":136,"./_an-instance":140,"./_classof":151,"./_core":157,"./_ctx":159,"./_export":167,"./_for-of":173,"./_global":175,"./_is-object":186,"./_iter-detect":191,"./_library":194,"./_microtask":202,"./_new-promise-capability":203,"./_perform":222,"./_promise-resolve":223,"./_redefine-all":225,"./_set-species":234,"./_set-to-string-tag":235,"./_species-constructor":238,"./_task":247,"./_user-agent":259,"./_wks":263}],345:[function(require,module,exports){ +// 26.1.1 Reflect.apply(target, thisArgument, argumentsList) +var $export = require('./_export'); +var aFunction = require('./_a-function'); +var anObject = require('./_an-object'); +var rApply = (require('./_global').Reflect || {}).apply; +var fApply = Function.apply; +// MS Edge argumentsList argument is optional +$export($export.S + $export.F * !require('./_fails')(function () { + rApply(function () { /* empty */ }); +}), 'Reflect', { + apply: function apply(target, thisArgument, argumentsList) { + var T = aFunction(target); + var L = anObject(argumentsList); + return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L); + } +}); + +},{"./_a-function":136,"./_an-object":141,"./_export":167,"./_fails":169,"./_global":175}],346:[function(require,module,exports){ +// 26.1.2 Reflect.construct(target, argumentsList [, newTarget]) +var $export = require('./_export'); +var create = require('./_object-create'); +var aFunction = require('./_a-function'); +var anObject = require('./_an-object'); +var isObject = require('./_is-object'); +var fails = require('./_fails'); +var bind = require('./_bind'); +var rConstruct = (require('./_global').Reflect || {}).construct; + +// MS Edge supports only 2 arguments and argumentsList argument is optional +// FF Nightly sets third argument as `new.target`, but does not create `this` from it +var NEW_TARGET_BUG = fails(function () { + function F() { /* empty */ } + return !(rConstruct(function () { /* empty */ }, [], F) instanceof F); +}); +var ARGS_BUG = !fails(function () { + rConstruct(function () { /* empty */ }); +}); + +$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', { + construct: function construct(Target, args /* , newTarget */) { + aFunction(Target); + anObject(args); + var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]); + if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget); + if (Target == newTarget) { + // w/o altered newTarget, optimization for 0-4 arguments + switch (args.length) { + case 0: return new Target(); + case 1: return new Target(args[0]); + case 2: return new Target(args[0], args[1]); + case 3: return new Target(args[0], args[1], args[2]); + case 4: return new Target(args[0], args[1], args[2], args[3]); + } + // w/o altered newTarget, lot of arguments case + var $args = [null]; + $args.push.apply($args, args); + return new (bind.apply(Target, $args))(); + } + // with altered newTarget, not support built-in constructors + var proto = newTarget.prototype; + var instance = create(isObject(proto) ? proto : Object.prototype); + var result = Function.apply.call(Target, instance, args); + return isObject(result) ? result : instance; + } +}); + +},{"./_a-function":136,"./_an-object":141,"./_bind":150,"./_export":167,"./_fails":169,"./_global":175,"./_is-object":186,"./_object-create":205}],347:[function(require,module,exports){ +// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes) +var dP = require('./_object-dp'); +var $export = require('./_export'); +var anObject = require('./_an-object'); +var toPrimitive = require('./_to-primitive'); + +// MS Edge has broken Reflect.defineProperty - throwing instead of returning false +$export($export.S + $export.F * require('./_fails')(function () { + // eslint-disable-next-line no-undef + Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 }); +}), 'Reflect', { + defineProperty: function defineProperty(target, propertyKey, attributes) { + anObject(target); + propertyKey = toPrimitive(propertyKey, true); + anObject(attributes); + try { + dP.f(target, propertyKey, attributes); + return true; + } catch (e) { + return false; + } + } +}); + +},{"./_an-object":141,"./_export":167,"./_fails":169,"./_object-dp":206,"./_to-primitive":254}],348:[function(require,module,exports){ +// 26.1.4 Reflect.deleteProperty(target, propertyKey) +var $export = require('./_export'); +var gOPD = require('./_object-gopd').f; +var anObject = require('./_an-object'); + +$export($export.S, 'Reflect', { + deleteProperty: function deleteProperty(target, propertyKey) { + var desc = gOPD(anObject(target), propertyKey); + return desc && !desc.configurable ? false : delete target[propertyKey]; + } +}); + +},{"./_an-object":141,"./_export":167,"./_object-gopd":209}],349:[function(require,module,exports){ +'use strict'; +// 26.1.5 Reflect.enumerate(target) +var $export = require('./_export'); +var anObject = require('./_an-object'); +var Enumerate = function (iterated) { + this._t = anObject(iterated); // target + this._i = 0; // next index + var keys = this._k = []; // keys + var key; + for (key in iterated) keys.push(key); +}; +require('./_iter-create')(Enumerate, 'Object', function () { + var that = this; + var keys = that._k; + var key; + do { + if (that._i >= keys.length) return { value: undefined, done: true }; + } while (!((key = keys[that._i++]) in that._t)); + return { value: key, done: false }; +}); + +$export($export.S, 'Reflect', { + enumerate: function enumerate(target) { + return new Enumerate(target); + } +}); + +},{"./_an-object":141,"./_export":167,"./_iter-create":189}],350:[function(require,module,exports){ +// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey) +var gOPD = require('./_object-gopd'); +var $export = require('./_export'); +var anObject = require('./_an-object'); + +$export($export.S, 'Reflect', { + getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) { + return gOPD.f(anObject(target), propertyKey); + } +}); + +},{"./_an-object":141,"./_export":167,"./_object-gopd":209}],351:[function(require,module,exports){ +// 26.1.8 Reflect.getPrototypeOf(target) +var $export = require('./_export'); +var getProto = require('./_object-gpo'); +var anObject = require('./_an-object'); + +$export($export.S, 'Reflect', { + getPrototypeOf: function getPrototypeOf(target) { + return getProto(anObject(target)); + } +}); + +},{"./_an-object":141,"./_export":167,"./_object-gpo":213}],352:[function(require,module,exports){ +// 26.1.6 Reflect.get(target, propertyKey [, receiver]) +var gOPD = require('./_object-gopd'); +var getPrototypeOf = require('./_object-gpo'); +var has = require('./_has'); +var $export = require('./_export'); +var isObject = require('./_is-object'); +var anObject = require('./_an-object'); + +function get(target, propertyKey /* , receiver */) { + var receiver = arguments.length < 3 ? target : arguments[2]; + var desc, proto; + if (anObject(target) === receiver) return target[propertyKey]; + if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value') + ? desc.value + : desc.get !== undefined + ? desc.get.call(receiver) + : undefined; + if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver); +} + +$export($export.S, 'Reflect', { get: get }); + +},{"./_an-object":141,"./_export":167,"./_has":176,"./_is-object":186,"./_object-gopd":209,"./_object-gpo":213}],353:[function(require,module,exports){ +// 26.1.9 Reflect.has(target, propertyKey) +var $export = require('./_export'); + +$export($export.S, 'Reflect', { + has: function has(target, propertyKey) { + return propertyKey in target; + } +}); + +},{"./_export":167}],354:[function(require,module,exports){ +// 26.1.10 Reflect.isExtensible(target) +var $export = require('./_export'); +var anObject = require('./_an-object'); +var $isExtensible = Object.isExtensible; + +$export($export.S, 'Reflect', { + isExtensible: function isExtensible(target) { + anObject(target); + return $isExtensible ? $isExtensible(target) : true; + } +}); + +},{"./_an-object":141,"./_export":167}],355:[function(require,module,exports){ +// 26.1.11 Reflect.ownKeys(target) +var $export = require('./_export'); + +$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') }); + +},{"./_export":167,"./_own-keys":219}],356:[function(require,module,exports){ +// 26.1.12 Reflect.preventExtensions(target) +var $export = require('./_export'); +var anObject = require('./_an-object'); +var $preventExtensions = Object.preventExtensions; + +$export($export.S, 'Reflect', { + preventExtensions: function preventExtensions(target) { + anObject(target); + try { + if ($preventExtensions) $preventExtensions(target); + return true; + } catch (e) { + return false; + } + } +}); + +},{"./_an-object":141,"./_export":167}],357:[function(require,module,exports){ +// 26.1.14 Reflect.setPrototypeOf(target, proto) +var $export = require('./_export'); +var setProto = require('./_set-proto'); + +if (setProto) $export($export.S, 'Reflect', { + setPrototypeOf: function setPrototypeOf(target, proto) { + setProto.check(target, proto); + try { + setProto.set(target, proto); + return true; + } catch (e) { + return false; + } + } +}); + +},{"./_export":167,"./_set-proto":233}],358:[function(require,module,exports){ +// 26.1.13 Reflect.set(target, propertyKey, V [, receiver]) +var dP = require('./_object-dp'); +var gOPD = require('./_object-gopd'); +var getPrototypeOf = require('./_object-gpo'); +var has = require('./_has'); +var $export = require('./_export'); +var createDesc = require('./_property-desc'); +var anObject = require('./_an-object'); +var isObject = require('./_is-object'); + +function set(target, propertyKey, V /* , receiver */) { + var receiver = arguments.length < 4 ? target : arguments[3]; + var ownDesc = gOPD.f(anObject(target), propertyKey); + var existingDescriptor, proto; + if (!ownDesc) { + if (isObject(proto = getPrototypeOf(target))) { + return set(proto, propertyKey, V, receiver); + } + ownDesc = createDesc(0); + } + if (has(ownDesc, 'value')) { + if (ownDesc.writable === false || !isObject(receiver)) return false; + if (existingDescriptor = gOPD.f(receiver, propertyKey)) { + if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false; + existingDescriptor.value = V; + dP.f(receiver, propertyKey, existingDescriptor); + } else dP.f(receiver, propertyKey, createDesc(0, V)); + return true; + } + return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true); +} + +$export($export.S, 'Reflect', { set: set }); + +},{"./_an-object":141,"./_export":167,"./_has":176,"./_is-object":186,"./_object-dp":206,"./_object-gopd":209,"./_object-gpo":213,"./_property-desc":224}],359:[function(require,module,exports){ +var global = require('./_global'); +var inheritIfRequired = require('./_inherit-if-required'); +var dP = require('./_object-dp').f; +var gOPN = require('./_object-gopn').f; +var isRegExp = require('./_is-regexp'); +var $flags = require('./_flags'); +var $RegExp = global.RegExp; +var Base = $RegExp; +var proto = $RegExp.prototype; +var re1 = /a/g; +var re2 = /a/g; +// "new" creates a new object, old webkit buggy here +var CORRECT_NEW = new $RegExp(re1) !== re1; + +if (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () { + re2[require('./_wks')('match')] = false; + // RegExp constructor can alter flags and IsRegExp works correct with @@match + return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i'; +}))) { + $RegExp = function RegExp(p, f) { + var tiRE = this instanceof $RegExp; + var piRE = isRegExp(p); + var fiU = f === undefined; + return !tiRE && piRE && p.constructor === $RegExp && fiU ? p + : inheritIfRequired(CORRECT_NEW + ? new Base(piRE && !fiU ? p.source : p, f) + : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f) + , tiRE ? this : proto, $RegExp); + }; + var proxy = function (key) { + key in $RegExp || dP($RegExp, key, { + configurable: true, + get: function () { return Base[key]; }, + set: function (it) { Base[key] = it; } + }); + }; + for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]); + proto.constructor = $RegExp; + $RegExp.prototype = proto; + require('./_redefine')(global, 'RegExp', $RegExp); +} + +require('./_set-species')('RegExp'); + +},{"./_descriptors":163,"./_fails":169,"./_flags":171,"./_global":175,"./_inherit-if-required":180,"./_is-regexp":187,"./_object-dp":206,"./_object-gopn":211,"./_redefine":226,"./_set-species":234,"./_wks":263}],360:[function(require,module,exports){ +'use strict'; +var regexpExec = require('./_regexp-exec'); +require('./_export')({ + target: 'RegExp', + proto: true, + forced: regexpExec !== /./.exec +}, { + exec: regexpExec +}); + +},{"./_export":167,"./_regexp-exec":228}],361:[function(require,module,exports){ +// 21.2.5.3 get RegExp.prototype.flags() +if (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', { + configurable: true, + get: require('./_flags') +}); + +},{"./_descriptors":163,"./_flags":171,"./_object-dp":206}],362:[function(require,module,exports){ +'use strict'; + +var anObject = require('./_an-object'); +var toLength = require('./_to-length'); +var advanceStringIndex = require('./_advance-string-index'); +var regExpExec = require('./_regexp-exec-abstract'); + +// @@match logic +require('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) { + return [ + // `String.prototype.match` method + // https://tc39.github.io/ecma262/#sec-string.prototype.match + function match(regexp) { + var O = defined(this); + var fn = regexp == undefined ? undefined : regexp[MATCH]; + return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O)); + }, + // `RegExp.prototype[@@match]` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match + function (regexp) { + var res = maybeCallNative($match, regexp, this); + if (res.done) return res.value; + var rx = anObject(regexp); + var S = String(this); + if (!rx.global) return regExpExec(rx, S); + var fullUnicode = rx.unicode; + rx.lastIndex = 0; + var A = []; + var n = 0; + var result; + while ((result = regExpExec(rx, S)) !== null) { + var matchStr = String(result[0]); + A[n] = matchStr; + if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); + n++; + } + return n === 0 ? null : A; + } + ]; +}); + +},{"./_advance-string-index":139,"./_an-object":141,"./_fix-re-wks":170,"./_regexp-exec-abstract":227,"./_to-length":252}],363:[function(require,module,exports){ +'use strict'; + +var anObject = require('./_an-object'); +var toObject = require('./_to-object'); +var toLength = require('./_to-length'); +var toInteger = require('./_to-integer'); +var advanceStringIndex = require('./_advance-string-index'); +var regExpExec = require('./_regexp-exec-abstract'); +var max = Math.max; +var min = Math.min; +var floor = Math.floor; +var SUBSTITUTION_SYMBOLS = /\$([$&`']|\d\d?|<[^>]*>)/g; +var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&`']|\d\d?)/g; + +var maybeToString = function (it) { + return it === undefined ? it : String(it); +}; + +// @@replace logic +require('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) { + return [ + // `String.prototype.replace` method + // https://tc39.github.io/ecma262/#sec-string.prototype.replace + function replace(searchValue, replaceValue) { + var O = defined(this); + var fn = searchValue == undefined ? undefined : searchValue[REPLACE]; + return fn !== undefined + ? fn.call(searchValue, O, replaceValue) + : $replace.call(String(O), searchValue, replaceValue); + }, + // `RegExp.prototype[@@replace]` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace + function (regexp, replaceValue) { + var res = maybeCallNative($replace, regexp, this, replaceValue); + if (res.done) return res.value; + + var rx = anObject(regexp); + var S = String(this); + var functionalReplace = typeof replaceValue === 'function'; + if (!functionalReplace) replaceValue = String(replaceValue); + var global = rx.global; + if (global) { + var fullUnicode = rx.unicode; + rx.lastIndex = 0; + } + var results = []; + while (true) { + var result = regExpExec(rx, S); + if (result === null) break; + results.push(result); + if (!global) break; + var matchStr = String(result[0]); + if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); + } + var accumulatedResult = ''; + var nextSourcePosition = 0; + for (var i = 0; i < results.length; i++) { + result = results[i]; + var matched = String(result[0]); + var position = max(min(toInteger(result.index), S.length), 0); + var captures = []; + // NOTE: This is equivalent to + // captures = result.slice(1).map(maybeToString) + // but for some reason `nativeSlice.call(result, 1, result.length)` (called in + // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and + // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it. + for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j])); + var namedCaptures = result.groups; + if (functionalReplace) { + var replacerArgs = [matched].concat(captures, position, S); + if (namedCaptures !== undefined) replacerArgs.push(namedCaptures); + var replacement = String(replaceValue.apply(undefined, replacerArgs)); + } else { + replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue); + } + if (position >= nextSourcePosition) { + accumulatedResult += S.slice(nextSourcePosition, position) + replacement; + nextSourcePosition = position + matched.length; + } + } + return accumulatedResult + S.slice(nextSourcePosition); + } + ]; + + // https://tc39.github.io/ecma262/#sec-getsubstitution + function getSubstitution(matched, str, position, captures, namedCaptures, replacement) { + var tailPos = position + matched.length; + var m = captures.length; + var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED; + if (namedCaptures !== undefined) { + namedCaptures = toObject(namedCaptures); + symbols = SUBSTITUTION_SYMBOLS; + } + return $replace.call(replacement, symbols, function (match, ch) { + var capture; + switch (ch.charAt(0)) { + case '$': return '$'; + case '&': return matched; + case '`': return str.slice(0, position); + case "'": return str.slice(tailPos); + case '<': + capture = namedCaptures[ch.slice(1, -1)]; + break; + default: // \d\d? + var n = +ch; + if (n === 0) return match; + if (n > m) { + var f = floor(n / 10); + if (f === 0) return match; + if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1); + return match; + } + capture = captures[n - 1]; + } + return capture === undefined ? '' : capture; + }); + } +}); + +},{"./_advance-string-index":139,"./_an-object":141,"./_fix-re-wks":170,"./_regexp-exec-abstract":227,"./_to-integer":250,"./_to-length":252,"./_to-object":253}],364:[function(require,module,exports){ +'use strict'; + +var anObject = require('./_an-object'); +var sameValue = require('./_same-value'); +var regExpExec = require('./_regexp-exec-abstract'); + +// @@search logic +require('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search, maybeCallNative) { + return [ + // `String.prototype.search` method + // https://tc39.github.io/ecma262/#sec-string.prototype.search + function search(regexp) { + var O = defined(this); + var fn = regexp == undefined ? undefined : regexp[SEARCH]; + return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O)); + }, + // `RegExp.prototype[@@search]` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search + function (regexp) { + var res = maybeCallNative($search, regexp, this); + if (res.done) return res.value; + var rx = anObject(regexp); + var S = String(this); + var previousLastIndex = rx.lastIndex; + if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0; + var result = regExpExec(rx, S); + if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex; + return result === null ? -1 : result.index; + } + ]; +}); + +},{"./_an-object":141,"./_fix-re-wks":170,"./_regexp-exec-abstract":227,"./_same-value":230}],365:[function(require,module,exports){ +'use strict'; + +var isRegExp = require('./_is-regexp'); +var anObject = require('./_an-object'); +var speciesConstructor = require('./_species-constructor'); +var advanceStringIndex = require('./_advance-string-index'); +var toLength = require('./_to-length'); +var callRegExpExec = require('./_regexp-exec-abstract'); +var regexpExec = require('./_regexp-exec'); +var fails = require('./_fails'); +var $min = Math.min; +var $push = [].push; +var $SPLIT = 'split'; +var LENGTH = 'length'; +var LAST_INDEX = 'lastIndex'; +var MAX_UINT32 = 0xffffffff; + +// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError +var SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); }); + +// @@split logic +require('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) { + var internalSplit; + if ( + 'abbc'[$SPLIT](/(b)*/)[1] == 'c' || + 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 || + 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 || + '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 || + '.'[$SPLIT](/()()/)[LENGTH] > 1 || + ''[$SPLIT](/.?/)[LENGTH] + ) { + // based on es5-shim implementation, need to rework it + internalSplit = function (separator, limit) { + var string = String(this); + if (separator === undefined && limit === 0) return []; + // If `separator` is not a regex, use native split + if (!isRegExp(separator)) return $split.call(string, separator, limit); + var output = []; + var flags = (separator.ignoreCase ? 'i' : '') + + (separator.multiline ? 'm' : '') + + (separator.unicode ? 'u' : '') + + (separator.sticky ? 'y' : ''); + var lastLastIndex = 0; + var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0; + // Make `global` and avoid `lastIndex` issues by working with a copy + var separatorCopy = new RegExp(separator.source, flags + 'g'); + var match, lastIndex, lastLength; + while (match = regexpExec.call(separatorCopy, string)) { + lastIndex = separatorCopy[LAST_INDEX]; + if (lastIndex > lastLastIndex) { + output.push(string.slice(lastLastIndex, match.index)); + if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1)); + lastLength = match[0][LENGTH]; + lastLastIndex = lastIndex; + if (output[LENGTH] >= splitLimit) break; + } + if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop + } + if (lastLastIndex === string[LENGTH]) { + if (lastLength || !separatorCopy.test('')) output.push(''); + } else output.push(string.slice(lastLastIndex)); + return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output; + }; + // Chakra, V8 + } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) { + internalSplit = function (separator, limit) { + return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit); + }; + } else { + internalSplit = $split; + } + + return [ + // `String.prototype.split` method + // https://tc39.github.io/ecma262/#sec-string.prototype.split + function split(separator, limit) { + var O = defined(this); + var splitter = separator == undefined ? undefined : separator[SPLIT]; + return splitter !== undefined + ? splitter.call(separator, O, limit) + : internalSplit.call(String(O), separator, limit); + }, + // `RegExp.prototype[@@split]` method + // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split + // + // NOTE: This cannot be properly polyfilled in engines that don't support + // the 'y' flag. + function (regexp, limit) { + var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split); + if (res.done) return res.value; + + var rx = anObject(regexp); + var S = String(this); + var C = speciesConstructor(rx, RegExp); + + var unicodeMatching = rx.unicode; + var flags = (rx.ignoreCase ? 'i' : '') + + (rx.multiline ? 'm' : '') + + (rx.unicode ? 'u' : '') + + (SUPPORTS_Y ? 'y' : 'g'); + + // ^(? + rx + ) is needed, in combination with some S slicing, to + // simulate the 'y' flag. + var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags); + var lim = limit === undefined ? MAX_UINT32 : limit >>> 0; + if (lim === 0) return []; + if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : []; + var p = 0; + var q = 0; + var A = []; + while (q < S.length) { + splitter.lastIndex = SUPPORTS_Y ? q : 0; + var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q)); + var e; + if ( + z === null || + (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p + ) { + q = advanceStringIndex(S, q, unicodeMatching); + } else { + A.push(S.slice(p, q)); + if (A.length === lim) return A; + for (var i = 1; i <= z.length - 1; i++) { + A.push(z[i]); + if (A.length === lim) return A; + } + q = p = e; + } + } + A.push(S.slice(p)); + return A; + } + ]; +}); + +},{"./_advance-string-index":139,"./_an-object":141,"./_fails":169,"./_fix-re-wks":170,"./_is-regexp":187,"./_regexp-exec":228,"./_regexp-exec-abstract":227,"./_species-constructor":238,"./_to-length":252}],366:[function(require,module,exports){ +'use strict'; +require('./es6.regexp.flags'); +var anObject = require('./_an-object'); +var $flags = require('./_flags'); +var DESCRIPTORS = require('./_descriptors'); +var TO_STRING = 'toString'; +var $toString = /./[TO_STRING]; + +var define = function (fn) { + require('./_redefine')(RegExp.prototype, TO_STRING, fn, true); +}; + +// 21.2.5.14 RegExp.prototype.toString() +if (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) { + define(function toString() { + var R = anObject(this); + return '/'.concat(R.source, '/', + 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined); + }); +// FF44- RegExp#toString has a wrong name +} else if ($toString.name != TO_STRING) { + define(function toString() { + return $toString.call(this); + }); +} + +},{"./_an-object":141,"./_descriptors":163,"./_fails":169,"./_flags":171,"./_redefine":226,"./es6.regexp.flags":361}],367:[function(require,module,exports){ +'use strict'; +var strong = require('./_collection-strong'); +var validate = require('./_validate-collection'); +var SET = 'Set'; + +// 23.2 Set Objects +module.exports = require('./_collection')(SET, function (get) { + return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); }; +}, { + // 23.2.3.1 Set.prototype.add(value) + add: function add(value) { + return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value); + } +}, strong); + +},{"./_collection":156,"./_collection-strong":153,"./_validate-collection":260}],368:[function(require,module,exports){ +'use strict'; +// B.2.3.2 String.prototype.anchor(name) +require('./_string-html')('anchor', function (createHTML) { + return function anchor(name) { + return createHTML(this, 'a', 'name', name); + }; +}); + +},{"./_string-html":242}],369:[function(require,module,exports){ +'use strict'; +// B.2.3.3 String.prototype.big() +require('./_string-html')('big', function (createHTML) { + return function big() { + return createHTML(this, 'big', '', ''); + }; +}); + +},{"./_string-html":242}],370:[function(require,module,exports){ +'use strict'; +// B.2.3.4 String.prototype.blink() +require('./_string-html')('blink', function (createHTML) { + return function blink() { + return createHTML(this, 'blink', '', ''); + }; +}); + +},{"./_string-html":242}],371:[function(require,module,exports){ +'use strict'; +// B.2.3.5 String.prototype.bold() +require('./_string-html')('bold', function (createHTML) { + return function bold() { + return createHTML(this, 'b', '', ''); + }; +}); + +},{"./_string-html":242}],372:[function(require,module,exports){ +'use strict'; +var $export = require('./_export'); +var $at = require('./_string-at')(false); +$export($export.P, 'String', { + // 21.1.3.3 String.prototype.codePointAt(pos) + codePointAt: function codePointAt(pos) { + return $at(this, pos); + } +}); + +},{"./_export":167,"./_string-at":240}],373:[function(require,module,exports){ +// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition]) +'use strict'; +var $export = require('./_export'); +var toLength = require('./_to-length'); +var context = require('./_string-context'); +var ENDS_WITH = 'endsWith'; +var $endsWith = ''[ENDS_WITH]; + +$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', { + endsWith: function endsWith(searchString /* , endPosition = @length */) { + var that = context(this, searchString, ENDS_WITH); + var endPosition = arguments.length > 1 ? arguments[1] : undefined; + var len = toLength(that.length); + var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len); + var search = String(searchString); + return $endsWith + ? $endsWith.call(that, search, end) + : that.slice(end - search.length, end) === search; + } +}); + +},{"./_export":167,"./_fails-is-regexp":168,"./_string-context":241,"./_to-length":252}],374:[function(require,module,exports){ +'use strict'; +// B.2.3.6 String.prototype.fixed() +require('./_string-html')('fixed', function (createHTML) { + return function fixed() { + return createHTML(this, 'tt', '', ''); + }; +}); + +},{"./_string-html":242}],375:[function(require,module,exports){ +'use strict'; +// B.2.3.7 String.prototype.fontcolor(color) +require('./_string-html')('fontcolor', function (createHTML) { + return function fontcolor(color) { + return createHTML(this, 'font', 'color', color); + }; +}); + +},{"./_string-html":242}],376:[function(require,module,exports){ +'use strict'; +// B.2.3.8 String.prototype.fontsize(size) +require('./_string-html')('fontsize', function (createHTML) { + return function fontsize(size) { + return createHTML(this, 'font', 'size', size); + }; +}); + +},{"./_string-html":242}],377:[function(require,module,exports){ +var $export = require('./_export'); +var toAbsoluteIndex = require('./_to-absolute-index'); +var fromCharCode = String.fromCharCode; +var $fromCodePoint = String.fromCodePoint; + +// length should be 1, old FF problem +$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', { + // 21.1.2.2 String.fromCodePoint(...codePoints) + fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars + var res = []; + var aLen = arguments.length; + var i = 0; + var code; + while (aLen > i) { + code = +arguments[i++]; + if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point'); + res.push(code < 0x10000 + ? fromCharCode(code) + : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00) + ); + } return res.join(''); + } +}); + +},{"./_export":167,"./_to-absolute-index":248}],378:[function(require,module,exports){ +// 21.1.3.7 String.prototype.includes(searchString, position = 0) +'use strict'; +var $export = require('./_export'); +var context = require('./_string-context'); +var INCLUDES = 'includes'; + +$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', { + includes: function includes(searchString /* , position = 0 */) { + return !!~context(this, searchString, INCLUDES) + .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +},{"./_export":167,"./_fails-is-regexp":168,"./_string-context":241}],379:[function(require,module,exports){ +'use strict'; +// B.2.3.9 String.prototype.italics() +require('./_string-html')('italics', function (createHTML) { + return function italics() { + return createHTML(this, 'i', '', ''); + }; +}); + +},{"./_string-html":242}],380:[function(require,module,exports){ +'use strict'; +var $at = require('./_string-at')(true); + +// 21.1.3.27 String.prototype[@@iterator]() +require('./_iter-define')(String, 'String', function (iterated) { + this._t = String(iterated); // target + this._i = 0; // next index +// 21.1.5.2.1 %StringIteratorPrototype%.next() +}, function () { + var O = this._t; + var index = this._i; + var point; + if (index >= O.length) return { value: undefined, done: true }; + point = $at(O, index); + this._i += point.length; + return { value: point, done: false }; +}); + +},{"./_iter-define":190,"./_string-at":240}],381:[function(require,module,exports){ +'use strict'; +// B.2.3.10 String.prototype.link(url) +require('./_string-html')('link', function (createHTML) { + return function link(url) { + return createHTML(this, 'a', 'href', url); + }; +}); + +},{"./_string-html":242}],382:[function(require,module,exports){ +var $export = require('./_export'); +var toIObject = require('./_to-iobject'); +var toLength = require('./_to-length'); + +$export($export.S, 'String', { + // 21.1.2.4 String.raw(callSite, ...substitutions) + raw: function raw(callSite) { + var tpl = toIObject(callSite.raw); + var len = toLength(tpl.length); + var aLen = arguments.length; + var res = []; + var i = 0; + while (len > i) { + res.push(String(tpl[i++])); + if (i < aLen) res.push(String(arguments[i])); + } return res.join(''); + } +}); + +},{"./_export":167,"./_to-iobject":251,"./_to-length":252}],383:[function(require,module,exports){ +var $export = require('./_export'); + +$export($export.P, 'String', { + // 21.1.3.13 String.prototype.repeat(count) + repeat: require('./_string-repeat') +}); + +},{"./_export":167,"./_string-repeat":244}],384:[function(require,module,exports){ +'use strict'; +// B.2.3.11 String.prototype.small() +require('./_string-html')('small', function (createHTML) { + return function small() { + return createHTML(this, 'small', '', ''); + }; +}); + +},{"./_string-html":242}],385:[function(require,module,exports){ +// 21.1.3.18 String.prototype.startsWith(searchString [, position ]) +'use strict'; +var $export = require('./_export'); +var toLength = require('./_to-length'); +var context = require('./_string-context'); +var STARTS_WITH = 'startsWith'; +var $startsWith = ''[STARTS_WITH]; + +$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', { + startsWith: function startsWith(searchString /* , position = 0 */) { + var that = context(this, searchString, STARTS_WITH); + var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length)); + var search = String(searchString); + return $startsWith + ? $startsWith.call(that, search, index) + : that.slice(index, index + search.length) === search; + } +}); + +},{"./_export":167,"./_fails-is-regexp":168,"./_string-context":241,"./_to-length":252}],386:[function(require,module,exports){ +'use strict'; +// B.2.3.12 String.prototype.strike() +require('./_string-html')('strike', function (createHTML) { + return function strike() { + return createHTML(this, 'strike', '', ''); + }; +}); + +},{"./_string-html":242}],387:[function(require,module,exports){ +'use strict'; +// B.2.3.13 String.prototype.sub() +require('./_string-html')('sub', function (createHTML) { + return function sub() { + return createHTML(this, 'sub', '', ''); + }; +}); + +},{"./_string-html":242}],388:[function(require,module,exports){ +'use strict'; +// B.2.3.14 String.prototype.sup() +require('./_string-html')('sup', function (createHTML) { + return function sup() { + return createHTML(this, 'sup', '', ''); + }; +}); + +},{"./_string-html":242}],389:[function(require,module,exports){ +'use strict'; +// 21.1.3.25 String.prototype.trim() +require('./_string-trim')('trim', function ($trim) { + return function trim() { + return $trim(this, 3); + }; +}); + +},{"./_string-trim":245}],390:[function(require,module,exports){ +'use strict'; +// ECMAScript 6 symbols shim +var global = require('./_global'); +var has = require('./_has'); +var DESCRIPTORS = require('./_descriptors'); +var $export = require('./_export'); +var redefine = require('./_redefine'); +var META = require('./_meta').KEY; +var $fails = require('./_fails'); +var shared = require('./_shared'); +var setToStringTag = require('./_set-to-string-tag'); +var uid = require('./_uid'); +var wks = require('./_wks'); +var wksExt = require('./_wks-ext'); +var wksDefine = require('./_wks-define'); +var enumKeys = require('./_enum-keys'); +var isArray = require('./_is-array'); +var anObject = require('./_an-object'); +var isObject = require('./_is-object'); +var toIObject = require('./_to-iobject'); +var toPrimitive = require('./_to-primitive'); +var createDesc = require('./_property-desc'); +var _create = require('./_object-create'); +var gOPNExt = require('./_object-gopn-ext'); +var $GOPD = require('./_object-gopd'); +var $DP = require('./_object-dp'); +var $keys = require('./_object-keys'); +var gOPD = $GOPD.f; +var dP = $DP.f; +var gOPN = gOPNExt.f; +var $Symbol = global.Symbol; +var $JSON = global.JSON; +var _stringify = $JSON && $JSON.stringify; +var PROTOTYPE = 'prototype'; +var HIDDEN = wks('_hidden'); +var TO_PRIMITIVE = wks('toPrimitive'); +var isEnum = {}.propertyIsEnumerable; +var SymbolRegistry = shared('symbol-registry'); +var AllSymbols = shared('symbols'); +var OPSymbols = shared('op-symbols'); +var ObjectProto = Object[PROTOTYPE]; +var USE_NATIVE = typeof $Symbol == 'function'; +var QObject = global.QObject; +// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173 +var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; + +// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 +var setSymbolDesc = DESCRIPTORS && $fails(function () { + return _create(dP({}, 'a', { + get: function () { return dP(this, 'a', { value: 7 }).a; } + })).a != 7; +}) ? function (it, key, D) { + var protoDesc = gOPD(ObjectProto, key); + if (protoDesc) delete ObjectProto[key]; + dP(it, key, D); + if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc); +} : dP; + +var wrap = function (tag) { + var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]); + sym._k = tag; + return sym; +}; + +var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) { + return typeof it == 'symbol'; +} : function (it) { + return it instanceof $Symbol; +}; + +var $defineProperty = function defineProperty(it, key, D) { + if (it === ObjectProto) $defineProperty(OPSymbols, key, D); + anObject(it); + key = toPrimitive(key, true); + anObject(D); + if (has(AllSymbols, key)) { + if (!D.enumerable) { + if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {})); + it[HIDDEN][key] = true; + } else { + if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false; + D = _create(D, { enumerable: createDesc(0, false) }); + } return setSymbolDesc(it, key, D); + } return dP(it, key, D); +}; +var $defineProperties = function defineProperties(it, P) { + anObject(it); + var keys = enumKeys(P = toIObject(P)); + var i = 0; + var l = keys.length; + var key; + while (l > i) $defineProperty(it, key = keys[i++], P[key]); + return it; +}; +var $create = function create(it, P) { + return P === undefined ? _create(it) : $defineProperties(_create(it), P); +}; +var $propertyIsEnumerable = function propertyIsEnumerable(key) { + var E = isEnum.call(this, key = toPrimitive(key, true)); + if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false; + return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true; +}; +var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) { + it = toIObject(it); + key = toPrimitive(key, true); + if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return; + var D = gOPD(it, key); + if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true; + return D; +}; +var $getOwnPropertyNames = function getOwnPropertyNames(it) { + var names = gOPN(toIObject(it)); + var result = []; + var i = 0; + var key; + while (names.length > i) { + if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key); + } return result; +}; +var $getOwnPropertySymbols = function getOwnPropertySymbols(it) { + var IS_OP = it === ObjectProto; + var names = gOPN(IS_OP ? OPSymbols : toIObject(it)); + var result = []; + var i = 0; + var key; + while (names.length > i) { + if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]); + } return result; +}; + +// 19.4.1.1 Symbol([description]) +if (!USE_NATIVE) { + $Symbol = function Symbol() { + if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!'); + var tag = uid(arguments.length > 0 ? arguments[0] : undefined); + var $set = function (value) { + if (this === ObjectProto) $set.call(OPSymbols, value); + if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false; + setSymbolDesc(this, tag, createDesc(1, value)); + }; + if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set }); + return wrap(tag); + }; + redefine($Symbol[PROTOTYPE], 'toString', function toString() { + return this._k; + }); + + $GOPD.f = $getOwnPropertyDescriptor; + $DP.f = $defineProperty; + require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames; + require('./_object-pie').f = $propertyIsEnumerable; + require('./_object-gops').f = $getOwnPropertySymbols; + + if (DESCRIPTORS && !require('./_library')) { + redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true); + } + + wksExt.f = function (name) { + return wrap(wks(name)); + }; +} + +$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol }); + +for (var es6Symbols = ( + // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14 + 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables' +).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]); + +for (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]); + +$export($export.S + $export.F * !USE_NATIVE, 'Symbol', { + // 19.4.2.1 Symbol.for(key) + 'for': function (key) { + return has(SymbolRegistry, key += '') + ? SymbolRegistry[key] + : SymbolRegistry[key] = $Symbol(key); + }, + // 19.4.2.5 Symbol.keyFor(sym) + keyFor: function keyFor(sym) { + if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!'); + for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key; + }, + useSetter: function () { setter = true; }, + useSimple: function () { setter = false; } +}); + +$export($export.S + $export.F * !USE_NATIVE, 'Object', { + // 19.1.2.2 Object.create(O [, Properties]) + create: $create, + // 19.1.2.4 Object.defineProperty(O, P, Attributes) + defineProperty: $defineProperty, + // 19.1.2.3 Object.defineProperties(O, Properties) + defineProperties: $defineProperties, + // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P) + getOwnPropertyDescriptor: $getOwnPropertyDescriptor, + // 19.1.2.7 Object.getOwnPropertyNames(O) + getOwnPropertyNames: $getOwnPropertyNames, + // 19.1.2.8 Object.getOwnPropertySymbols(O) + getOwnPropertySymbols: $getOwnPropertySymbols +}); + +// 24.3.2 JSON.stringify(value [, replacer [, space]]) +$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () { + var S = $Symbol(); + // MS Edge converts symbol values to JSON as {} + // WebKit converts symbol values to JSON as null + // V8 throws on boxed symbols + return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}'; +})), 'JSON', { + stringify: function stringify(it) { + var args = [it]; + var i = 1; + var replacer, $replacer; + while (arguments.length > i) args.push(arguments[i++]); + $replacer = replacer = args[1]; + if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined + if (!isArray(replacer)) replacer = function (key, value) { + if (typeof $replacer == 'function') value = $replacer.call(this, key, value); + if (!isSymbol(value)) return value; + }; + args[1] = replacer; + return _stringify.apply($JSON, args); + } +}); + +// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint) +$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf); +// 19.4.3.5 Symbol.prototype[@@toStringTag] +setToStringTag($Symbol, 'Symbol'); +// 20.2.1.9 Math[@@toStringTag] +setToStringTag(Math, 'Math', true); +// 24.3.3 JSON[@@toStringTag] +setToStringTag(global.JSON, 'JSON', true); + +},{"./_an-object":141,"./_descriptors":163,"./_enum-keys":166,"./_export":167,"./_fails":169,"./_global":175,"./_has":176,"./_hide":177,"./_is-array":184,"./_is-object":186,"./_library":194,"./_meta":200,"./_object-create":205,"./_object-dp":206,"./_object-gopd":209,"./_object-gopn":211,"./_object-gopn-ext":210,"./_object-gops":212,"./_object-keys":215,"./_object-pie":216,"./_property-desc":224,"./_redefine":226,"./_set-to-string-tag":235,"./_shared":237,"./_to-iobject":251,"./_to-primitive":254,"./_uid":258,"./_wks":263,"./_wks-define":261,"./_wks-ext":262}],391:[function(require,module,exports){ +'use strict'; +var $export = require('./_export'); +var $typed = require('./_typed'); +var buffer = require('./_typed-buffer'); +var anObject = require('./_an-object'); +var toAbsoluteIndex = require('./_to-absolute-index'); +var toLength = require('./_to-length'); +var isObject = require('./_is-object'); +var ArrayBuffer = require('./_global').ArrayBuffer; +var speciesConstructor = require('./_species-constructor'); +var $ArrayBuffer = buffer.ArrayBuffer; +var $DataView = buffer.DataView; +var $isView = $typed.ABV && ArrayBuffer.isView; +var $slice = $ArrayBuffer.prototype.slice; +var VIEW = $typed.VIEW; +var ARRAY_BUFFER = 'ArrayBuffer'; + +$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer }); + +$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, { + // 24.1.3.1 ArrayBuffer.isView(arg) + isView: function isView(it) { + return $isView && $isView(it) || isObject(it) && VIEW in it; + } +}); + +$export($export.P + $export.U + $export.F * require('./_fails')(function () { + return !new $ArrayBuffer(2).slice(1, undefined).byteLength; +}), ARRAY_BUFFER, { + // 24.1.4.3 ArrayBuffer.prototype.slice(start, end) + slice: function slice(start, end) { + if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix + var len = anObject(this).byteLength; + var first = toAbsoluteIndex(start, len); + var fin = toAbsoluteIndex(end === undefined ? len : end, len); + var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first)); + var viewS = new $DataView(this); + var viewT = new $DataView(result); + var index = 0; + while (first < fin) { + viewT.setUint8(index++, viewS.getUint8(first++)); + } return result; + } +}); + +require('./_set-species')(ARRAY_BUFFER); + +},{"./_an-object":141,"./_export":167,"./_fails":169,"./_global":175,"./_is-object":186,"./_set-species":234,"./_species-constructor":238,"./_to-absolute-index":248,"./_to-length":252,"./_typed":257,"./_typed-buffer":256}],392:[function(require,module,exports){ +var $export = require('./_export'); +$export($export.G + $export.W + $export.F * !require('./_typed').ABV, { + DataView: require('./_typed-buffer').DataView +}); + +},{"./_export":167,"./_typed":257,"./_typed-buffer":256}],393:[function(require,module,exports){ +require('./_typed-array')('Float32', 4, function (init) { + return function Float32Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}); + +},{"./_typed-array":255}],394:[function(require,module,exports){ +require('./_typed-array')('Float64', 8, function (init) { + return function Float64Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}); + +},{"./_typed-array":255}],395:[function(require,module,exports){ +require('./_typed-array')('Int16', 2, function (init) { + return function Int16Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}); + +},{"./_typed-array":255}],396:[function(require,module,exports){ +require('./_typed-array')('Int32', 4, function (init) { + return function Int32Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}); + +},{"./_typed-array":255}],397:[function(require,module,exports){ +require('./_typed-array')('Int8', 1, function (init) { + return function Int8Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}); + +},{"./_typed-array":255}],398:[function(require,module,exports){ +require('./_typed-array')('Uint16', 2, function (init) { + return function Uint16Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}); + +},{"./_typed-array":255}],399:[function(require,module,exports){ +require('./_typed-array')('Uint32', 4, function (init) { + return function Uint32Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}); + +},{"./_typed-array":255}],400:[function(require,module,exports){ +require('./_typed-array')('Uint8', 1, function (init) { + return function Uint8Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}); + +},{"./_typed-array":255}],401:[function(require,module,exports){ +require('./_typed-array')('Uint8', 1, function (init) { + return function Uint8ClampedArray(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}, true); + +},{"./_typed-array":255}],402:[function(require,module,exports){ +'use strict'; +var global = require('./_global'); +var each = require('./_array-methods')(0); +var redefine = require('./_redefine'); +var meta = require('./_meta'); +var assign = require('./_object-assign'); +var weak = require('./_collection-weak'); +var isObject = require('./_is-object'); +var validate = require('./_validate-collection'); +var NATIVE_WEAK_MAP = require('./_validate-collection'); +var IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global; +var WEAK_MAP = 'WeakMap'; +var getWeak = meta.getWeak; +var isExtensible = Object.isExtensible; +var uncaughtFrozenStore = weak.ufstore; +var InternalMap; + +var wrapper = function (get) { + return function WeakMap() { + return get(this, arguments.length > 0 ? arguments[0] : undefined); + }; +}; + +var methods = { + // 23.3.3.3 WeakMap.prototype.get(key) + get: function get(key) { + if (isObject(key)) { + var data = getWeak(key); + if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key); + return data ? data[this._i] : undefined; + } + }, + // 23.3.3.5 WeakMap.prototype.set(key, value) + set: function set(key, value) { + return weak.def(validate(this, WEAK_MAP), key, value); + } +}; + +// 23.3 WeakMap Objects +var $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true); + +// IE11 WeakMap frozen keys fix +if (NATIVE_WEAK_MAP && IS_IE11) { + InternalMap = weak.getConstructor(wrapper, WEAK_MAP); + assign(InternalMap.prototype, methods); + meta.NEED = true; + each(['delete', 'has', 'get', 'set'], function (key) { + var proto = $WeakMap.prototype; + var method = proto[key]; + redefine(proto, key, function (a, b) { + // store frozen objects on internal weakmap shim + if (isObject(a) && !isExtensible(a)) { + if (!this._f) this._f = new InternalMap(); + var result = this._f[key](a, b); + return key == 'set' ? this : result; + // store all the rest on native weakmap + } return method.call(this, a, b); + }); + }); +} + +},{"./_array-methods":146,"./_collection":156,"./_collection-weak":155,"./_global":175,"./_is-object":186,"./_meta":200,"./_object-assign":204,"./_redefine":226,"./_validate-collection":260}],403:[function(require,module,exports){ +'use strict'; +var weak = require('./_collection-weak'); +var validate = require('./_validate-collection'); +var WEAK_SET = 'WeakSet'; + +// 23.4 WeakSet Objects +require('./_collection')(WEAK_SET, function (get) { + return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); }; +}, { + // 23.4.3.1 WeakSet.prototype.add(value) + add: function add(value) { + return weak.def(validate(this, WEAK_SET), value, true); + } +}, weak, false, true); + +},{"./_collection":156,"./_collection-weak":155,"./_validate-collection":260}],404:[function(require,module,exports){ +'use strict'; +// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap +var $export = require('./_export'); +var flattenIntoArray = require('./_flatten-into-array'); +var toObject = require('./_to-object'); +var toLength = require('./_to-length'); +var aFunction = require('./_a-function'); +var arraySpeciesCreate = require('./_array-species-create'); + +$export($export.P, 'Array', { + flatMap: function flatMap(callbackfn /* , thisArg */) { + var O = toObject(this); + var sourceLen, A; + aFunction(callbackfn); + sourceLen = toLength(O.length); + A = arraySpeciesCreate(O, 0); + flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]); + return A; + } +}); + +require('./_add-to-unscopables')('flatMap'); + +},{"./_a-function":136,"./_add-to-unscopables":138,"./_array-species-create":149,"./_export":167,"./_flatten-into-array":172,"./_to-length":252,"./_to-object":253}],405:[function(require,module,exports){ +'use strict'; +// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatten +var $export = require('./_export'); +var flattenIntoArray = require('./_flatten-into-array'); +var toObject = require('./_to-object'); +var toLength = require('./_to-length'); +var toInteger = require('./_to-integer'); +var arraySpeciesCreate = require('./_array-species-create'); + +$export($export.P, 'Array', { + flatten: function flatten(/* depthArg = 1 */) { + var depthArg = arguments[0]; + var O = toObject(this); + var sourceLen = toLength(O.length); + var A = arraySpeciesCreate(O, 0); + flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg)); + return A; + } +}); + +require('./_add-to-unscopables')('flatten'); + +},{"./_add-to-unscopables":138,"./_array-species-create":149,"./_export":167,"./_flatten-into-array":172,"./_to-integer":250,"./_to-length":252,"./_to-object":253}],406:[function(require,module,exports){ +'use strict'; +// https://github.com/tc39/Array.prototype.includes +var $export = require('./_export'); +var $includes = require('./_array-includes')(true); + +$export($export.P, 'Array', { + includes: function includes(el /* , fromIndex = 0 */) { + return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +require('./_add-to-unscopables')('includes'); + +},{"./_add-to-unscopables":138,"./_array-includes":145,"./_export":167}],407:[function(require,module,exports){ +// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask +var $export = require('./_export'); +var microtask = require('./_microtask')(); +var process = require('./_global').process; +var isNode = require('./_cof')(process) == 'process'; + +$export($export.G, { + asap: function asap(fn) { + var domain = isNode && process.domain; + microtask(domain ? domain.bind(fn) : fn); + } +}); + +},{"./_cof":152,"./_export":167,"./_global":175,"./_microtask":202}],408:[function(require,module,exports){ +// https://github.com/ljharb/proposal-is-error +var $export = require('./_export'); +var cof = require('./_cof'); + +$export($export.S, 'Error', { + isError: function isError(it) { + return cof(it) === 'Error'; + } +}); + +},{"./_cof":152,"./_export":167}],409:[function(require,module,exports){ +// https://github.com/tc39/proposal-global +var $export = require('./_export'); + +$export($export.G, { global: require('./_global') }); + +},{"./_export":167,"./_global":175}],410:[function(require,module,exports){ +// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from +require('./_set-collection-from')('Map'); + +},{"./_set-collection-from":231}],411:[function(require,module,exports){ +// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of +require('./_set-collection-of')('Map'); + +},{"./_set-collection-of":232}],412:[function(require,module,exports){ +// https://github.com/DavidBruant/Map-Set.prototype.toJSON +var $export = require('./_export'); + +$export($export.P + $export.R, 'Map', { toJSON: require('./_collection-to-json')('Map') }); + +},{"./_collection-to-json":154,"./_export":167}],413:[function(require,module,exports){ +// https://rwaldron.github.io/proposal-math-extensions/ +var $export = require('./_export'); + +$export($export.S, 'Math', { + clamp: function clamp(x, lower, upper) { + return Math.min(upper, Math.max(lower, x)); + } +}); + +},{"./_export":167}],414:[function(require,module,exports){ +// https://rwaldron.github.io/proposal-math-extensions/ +var $export = require('./_export'); + +$export($export.S, 'Math', { DEG_PER_RAD: Math.PI / 180 }); + +},{"./_export":167}],415:[function(require,module,exports){ +// https://rwaldron.github.io/proposal-math-extensions/ +var $export = require('./_export'); +var RAD_PER_DEG = 180 / Math.PI; + +$export($export.S, 'Math', { + degrees: function degrees(radians) { + return radians * RAD_PER_DEG; + } +}); + +},{"./_export":167}],416:[function(require,module,exports){ +// https://rwaldron.github.io/proposal-math-extensions/ +var $export = require('./_export'); +var scale = require('./_math-scale'); +var fround = require('./_math-fround'); + +$export($export.S, 'Math', { + fscale: function fscale(x, inLow, inHigh, outLow, outHigh) { + return fround(scale(x, inLow, inHigh, outLow, outHigh)); + } +}); + +},{"./_export":167,"./_math-fround":196,"./_math-scale":198}],417:[function(require,module,exports){ +// https://gist.github.com/BrendanEich/4294d5c212a6d2254703 +var $export = require('./_export'); + +$export($export.S, 'Math', { + iaddh: function iaddh(x0, x1, y0, y1) { + var $x0 = x0 >>> 0; + var $x1 = x1 >>> 0; + var $y0 = y0 >>> 0; + return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0; + } +}); + +},{"./_export":167}],418:[function(require,module,exports){ +// https://gist.github.com/BrendanEich/4294d5c212a6d2254703 +var $export = require('./_export'); + +$export($export.S, 'Math', { + imulh: function imulh(u, v) { + var UINT16 = 0xffff; + var $u = +u; + var $v = +v; + var u0 = $u & UINT16; + var v0 = $v & UINT16; + var u1 = $u >> 16; + var v1 = $v >> 16; + var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16); + return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16); + } +}); + +},{"./_export":167}],419:[function(require,module,exports){ +// https://gist.github.com/BrendanEich/4294d5c212a6d2254703 +var $export = require('./_export'); + +$export($export.S, 'Math', { + isubh: function isubh(x0, x1, y0, y1) { + var $x0 = x0 >>> 0; + var $x1 = x1 >>> 0; + var $y0 = y0 >>> 0; + return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0; + } +}); + +},{"./_export":167}],420:[function(require,module,exports){ +// https://rwaldron.github.io/proposal-math-extensions/ +var $export = require('./_export'); + +$export($export.S, 'Math', { RAD_PER_DEG: 180 / Math.PI }); + +},{"./_export":167}],421:[function(require,module,exports){ +// https://rwaldron.github.io/proposal-math-extensions/ +var $export = require('./_export'); +var DEG_PER_RAD = Math.PI / 180; + +$export($export.S, 'Math', { + radians: function radians(degrees) { + return degrees * DEG_PER_RAD; + } +}); + +},{"./_export":167}],422:[function(require,module,exports){ +// https://rwaldron.github.io/proposal-math-extensions/ +var $export = require('./_export'); + +$export($export.S, 'Math', { scale: require('./_math-scale') }); + +},{"./_export":167,"./_math-scale":198}],423:[function(require,module,exports){ +// http://jfbastien.github.io/papers/Math.signbit.html +var $export = require('./_export'); + +$export($export.S, 'Math', { signbit: function signbit(x) { + // eslint-disable-next-line no-self-compare + return (x = +x) != x ? x : x == 0 ? 1 / x == Infinity : x > 0; +} }); + +},{"./_export":167}],424:[function(require,module,exports){ +// https://gist.github.com/BrendanEich/4294d5c212a6d2254703 +var $export = require('./_export'); + +$export($export.S, 'Math', { + umulh: function umulh(u, v) { + var UINT16 = 0xffff; + var $u = +u; + var $v = +v; + var u0 = $u & UINT16; + var v0 = $v & UINT16; + var u1 = $u >>> 16; + var v1 = $v >>> 16; + var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16); + return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16); + } +}); + +},{"./_export":167}],425:[function(require,module,exports){ +'use strict'; +var $export = require('./_export'); +var toObject = require('./_to-object'); +var aFunction = require('./_a-function'); +var $defineProperty = require('./_object-dp'); + +// B.2.2.2 Object.prototype.__defineGetter__(P, getter) +require('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', { + __defineGetter__: function __defineGetter__(P, getter) { + $defineProperty.f(toObject(this), P, { get: aFunction(getter), enumerable: true, configurable: true }); + } +}); + +},{"./_a-function":136,"./_descriptors":163,"./_export":167,"./_object-dp":206,"./_object-forced-pam":208,"./_to-object":253}],426:[function(require,module,exports){ +'use strict'; +var $export = require('./_export'); +var toObject = require('./_to-object'); +var aFunction = require('./_a-function'); +var $defineProperty = require('./_object-dp'); + +// B.2.2.3 Object.prototype.__defineSetter__(P, setter) +require('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', { + __defineSetter__: function __defineSetter__(P, setter) { + $defineProperty.f(toObject(this), P, { set: aFunction(setter), enumerable: true, configurable: true }); + } +}); + +},{"./_a-function":136,"./_descriptors":163,"./_export":167,"./_object-dp":206,"./_object-forced-pam":208,"./_to-object":253}],427:[function(require,module,exports){ +// https://github.com/tc39/proposal-object-values-entries +var $export = require('./_export'); +var $entries = require('./_object-to-array')(true); + +$export($export.S, 'Object', { + entries: function entries(it) { + return $entries(it); + } +}); + +},{"./_export":167,"./_object-to-array":218}],428:[function(require,module,exports){ +// https://github.com/tc39/proposal-object-getownpropertydescriptors +var $export = require('./_export'); +var ownKeys = require('./_own-keys'); +var toIObject = require('./_to-iobject'); +var gOPD = require('./_object-gopd'); +var createProperty = require('./_create-property'); + +$export($export.S, 'Object', { + getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) { + var O = toIObject(object); + var getDesc = gOPD.f; + var keys = ownKeys(O); + var result = {}; + var i = 0; + var key, desc; + while (keys.length > i) { + desc = getDesc(O, key = keys[i++]); + if (desc !== undefined) createProperty(result, key, desc); + } + return result; + } +}); + +},{"./_create-property":158,"./_export":167,"./_object-gopd":209,"./_own-keys":219,"./_to-iobject":251}],429:[function(require,module,exports){ +'use strict'; +var $export = require('./_export'); +var toObject = require('./_to-object'); +var toPrimitive = require('./_to-primitive'); +var getPrototypeOf = require('./_object-gpo'); +var getOwnPropertyDescriptor = require('./_object-gopd').f; + +// B.2.2.4 Object.prototype.__lookupGetter__(P) +require('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', { + __lookupGetter__: function __lookupGetter__(P) { + var O = toObject(this); + var K = toPrimitive(P, true); + var D; + do { + if (D = getOwnPropertyDescriptor(O, K)) return D.get; + } while (O = getPrototypeOf(O)); + } +}); + +},{"./_descriptors":163,"./_export":167,"./_object-forced-pam":208,"./_object-gopd":209,"./_object-gpo":213,"./_to-object":253,"./_to-primitive":254}],430:[function(require,module,exports){ +'use strict'; +var $export = require('./_export'); +var toObject = require('./_to-object'); +var toPrimitive = require('./_to-primitive'); +var getPrototypeOf = require('./_object-gpo'); +var getOwnPropertyDescriptor = require('./_object-gopd').f; + +// B.2.2.5 Object.prototype.__lookupSetter__(P) +require('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', { + __lookupSetter__: function __lookupSetter__(P) { + var O = toObject(this); + var K = toPrimitive(P, true); + var D; + do { + if (D = getOwnPropertyDescriptor(O, K)) return D.set; + } while (O = getPrototypeOf(O)); + } +}); + +},{"./_descriptors":163,"./_export":167,"./_object-forced-pam":208,"./_object-gopd":209,"./_object-gpo":213,"./_to-object":253,"./_to-primitive":254}],431:[function(require,module,exports){ +// https://github.com/tc39/proposal-object-values-entries +var $export = require('./_export'); +var $values = require('./_object-to-array')(false); + +$export($export.S, 'Object', { + values: function values(it) { + return $values(it); + } +}); + +},{"./_export":167,"./_object-to-array":218}],432:[function(require,module,exports){ +'use strict'; +// https://github.com/zenparsing/es-observable +var $export = require('./_export'); +var global = require('./_global'); +var core = require('./_core'); +var microtask = require('./_microtask')(); +var OBSERVABLE = require('./_wks')('observable'); +var aFunction = require('./_a-function'); +var anObject = require('./_an-object'); +var anInstance = require('./_an-instance'); +var redefineAll = require('./_redefine-all'); +var hide = require('./_hide'); +var forOf = require('./_for-of'); +var RETURN = forOf.RETURN; + +var getMethod = function (fn) { + return fn == null ? undefined : aFunction(fn); +}; + +var cleanupSubscription = function (subscription) { + var cleanup = subscription._c; + if (cleanup) { + subscription._c = undefined; + cleanup(); + } +}; + +var subscriptionClosed = function (subscription) { + return subscription._o === undefined; +}; + +var closeSubscription = function (subscription) { + if (!subscriptionClosed(subscription)) { + subscription._o = undefined; + cleanupSubscription(subscription); + } +}; + +var Subscription = function (observer, subscriber) { + anObject(observer); + this._c = undefined; + this._o = observer; + observer = new SubscriptionObserver(this); + try { + var cleanup = subscriber(observer); + var subscription = cleanup; + if (cleanup != null) { + if (typeof cleanup.unsubscribe === 'function') cleanup = function () { subscription.unsubscribe(); }; + else aFunction(cleanup); + this._c = cleanup; + } + } catch (e) { + observer.error(e); + return; + } if (subscriptionClosed(this)) cleanupSubscription(this); +}; + +Subscription.prototype = redefineAll({}, { + unsubscribe: function unsubscribe() { closeSubscription(this); } +}); + +var SubscriptionObserver = function (subscription) { + this._s = subscription; +}; + +SubscriptionObserver.prototype = redefineAll({}, { + next: function next(value) { + var subscription = this._s; + if (!subscriptionClosed(subscription)) { + var observer = subscription._o; + try { + var m = getMethod(observer.next); + if (m) return m.call(observer, value); + } catch (e) { + try { + closeSubscription(subscription); + } finally { + throw e; + } + } + } + }, + error: function error(value) { + var subscription = this._s; + if (subscriptionClosed(subscription)) throw value; + var observer = subscription._o; + subscription._o = undefined; + try { + var m = getMethod(observer.error); + if (!m) throw value; + value = m.call(observer, value); + } catch (e) { + try { + cleanupSubscription(subscription); + } finally { + throw e; + } + } cleanupSubscription(subscription); + return value; + }, + complete: function complete(value) { + var subscription = this._s; + if (!subscriptionClosed(subscription)) { + var observer = subscription._o; + subscription._o = undefined; + try { + var m = getMethod(observer.complete); + value = m ? m.call(observer, value) : undefined; + } catch (e) { + try { + cleanupSubscription(subscription); + } finally { + throw e; + } + } cleanupSubscription(subscription); + return value; + } + } +}); + +var $Observable = function Observable(subscriber) { + anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber); +}; + +redefineAll($Observable.prototype, { + subscribe: function subscribe(observer) { + return new Subscription(observer, this._f); + }, + forEach: function forEach(fn) { + var that = this; + return new (core.Promise || global.Promise)(function (resolve, reject) { + aFunction(fn); + var subscription = that.subscribe({ + next: function (value) { + try { + return fn(value); + } catch (e) { + reject(e); + subscription.unsubscribe(); + } + }, + error: reject, + complete: resolve + }); + }); + } +}); + +redefineAll($Observable, { + from: function from(x) { + var C = typeof this === 'function' ? this : $Observable; + var method = getMethod(anObject(x)[OBSERVABLE]); + if (method) { + var observable = anObject(method.call(x)); + return observable.constructor === C ? observable : new C(function (observer) { + return observable.subscribe(observer); + }); + } + return new C(function (observer) { + var done = false; + microtask(function () { + if (!done) { + try { + if (forOf(x, false, function (it) { + observer.next(it); + if (done) return RETURN; + }) === RETURN) return; + } catch (e) { + if (done) throw e; + observer.error(e); + return; + } observer.complete(); + } + }); + return function () { done = true; }; + }); + }, + of: function of() { + for (var i = 0, l = arguments.length, items = new Array(l); i < l;) items[i] = arguments[i++]; + return new (typeof this === 'function' ? this : $Observable)(function (observer) { + var done = false; + microtask(function () { + if (!done) { + for (var j = 0; j < items.length; ++j) { + observer.next(items[j]); + if (done) return; + } observer.complete(); + } + }); + return function () { done = true; }; + }); + } +}); + +hide($Observable.prototype, OBSERVABLE, function () { return this; }); + +$export($export.G, { Observable: $Observable }); + +require('./_set-species')('Observable'); + +},{"./_a-function":136,"./_an-instance":140,"./_an-object":141,"./_core":157,"./_export":167,"./_for-of":173,"./_global":175,"./_hide":177,"./_microtask":202,"./_redefine-all":225,"./_set-species":234,"./_wks":263}],433:[function(require,module,exports){ +// https://github.com/tc39/proposal-promise-finally +'use strict'; +var $export = require('./_export'); +var core = require('./_core'); +var global = require('./_global'); +var speciesConstructor = require('./_species-constructor'); +var promiseResolve = require('./_promise-resolve'); + +$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) { + var C = speciesConstructor(this, core.Promise || global.Promise); + var isFunction = typeof onFinally == 'function'; + return this.then( + isFunction ? function (x) { + return promiseResolve(C, onFinally()).then(function () { return x; }); + } : onFinally, + isFunction ? function (e) { + return promiseResolve(C, onFinally()).then(function () { throw e; }); + } : onFinally + ); +} }); + +},{"./_core":157,"./_export":167,"./_global":175,"./_promise-resolve":223,"./_species-constructor":238}],434:[function(require,module,exports){ +'use strict'; +// https://github.com/tc39/proposal-promise-try +var $export = require('./_export'); +var newPromiseCapability = require('./_new-promise-capability'); +var perform = require('./_perform'); + +$export($export.S, 'Promise', { 'try': function (callbackfn) { + var promiseCapability = newPromiseCapability.f(this); + var result = perform(callbackfn); + (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v); + return promiseCapability.promise; +} }); + +},{"./_export":167,"./_new-promise-capability":203,"./_perform":222}],435:[function(require,module,exports){ +var metadata = require('./_metadata'); +var anObject = require('./_an-object'); +var toMetaKey = metadata.key; +var ordinaryDefineOwnMetadata = metadata.set; + +metadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) { + ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey)); +} }); + +},{"./_an-object":141,"./_metadata":201}],436:[function(require,module,exports){ +var metadata = require('./_metadata'); +var anObject = require('./_an-object'); +var toMetaKey = metadata.key; +var getOrCreateMetadataMap = metadata.map; +var store = metadata.store; + +metadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) { + var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]); + var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false); + if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false; + if (metadataMap.size) return true; + var targetMetadata = store.get(target); + targetMetadata['delete'](targetKey); + return !!targetMetadata.size || store['delete'](target); +} }); + +},{"./_an-object":141,"./_metadata":201}],437:[function(require,module,exports){ +var Set = require('./es6.set'); +var from = require('./_array-from-iterable'); +var metadata = require('./_metadata'); +var anObject = require('./_an-object'); +var getPrototypeOf = require('./_object-gpo'); +var ordinaryOwnMetadataKeys = metadata.keys; +var toMetaKey = metadata.key; + +var ordinaryMetadataKeys = function (O, P) { + var oKeys = ordinaryOwnMetadataKeys(O, P); + var parent = getPrototypeOf(O); + if (parent === null) return oKeys; + var pKeys = ordinaryMetadataKeys(parent, P); + return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys; +}; + +metadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) { + return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1])); +} }); + +},{"./_an-object":141,"./_array-from-iterable":144,"./_metadata":201,"./_object-gpo":213,"./es6.set":367}],438:[function(require,module,exports){ +var metadata = require('./_metadata'); +var anObject = require('./_an-object'); +var getPrototypeOf = require('./_object-gpo'); +var ordinaryHasOwnMetadata = metadata.has; +var ordinaryGetOwnMetadata = metadata.get; +var toMetaKey = metadata.key; + +var ordinaryGetMetadata = function (MetadataKey, O, P) { + var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P); + if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P); + var parent = getPrototypeOf(O); + return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined; +}; + +metadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) { + return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2])); +} }); + +},{"./_an-object":141,"./_metadata":201,"./_object-gpo":213}],439:[function(require,module,exports){ +var metadata = require('./_metadata'); +var anObject = require('./_an-object'); +var ordinaryOwnMetadataKeys = metadata.keys; +var toMetaKey = metadata.key; + +metadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) { + return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1])); +} }); + +},{"./_an-object":141,"./_metadata":201}],440:[function(require,module,exports){ +var metadata = require('./_metadata'); +var anObject = require('./_an-object'); +var ordinaryGetOwnMetadata = metadata.get; +var toMetaKey = metadata.key; + +metadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) { + return ordinaryGetOwnMetadata(metadataKey, anObject(target) + , arguments.length < 3 ? undefined : toMetaKey(arguments[2])); +} }); + +},{"./_an-object":141,"./_metadata":201}],441:[function(require,module,exports){ +var metadata = require('./_metadata'); +var anObject = require('./_an-object'); +var getPrototypeOf = require('./_object-gpo'); +var ordinaryHasOwnMetadata = metadata.has; +var toMetaKey = metadata.key; + +var ordinaryHasMetadata = function (MetadataKey, O, P) { + var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P); + if (hasOwn) return true; + var parent = getPrototypeOf(O); + return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false; +}; + +metadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) { + return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2])); +} }); + +},{"./_an-object":141,"./_metadata":201,"./_object-gpo":213}],442:[function(require,module,exports){ +var metadata = require('./_metadata'); +var anObject = require('./_an-object'); +var ordinaryHasOwnMetadata = metadata.has; +var toMetaKey = metadata.key; + +metadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) { + return ordinaryHasOwnMetadata(metadataKey, anObject(target) + , arguments.length < 3 ? undefined : toMetaKey(arguments[2])); +} }); + +},{"./_an-object":141,"./_metadata":201}],443:[function(require,module,exports){ +var $metadata = require('./_metadata'); +var anObject = require('./_an-object'); +var aFunction = require('./_a-function'); +var toMetaKey = $metadata.key; +var ordinaryDefineOwnMetadata = $metadata.set; + +$metadata.exp({ metadata: function metadata(metadataKey, metadataValue) { + return function decorator(target, targetKey) { + ordinaryDefineOwnMetadata( + metadataKey, metadataValue, + (targetKey !== undefined ? anObject : aFunction)(target), + toMetaKey(targetKey) + ); + }; +} }); + +},{"./_a-function":136,"./_an-object":141,"./_metadata":201}],444:[function(require,module,exports){ +// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from +require('./_set-collection-from')('Set'); + +},{"./_set-collection-from":231}],445:[function(require,module,exports){ +// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of +require('./_set-collection-of')('Set'); + +},{"./_set-collection-of":232}],446:[function(require,module,exports){ +// https://github.com/DavidBruant/Map-Set.prototype.toJSON +var $export = require('./_export'); + +$export($export.P + $export.R, 'Set', { toJSON: require('./_collection-to-json')('Set') }); + +},{"./_collection-to-json":154,"./_export":167}],447:[function(require,module,exports){ +'use strict'; +// https://github.com/mathiasbynens/String.prototype.at +var $export = require('./_export'); +var $at = require('./_string-at')(true); + +$export($export.P, 'String', { + at: function at(pos) { + return $at(this, pos); + } +}); + +},{"./_export":167,"./_string-at":240}],448:[function(require,module,exports){ +'use strict'; +// https://tc39.github.io/String.prototype.matchAll/ +var $export = require('./_export'); +var defined = require('./_defined'); +var toLength = require('./_to-length'); +var isRegExp = require('./_is-regexp'); +var getFlags = require('./_flags'); +var RegExpProto = RegExp.prototype; + +var $RegExpStringIterator = function (regexp, string) { + this._r = regexp; + this._s = string; +}; + +require('./_iter-create')($RegExpStringIterator, 'RegExp String', function next() { + var match = this._r.exec(this._s); + return { value: match, done: match === null }; +}); + +$export($export.P, 'String', { + matchAll: function matchAll(regexp) { + defined(this); + if (!isRegExp(regexp)) throw TypeError(regexp + ' is not a regexp!'); + var S = String(this); + var flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp); + var rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags); + rx.lastIndex = toLength(regexp.lastIndex); + return new $RegExpStringIterator(rx, S); + } +}); + +},{"./_defined":162,"./_export":167,"./_flags":171,"./_is-regexp":187,"./_iter-create":189,"./_to-length":252}],449:[function(require,module,exports){ +'use strict'; +// https://github.com/tc39/proposal-string-pad-start-end +var $export = require('./_export'); +var $pad = require('./_string-pad'); +var userAgent = require('./_user-agent'); + +// https://github.com/zloirock/core-js/issues/280 +var WEBKIT_BUG = /Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(userAgent); + +$export($export.P + $export.F * WEBKIT_BUG, 'String', { + padEnd: function padEnd(maxLength /* , fillString = ' ' */) { + return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false); + } +}); + +},{"./_export":167,"./_string-pad":243,"./_user-agent":259}],450:[function(require,module,exports){ +'use strict'; +// https://github.com/tc39/proposal-string-pad-start-end +var $export = require('./_export'); +var $pad = require('./_string-pad'); +var userAgent = require('./_user-agent'); + +// https://github.com/zloirock/core-js/issues/280 +var WEBKIT_BUG = /Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(userAgent); + +$export($export.P + $export.F * WEBKIT_BUG, 'String', { + padStart: function padStart(maxLength /* , fillString = ' ' */) { + return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true); + } +}); + +},{"./_export":167,"./_string-pad":243,"./_user-agent":259}],451:[function(require,module,exports){ +'use strict'; +// https://github.com/sebmarkbage/ecmascript-string-left-right-trim +require('./_string-trim')('trimLeft', function ($trim) { + return function trimLeft() { + return $trim(this, 1); + }; +}, 'trimStart'); + +},{"./_string-trim":245}],452:[function(require,module,exports){ +'use strict'; +// https://github.com/sebmarkbage/ecmascript-string-left-right-trim +require('./_string-trim')('trimRight', function ($trim) { + return function trimRight() { + return $trim(this, 2); + }; +}, 'trimEnd'); + +},{"./_string-trim":245}],453:[function(require,module,exports){ +require('./_wks-define')('asyncIterator'); + +},{"./_wks-define":261}],454:[function(require,module,exports){ +require('./_wks-define')('observable'); + +},{"./_wks-define":261}],455:[function(require,module,exports){ +// https://github.com/tc39/proposal-global +var $export = require('./_export'); + +$export($export.S, 'System', { global: require('./_global') }); + +},{"./_export":167,"./_global":175}],456:[function(require,module,exports){ +// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from +require('./_set-collection-from')('WeakMap'); + +},{"./_set-collection-from":231}],457:[function(require,module,exports){ +// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of +require('./_set-collection-of')('WeakMap'); + +},{"./_set-collection-of":232}],458:[function(require,module,exports){ +// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from +require('./_set-collection-from')('WeakSet'); + +},{"./_set-collection-from":231}],459:[function(require,module,exports){ +// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of +require('./_set-collection-of')('WeakSet'); + +},{"./_set-collection-of":232}],460:[function(require,module,exports){ +var $iterators = require('./es6.array.iterator'); +var getKeys = require('./_object-keys'); +var redefine = require('./_redefine'); +var global = require('./_global'); +var hide = require('./_hide'); +var Iterators = require('./_iterators'); +var wks = require('./_wks'); +var ITERATOR = wks('iterator'); +var TO_STRING_TAG = wks('toStringTag'); +var ArrayValues = Iterators.Array; + +var DOMIterables = { + CSSRuleList: true, // TODO: Not spec compliant, should be false. + CSSStyleDeclaration: false, + CSSValueList: false, + ClientRectList: false, + DOMRectList: false, + DOMStringList: false, + DOMTokenList: true, + DataTransferItemList: false, + FileList: false, + HTMLAllCollection: false, + HTMLCollection: false, + HTMLFormElement: false, + HTMLSelectElement: false, + MediaList: true, // TODO: Not spec compliant, should be false. + MimeTypeArray: false, + NamedNodeMap: false, + NodeList: true, + PaintRequestList: false, + Plugin: false, + PluginArray: false, + SVGLengthList: false, + SVGNumberList: false, + SVGPathSegList: false, + SVGPointList: false, + SVGStringList: false, + SVGTransformList: false, + SourceBufferList: false, + StyleSheetList: true, // TODO: Not spec compliant, should be false. + TextTrackCueList: false, + TextTrackList: false, + TouchList: false +}; + +for (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) { + var NAME = collections[i]; + var explicit = DOMIterables[NAME]; + var Collection = global[NAME]; + var proto = Collection && Collection.prototype; + var key; + if (proto) { + if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues); + if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME); + Iterators[NAME] = ArrayValues; + if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true); + } +} + +},{"./_global":175,"./_hide":177,"./_iterators":193,"./_object-keys":215,"./_redefine":226,"./_wks":263,"./es6.array.iterator":276}],461:[function(require,module,exports){ +var $export = require('./_export'); +var $task = require('./_task'); +$export($export.G + $export.B, { + setImmediate: $task.set, + clearImmediate: $task.clear +}); + +},{"./_export":167,"./_task":247}],462:[function(require,module,exports){ +// ie9- setTimeout & setInterval additional parameters fix +var global = require('./_global'); +var $export = require('./_export'); +var userAgent = require('./_user-agent'); +var slice = [].slice; +var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check +var wrap = function (set) { + return function (fn, time /* , ...args */) { + var boundArgs = arguments.length > 2; + var args = boundArgs ? slice.call(arguments, 2) : false; + return set(boundArgs ? function () { + // eslint-disable-next-line no-new-func + (typeof fn == 'function' ? fn : Function(fn)).apply(this, args); + } : fn, time); + }; +}; +$export($export.G + $export.B + $export.F * MSIE, { + setTimeout: wrap(global.setTimeout), + setInterval: wrap(global.setInterval) +}); + +},{"./_export":167,"./_global":175,"./_user-agent":259}],463:[function(require,module,exports){ +require('./modules/es6.symbol'); +require('./modules/es6.object.create'); +require('./modules/es6.object.define-property'); +require('./modules/es6.object.define-properties'); +require('./modules/es6.object.get-own-property-descriptor'); +require('./modules/es6.object.get-prototype-of'); +require('./modules/es6.object.keys'); +require('./modules/es6.object.get-own-property-names'); +require('./modules/es6.object.freeze'); +require('./modules/es6.object.seal'); +require('./modules/es6.object.prevent-extensions'); +require('./modules/es6.object.is-frozen'); +require('./modules/es6.object.is-sealed'); +require('./modules/es6.object.is-extensible'); +require('./modules/es6.object.assign'); +require('./modules/es6.object.is'); +require('./modules/es6.object.set-prototype-of'); +require('./modules/es6.object.to-string'); +require('./modules/es6.function.bind'); +require('./modules/es6.function.name'); +require('./modules/es6.function.has-instance'); +require('./modules/es6.parse-int'); +require('./modules/es6.parse-float'); +require('./modules/es6.number.constructor'); +require('./modules/es6.number.to-fixed'); +require('./modules/es6.number.to-precision'); +require('./modules/es6.number.epsilon'); +require('./modules/es6.number.is-finite'); +require('./modules/es6.number.is-integer'); +require('./modules/es6.number.is-nan'); +require('./modules/es6.number.is-safe-integer'); +require('./modules/es6.number.max-safe-integer'); +require('./modules/es6.number.min-safe-integer'); +require('./modules/es6.number.parse-float'); +require('./modules/es6.number.parse-int'); +require('./modules/es6.math.acosh'); +require('./modules/es6.math.asinh'); +require('./modules/es6.math.atanh'); +require('./modules/es6.math.cbrt'); +require('./modules/es6.math.clz32'); +require('./modules/es6.math.cosh'); +require('./modules/es6.math.expm1'); +require('./modules/es6.math.fround'); +require('./modules/es6.math.hypot'); +require('./modules/es6.math.imul'); +require('./modules/es6.math.log10'); +require('./modules/es6.math.log1p'); +require('./modules/es6.math.log2'); +require('./modules/es6.math.sign'); +require('./modules/es6.math.sinh'); +require('./modules/es6.math.tanh'); +require('./modules/es6.math.trunc'); +require('./modules/es6.string.from-code-point'); +require('./modules/es6.string.raw'); +require('./modules/es6.string.trim'); +require('./modules/es6.string.iterator'); +require('./modules/es6.string.code-point-at'); +require('./modules/es6.string.ends-with'); +require('./modules/es6.string.includes'); +require('./modules/es6.string.repeat'); +require('./modules/es6.string.starts-with'); +require('./modules/es6.string.anchor'); +require('./modules/es6.string.big'); +require('./modules/es6.string.blink'); +require('./modules/es6.string.bold'); +require('./modules/es6.string.fixed'); +require('./modules/es6.string.fontcolor'); +require('./modules/es6.string.fontsize'); +require('./modules/es6.string.italics'); +require('./modules/es6.string.link'); +require('./modules/es6.string.small'); +require('./modules/es6.string.strike'); +require('./modules/es6.string.sub'); +require('./modules/es6.string.sup'); +require('./modules/es6.date.now'); +require('./modules/es6.date.to-json'); +require('./modules/es6.date.to-iso-string'); +require('./modules/es6.date.to-string'); +require('./modules/es6.date.to-primitive'); +require('./modules/es6.array.is-array'); +require('./modules/es6.array.from'); +require('./modules/es6.array.of'); +require('./modules/es6.array.join'); +require('./modules/es6.array.slice'); +require('./modules/es6.array.sort'); +require('./modules/es6.array.for-each'); +require('./modules/es6.array.map'); +require('./modules/es6.array.filter'); +require('./modules/es6.array.some'); +require('./modules/es6.array.every'); +require('./modules/es6.array.reduce'); +require('./modules/es6.array.reduce-right'); +require('./modules/es6.array.index-of'); +require('./modules/es6.array.last-index-of'); +require('./modules/es6.array.copy-within'); +require('./modules/es6.array.fill'); +require('./modules/es6.array.find'); +require('./modules/es6.array.find-index'); +require('./modules/es6.array.species'); +require('./modules/es6.array.iterator'); +require('./modules/es6.regexp.constructor'); +require('./modules/es6.regexp.exec'); +require('./modules/es6.regexp.to-string'); +require('./modules/es6.regexp.flags'); +require('./modules/es6.regexp.match'); +require('./modules/es6.regexp.replace'); +require('./modules/es6.regexp.search'); +require('./modules/es6.regexp.split'); +require('./modules/es6.promise'); +require('./modules/es6.map'); +require('./modules/es6.set'); +require('./modules/es6.weak-map'); +require('./modules/es6.weak-set'); +require('./modules/es6.typed.array-buffer'); +require('./modules/es6.typed.data-view'); +require('./modules/es6.typed.int8-array'); +require('./modules/es6.typed.uint8-array'); +require('./modules/es6.typed.uint8-clamped-array'); +require('./modules/es6.typed.int16-array'); +require('./modules/es6.typed.uint16-array'); +require('./modules/es6.typed.int32-array'); +require('./modules/es6.typed.uint32-array'); +require('./modules/es6.typed.float32-array'); +require('./modules/es6.typed.float64-array'); +require('./modules/es6.reflect.apply'); +require('./modules/es6.reflect.construct'); +require('./modules/es6.reflect.define-property'); +require('./modules/es6.reflect.delete-property'); +require('./modules/es6.reflect.enumerate'); +require('./modules/es6.reflect.get'); +require('./modules/es6.reflect.get-own-property-descriptor'); +require('./modules/es6.reflect.get-prototype-of'); +require('./modules/es6.reflect.has'); +require('./modules/es6.reflect.is-extensible'); +require('./modules/es6.reflect.own-keys'); +require('./modules/es6.reflect.prevent-extensions'); +require('./modules/es6.reflect.set'); +require('./modules/es6.reflect.set-prototype-of'); +require('./modules/es7.array.includes'); +require('./modules/es7.array.flat-map'); +require('./modules/es7.array.flatten'); +require('./modules/es7.string.at'); +require('./modules/es7.string.pad-start'); +require('./modules/es7.string.pad-end'); +require('./modules/es7.string.trim-left'); +require('./modules/es7.string.trim-right'); +require('./modules/es7.string.match-all'); +require('./modules/es7.symbol.async-iterator'); +require('./modules/es7.symbol.observable'); +require('./modules/es7.object.get-own-property-descriptors'); +require('./modules/es7.object.values'); +require('./modules/es7.object.entries'); +require('./modules/es7.object.define-getter'); +require('./modules/es7.object.define-setter'); +require('./modules/es7.object.lookup-getter'); +require('./modules/es7.object.lookup-setter'); +require('./modules/es7.map.to-json'); +require('./modules/es7.set.to-json'); +require('./modules/es7.map.of'); +require('./modules/es7.set.of'); +require('./modules/es7.weak-map.of'); +require('./modules/es7.weak-set.of'); +require('./modules/es7.map.from'); +require('./modules/es7.set.from'); +require('./modules/es7.weak-map.from'); +require('./modules/es7.weak-set.from'); +require('./modules/es7.global'); +require('./modules/es7.system.global'); +require('./modules/es7.error.is-error'); +require('./modules/es7.math.clamp'); +require('./modules/es7.math.deg-per-rad'); +require('./modules/es7.math.degrees'); +require('./modules/es7.math.fscale'); +require('./modules/es7.math.iaddh'); +require('./modules/es7.math.isubh'); +require('./modules/es7.math.imulh'); +require('./modules/es7.math.rad-per-deg'); +require('./modules/es7.math.radians'); +require('./modules/es7.math.scale'); +require('./modules/es7.math.umulh'); +require('./modules/es7.math.signbit'); +require('./modules/es7.promise.finally'); +require('./modules/es7.promise.try'); +require('./modules/es7.reflect.define-metadata'); +require('./modules/es7.reflect.delete-metadata'); +require('./modules/es7.reflect.get-metadata'); +require('./modules/es7.reflect.get-metadata-keys'); +require('./modules/es7.reflect.get-own-metadata'); +require('./modules/es7.reflect.get-own-metadata-keys'); +require('./modules/es7.reflect.has-metadata'); +require('./modules/es7.reflect.has-own-metadata'); +require('./modules/es7.reflect.metadata'); +require('./modules/es7.asap'); +require('./modules/es7.observable'); +require('./modules/web.timers'); +require('./modules/web.immediate'); +require('./modules/web.dom.iterable'); +module.exports = require('./modules/_core'); + +},{"./modules/_core":157,"./modules/es6.array.copy-within":266,"./modules/es6.array.every":267,"./modules/es6.array.fill":268,"./modules/es6.array.filter":269,"./modules/es6.array.find":271,"./modules/es6.array.find-index":270,"./modules/es6.array.for-each":272,"./modules/es6.array.from":273,"./modules/es6.array.index-of":274,"./modules/es6.array.is-array":275,"./modules/es6.array.iterator":276,"./modules/es6.array.join":277,"./modules/es6.array.last-index-of":278,"./modules/es6.array.map":279,"./modules/es6.array.of":280,"./modules/es6.array.reduce":282,"./modules/es6.array.reduce-right":281,"./modules/es6.array.slice":283,"./modules/es6.array.some":284,"./modules/es6.array.sort":285,"./modules/es6.array.species":286,"./modules/es6.date.now":287,"./modules/es6.date.to-iso-string":288,"./modules/es6.date.to-json":289,"./modules/es6.date.to-primitive":290,"./modules/es6.date.to-string":291,"./modules/es6.function.bind":292,"./modules/es6.function.has-instance":293,"./modules/es6.function.name":294,"./modules/es6.map":295,"./modules/es6.math.acosh":296,"./modules/es6.math.asinh":297,"./modules/es6.math.atanh":298,"./modules/es6.math.cbrt":299,"./modules/es6.math.clz32":300,"./modules/es6.math.cosh":301,"./modules/es6.math.expm1":302,"./modules/es6.math.fround":303,"./modules/es6.math.hypot":304,"./modules/es6.math.imul":305,"./modules/es6.math.log10":306,"./modules/es6.math.log1p":307,"./modules/es6.math.log2":308,"./modules/es6.math.sign":309,"./modules/es6.math.sinh":310,"./modules/es6.math.tanh":311,"./modules/es6.math.trunc":312,"./modules/es6.number.constructor":313,"./modules/es6.number.epsilon":314,"./modules/es6.number.is-finite":315,"./modules/es6.number.is-integer":316,"./modules/es6.number.is-nan":317,"./modules/es6.number.is-safe-integer":318,"./modules/es6.number.max-safe-integer":319,"./modules/es6.number.min-safe-integer":320,"./modules/es6.number.parse-float":321,"./modules/es6.number.parse-int":322,"./modules/es6.number.to-fixed":323,"./modules/es6.number.to-precision":324,"./modules/es6.object.assign":325,"./modules/es6.object.create":326,"./modules/es6.object.define-properties":327,"./modules/es6.object.define-property":328,"./modules/es6.object.freeze":329,"./modules/es6.object.get-own-property-descriptor":330,"./modules/es6.object.get-own-property-names":331,"./modules/es6.object.get-prototype-of":332,"./modules/es6.object.is":336,"./modules/es6.object.is-extensible":333,"./modules/es6.object.is-frozen":334,"./modules/es6.object.is-sealed":335,"./modules/es6.object.keys":337,"./modules/es6.object.prevent-extensions":338,"./modules/es6.object.seal":339,"./modules/es6.object.set-prototype-of":340,"./modules/es6.object.to-string":341,"./modules/es6.parse-float":342,"./modules/es6.parse-int":343,"./modules/es6.promise":344,"./modules/es6.reflect.apply":345,"./modules/es6.reflect.construct":346,"./modules/es6.reflect.define-property":347,"./modules/es6.reflect.delete-property":348,"./modules/es6.reflect.enumerate":349,"./modules/es6.reflect.get":352,"./modules/es6.reflect.get-own-property-descriptor":350,"./modules/es6.reflect.get-prototype-of":351,"./modules/es6.reflect.has":353,"./modules/es6.reflect.is-extensible":354,"./modules/es6.reflect.own-keys":355,"./modules/es6.reflect.prevent-extensions":356,"./modules/es6.reflect.set":358,"./modules/es6.reflect.set-prototype-of":357,"./modules/es6.regexp.constructor":359,"./modules/es6.regexp.exec":360,"./modules/es6.regexp.flags":361,"./modules/es6.regexp.match":362,"./modules/es6.regexp.replace":363,"./modules/es6.regexp.search":364,"./modules/es6.regexp.split":365,"./modules/es6.regexp.to-string":366,"./modules/es6.set":367,"./modules/es6.string.anchor":368,"./modules/es6.string.big":369,"./modules/es6.string.blink":370,"./modules/es6.string.bold":371,"./modules/es6.string.code-point-at":372,"./modules/es6.string.ends-with":373,"./modules/es6.string.fixed":374,"./modules/es6.string.fontcolor":375,"./modules/es6.string.fontsize":376,"./modules/es6.string.from-code-point":377,"./modules/es6.string.includes":378,"./modules/es6.string.italics":379,"./modules/es6.string.iterator":380,"./modules/es6.string.link":381,"./modules/es6.string.raw":382,"./modules/es6.string.repeat":383,"./modules/es6.string.small":384,"./modules/es6.string.starts-with":385,"./modules/es6.string.strike":386,"./modules/es6.string.sub":387,"./modules/es6.string.sup":388,"./modules/es6.string.trim":389,"./modules/es6.symbol":390,"./modules/es6.typed.array-buffer":391,"./modules/es6.typed.data-view":392,"./modules/es6.typed.float32-array":393,"./modules/es6.typed.float64-array":394,"./modules/es6.typed.int16-array":395,"./modules/es6.typed.int32-array":396,"./modules/es6.typed.int8-array":397,"./modules/es6.typed.uint16-array":398,"./modules/es6.typed.uint32-array":399,"./modules/es6.typed.uint8-array":400,"./modules/es6.typed.uint8-clamped-array":401,"./modules/es6.weak-map":402,"./modules/es6.weak-set":403,"./modules/es7.array.flat-map":404,"./modules/es7.array.flatten":405,"./modules/es7.array.includes":406,"./modules/es7.asap":407,"./modules/es7.error.is-error":408,"./modules/es7.global":409,"./modules/es7.map.from":410,"./modules/es7.map.of":411,"./modules/es7.map.to-json":412,"./modules/es7.math.clamp":413,"./modules/es7.math.deg-per-rad":414,"./modules/es7.math.degrees":415,"./modules/es7.math.fscale":416,"./modules/es7.math.iaddh":417,"./modules/es7.math.imulh":418,"./modules/es7.math.isubh":419,"./modules/es7.math.rad-per-deg":420,"./modules/es7.math.radians":421,"./modules/es7.math.scale":422,"./modules/es7.math.signbit":423,"./modules/es7.math.umulh":424,"./modules/es7.object.define-getter":425,"./modules/es7.object.define-setter":426,"./modules/es7.object.entries":427,"./modules/es7.object.get-own-property-descriptors":428,"./modules/es7.object.lookup-getter":429,"./modules/es7.object.lookup-setter":430,"./modules/es7.object.values":431,"./modules/es7.observable":432,"./modules/es7.promise.finally":433,"./modules/es7.promise.try":434,"./modules/es7.reflect.define-metadata":435,"./modules/es7.reflect.delete-metadata":436,"./modules/es7.reflect.get-metadata":438,"./modules/es7.reflect.get-metadata-keys":437,"./modules/es7.reflect.get-own-metadata":440,"./modules/es7.reflect.get-own-metadata-keys":439,"./modules/es7.reflect.has-metadata":441,"./modules/es7.reflect.has-own-metadata":442,"./modules/es7.reflect.metadata":443,"./modules/es7.set.from":444,"./modules/es7.set.of":445,"./modules/es7.set.to-json":446,"./modules/es7.string.at":447,"./modules/es7.string.match-all":448,"./modules/es7.string.pad-end":449,"./modules/es7.string.pad-start":450,"./modules/es7.string.trim-left":451,"./modules/es7.string.trim-right":452,"./modules/es7.symbol.async-iterator":453,"./modules/es7.symbol.observable":454,"./modules/es7.system.global":455,"./modules/es7.weak-map.from":456,"./modules/es7.weak-map.of":457,"./modules/es7.weak-set.from":458,"./modules/es7.weak-set.of":459,"./modules/web.dom.iterable":460,"./modules/web.immediate":461,"./modules/web.timers":462}],464:[function(require,module,exports){ +(function (Buffer){ +// Copyright Joyent, Inc. and other Node 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. + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. + +function isArray(arg) { + if (Array.isArray) { + return Array.isArray(arg); + } + return objectToString(arg) === '[object Array]'; +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; + +function isError(e) { + return (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = Buffer.isBuffer; + +function objectToString(o) { + return Object.prototype.toString.call(o); +} + +}).call(this,{"isBuffer":require("../../is-buffer/index.js")}) +},{"../../is-buffer/index.js":839}],465:[function(require,module,exports){ +(function (Buffer){ +var elliptic = require('elliptic') +var BN = require('bn.js') + +module.exports = function createECDH (curve) { + return new ECDH(curve) +} + +var aliases = { + secp256k1: { + name: 'secp256k1', + byteLength: 32 + }, + secp224r1: { + name: 'p224', + byteLength: 28 + }, + prime256v1: { + name: 'p256', + byteLength: 32 + }, + prime192v1: { + name: 'p192', + byteLength: 24 + }, + ed25519: { + name: 'ed25519', + byteLength: 32 + }, + secp384r1: { + name: 'p384', + byteLength: 48 + }, + secp521r1: { + name: 'p521', + byteLength: 66 + } +} + +aliases.p224 = aliases.secp224r1 +aliases.p256 = aliases.secp256r1 = aliases.prime256v1 +aliases.p192 = aliases.secp192r1 = aliases.prime192v1 +aliases.p384 = aliases.secp384r1 +aliases.p521 = aliases.secp521r1 + +function ECDH (curve) { + this.curveType = aliases[curve] + if (!this.curveType) { + this.curveType = { + name: curve + } + } + this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap + this.keys = void 0 +} + +ECDH.prototype.generateKeys = function (enc, format) { + this.keys = this.curve.genKeyPair() + return this.getPublicKey(enc, format) +} + +ECDH.prototype.computeSecret = function (other, inenc, enc) { + inenc = inenc || 'utf8' + if (!Buffer.isBuffer(other)) { + other = new Buffer(other, inenc) + } + var otherPub = this.curve.keyFromPublic(other).getPublic() + var out = otherPub.mul(this.keys.getPrivate()).getX() + return formatReturnValue(out, enc, this.curveType.byteLength) +} + +ECDH.prototype.getPublicKey = function (enc, format) { + var key = this.keys.getPublic(format === 'compressed', true) + if (format === 'hybrid') { + if (key[key.length - 1] % 2) { + key[0] = 7 + } else { + key[0] = 6 + } + } + return formatReturnValue(key, enc) +} + +ECDH.prototype.getPrivateKey = function (enc) { + return formatReturnValue(this.keys.getPrivate(), enc) +} + +ECDH.prototype.setPublicKey = function (pub, enc) { + enc = enc || 'utf8' + if (!Buffer.isBuffer(pub)) { + pub = new Buffer(pub, enc) + } + this.keys._importPublic(pub) + return this +} + +ECDH.prototype.setPrivateKey = function (priv, enc) { + enc = enc || 'utf8' + if (!Buffer.isBuffer(priv)) { + priv = new Buffer(priv, enc) + } + + var _priv = new BN(priv) + _priv = _priv.toString(16) + this.keys = this.curve.genKeyPair() + this.keys._importPrivate(_priv) + return this +} + +function formatReturnValue (bn, enc, len) { + if (!Array.isArray(bn)) { + bn = bn.toArray() + } + var buf = new Buffer(bn) + if (len && buf.length < len) { + var zeros = new Buffer(len - buf.length) + zeros.fill(0) + buf = Buffer.concat([zeros, buf]) + } + if (!enc) { + return buf + } else { + return buf.toString(enc) + } +} + +}).call(this,require("buffer").Buffer) +},{"bn.js":66,"buffer":113,"elliptic":548}],466:[function(require,module,exports){ +'use strict' +var inherits = require('inherits') +var MD5 = require('md5.js') +var RIPEMD160 = require('ripemd160') +var sha = require('sha.js') +var Base = require('cipher-base') + +function Hash (hash) { + Base.call(this, 'digest') + + this._hash = hash +} + +inherits(Hash, Base) + +Hash.prototype._update = function (data) { + this._hash.update(data) +} + +Hash.prototype._final = function () { + return this._hash.digest() +} + +module.exports = function createHash (alg) { + alg = alg.toLowerCase() + if (alg === 'md5') return new MD5() + if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160() + + return new Hash(sha(alg)) +} + +},{"cipher-base":120,"inherits":834,"md5.js":935,"ripemd160":1330,"sha.js":1349}],467:[function(require,module,exports){ +var MD5 = require('md5.js') + +module.exports = function (buffer) { + return new MD5().update(buffer).digest() +} + +},{"md5.js":935}],468:[function(require,module,exports){ +'use strict' +var inherits = require('inherits') +var Legacy = require('./legacy') +var Base = require('cipher-base') +var Buffer = require('safe-buffer').Buffer +var md5 = require('create-hash/md5') +var RIPEMD160 = require('ripemd160') + +var sha = require('sha.js') + +var ZEROS = Buffer.alloc(128) + +function Hmac (alg, key) { + Base.call(this, 'digest') + if (typeof key === 'string') { + key = Buffer.from(key) + } + + var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64 + + this._alg = alg + this._key = key + if (key.length > blocksize) { + var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg) + key = hash.update(key).digest() + } else if (key.length < blocksize) { + key = Buffer.concat([key, ZEROS], blocksize) + } + + var ipad = this._ipad = Buffer.allocUnsafe(blocksize) + var opad = this._opad = Buffer.allocUnsafe(blocksize) + + for (var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36 + opad[i] = key[i] ^ 0x5C + } + this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg) + this._hash.update(ipad) +} + +inherits(Hmac, Base) + +Hmac.prototype._update = function (data) { + this._hash.update(data) +} + +Hmac.prototype._final = function () { + var h = this._hash.digest() + var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg) + return hash.update(this._opad).update(h).digest() +} + +module.exports = function createHmac (alg, key) { + alg = alg.toLowerCase() + if (alg === 'rmd160' || alg === 'ripemd160') { + return new Hmac('rmd160', key) + } + if (alg === 'md5') { + return new Legacy(md5, key) + } + return new Hmac(alg, key) +} + +},{"./legacy":469,"cipher-base":120,"create-hash/md5":467,"inherits":834,"ripemd160":1330,"safe-buffer":1334,"sha.js":1349}],469:[function(require,module,exports){ +'use strict' +var inherits = require('inherits') +var Buffer = require('safe-buffer').Buffer + +var Base = require('cipher-base') + +var ZEROS = Buffer.alloc(128) +var blocksize = 64 + +function Hmac (alg, key) { + Base.call(this, 'digest') + if (typeof key === 'string') { + key = Buffer.from(key) + } + + this._alg = alg + this._key = key + + if (key.length > blocksize) { + key = alg(key) + } else if (key.length < blocksize) { + key = Buffer.concat([key, ZEROS], blocksize) + } + + var ipad = this._ipad = Buffer.allocUnsafe(blocksize) + var opad = this._opad = Buffer.allocUnsafe(blocksize) + + for (var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36 + opad[i] = key[i] ^ 0x5C + } + + this._hash = [ipad] +} + +inherits(Hmac, Base) + +Hmac.prototype._update = function (data) { + this._hash.push(data) +} + +Hmac.prototype._final = function () { + var h = this._alg(Buffer.concat(this._hash)) + return this._alg(Buffer.concat([this._opad, h])) +} +module.exports = Hmac + +},{"cipher-base":120,"inherits":834,"safe-buffer":1334}],470:[function(require,module,exports){ +'use strict' + +exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes') +exports.createHash = exports.Hash = require('create-hash') +exports.createHmac = exports.Hmac = require('create-hmac') + +var algos = require('browserify-sign/algos') +var algoKeys = Object.keys(algos) +var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys) +exports.getHashes = function () { + return hashes +} + +var p = require('pbkdf2') +exports.pbkdf2 = p.pbkdf2 +exports.pbkdf2Sync = p.pbkdf2Sync + +var aes = require('browserify-cipher') + +exports.Cipher = aes.Cipher +exports.createCipher = aes.createCipher +exports.Cipheriv = aes.Cipheriv +exports.createCipheriv = aes.createCipheriv +exports.Decipher = aes.Decipher +exports.createDecipher = aes.createDecipher +exports.Decipheriv = aes.Decipheriv +exports.createDecipheriv = aes.createDecipheriv +exports.getCiphers = aes.getCiphers +exports.listCiphers = aes.listCiphers + +var dh = require('diffie-hellman') + +exports.DiffieHellmanGroup = dh.DiffieHellmanGroup +exports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup +exports.getDiffieHellman = dh.getDiffieHellman +exports.createDiffieHellman = dh.createDiffieHellman +exports.DiffieHellman = dh.DiffieHellman + +var sign = require('browserify-sign') + +exports.createSign = sign.createSign +exports.Sign = sign.Sign +exports.createVerify = sign.createVerify +exports.Verify = sign.Verify + +exports.createECDH = require('create-ecdh') + +var publicEncrypt = require('public-encrypt') + +exports.publicEncrypt = publicEncrypt.publicEncrypt +exports.privateEncrypt = publicEncrypt.privateEncrypt +exports.publicDecrypt = publicEncrypt.publicDecrypt +exports.privateDecrypt = publicEncrypt.privateDecrypt + +// the least I can do is make error messages for the rest of the node.js/crypto api. +// ;[ +// 'createCredentials' +// ].forEach(function (name) { +// exports[name] = function () { +// throw new Error([ +// 'sorry, ' + name + ' is not implemented yet', +// 'we accept pull requests', +// 'https://github.com/crypto-browserify/crypto-browserify' +// ].join('\n')) +// } +// }) + +var rf = require('randomfill') + +exports.randomFill = rf.randomFill +exports.randomFillSync = rf.randomFillSync + +exports.createCredentials = function () { + throw new Error([ + 'sorry, createCredentials is not implemented yet', + 'we accept pull requests', + 'https://github.com/crypto-browserify/crypto-browserify' + ].join('\n')) +} + +exports.constants = { + 'DH_CHECK_P_NOT_SAFE_PRIME': 2, + 'DH_CHECK_P_NOT_PRIME': 1, + 'DH_UNABLE_TO_CHECK_GENERATOR': 4, + 'DH_NOT_SUITABLE_GENERATOR': 8, + 'NPN_ENABLED': 1, + 'ALPN_ENABLED': 1, + 'RSA_PKCS1_PADDING': 1, + 'RSA_SSLV23_PADDING': 2, + 'RSA_NO_PADDING': 3, + 'RSA_PKCS1_OAEP_PADDING': 4, + 'RSA_X931_PADDING': 5, + 'RSA_PKCS1_PSS_PADDING': 6, + 'POINT_CONVERSION_COMPRESSED': 2, + 'POINT_CONVERSION_UNCOMPRESSED': 4, + 'POINT_CONVERSION_HYBRID': 6 +} + +},{"browserify-cipher":95,"browserify-sign":103,"browserify-sign/algos":100,"create-ecdh":465,"create-hash":466,"create-hmac":468,"diffie-hellman":539,"pbkdf2":1014,"public-encrypt":1026,"randombytes":1036,"randomfill":1037}],471:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var BlockCipher = C_lib.BlockCipher; + var C_algo = C.algo; + + // Lookup tables + var SBOX = []; + var INV_SBOX = []; + var SUB_MIX_0 = []; + var SUB_MIX_1 = []; + var SUB_MIX_2 = []; + var SUB_MIX_3 = []; + var INV_SUB_MIX_0 = []; + var INV_SUB_MIX_1 = []; + var INV_SUB_MIX_2 = []; + var INV_SUB_MIX_3 = []; + + // Compute lookup tables + (function () { + // Compute double table + var d = []; + for (var i = 0; i < 256; i++) { + if (i < 128) { + d[i] = i << 1; + } else { + d[i] = (i << 1) ^ 0x11b; + } + } + + // Walk GF(2^8) + var x = 0; + var xi = 0; + for (var i = 0; i < 256; i++) { + // Compute sbox + var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); + sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; + SBOX[x] = sx; + INV_SBOX[sx] = x; + + // Compute multiplication + var x2 = d[x]; + var x4 = d[x2]; + var x8 = d[x4]; + + // Compute sub bytes, mix columns tables + var t = (d[sx] * 0x101) ^ (sx * 0x1010100); + SUB_MIX_0[x] = (t << 24) | (t >>> 8); + SUB_MIX_1[x] = (t << 16) | (t >>> 16); + SUB_MIX_2[x] = (t << 8) | (t >>> 24); + SUB_MIX_3[x] = t; + + // Compute inv sub bytes, inv mix columns tables + var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); + INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); + INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); + INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); + INV_SUB_MIX_3[sx] = t; + + // Compute next counter + if (!x) { + x = xi = 1; + } else { + x = x2 ^ d[d[d[x8 ^ x2]]]; + xi ^= d[d[xi]]; + } + } + }()); + + // Precomputed Rcon lookup + var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; + + /** + * AES block cipher algorithm. + */ + var AES = C_algo.AES = BlockCipher.extend({ + _doReset: function () { + // Skip reset of nRounds has been set before and key did not change + if (this._nRounds && this._keyPriorReset === this._key) { + return; + } + + // Shortcuts + var key = this._keyPriorReset = this._key; + var keyWords = key.words; + var keySize = key.sigBytes / 4; + + // Compute number of rounds + var nRounds = this._nRounds = keySize + 6; + + // Compute number of key schedule rows + var ksRows = (nRounds + 1) * 4; + + // Compute key schedule + var keySchedule = this._keySchedule = []; + for (var ksRow = 0; ksRow < ksRows; ksRow++) { + if (ksRow < keySize) { + keySchedule[ksRow] = keyWords[ksRow]; + } else { + var t = keySchedule[ksRow - 1]; + + if (!(ksRow % keySize)) { + // Rot word + t = (t << 8) | (t >>> 24); + + // Sub word + t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; + + // Mix Rcon + t ^= RCON[(ksRow / keySize) | 0] << 24; + } else if (keySize > 6 && ksRow % keySize == 4) { + // Sub word + t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; + } + + keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; + } + } + + // Compute inv key schedule + var invKeySchedule = this._invKeySchedule = []; + for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { + var ksRow = ksRows - invKsRow; + + if (invKsRow % 4) { + var t = keySchedule[ksRow]; + } else { + var t = keySchedule[ksRow - 4]; + } + + if (invKsRow < 4 || ksRow <= 4) { + invKeySchedule[invKsRow] = t; + } else { + invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ + INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; + } + } + }, + + encryptBlock: function (M, offset) { + this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); + }, + + decryptBlock: function (M, offset) { + // Swap 2nd and 4th rows + var t = M[offset + 1]; + M[offset + 1] = M[offset + 3]; + M[offset + 3] = t; + + this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); + + // Inv swap 2nd and 4th rows + var t = M[offset + 1]; + M[offset + 1] = M[offset + 3]; + M[offset + 3] = t; + }, + + _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { + // Shortcut + var nRounds = this._nRounds; + + // Get input, add round key + var s0 = M[offset] ^ keySchedule[0]; + var s1 = M[offset + 1] ^ keySchedule[1]; + var s2 = M[offset + 2] ^ keySchedule[2]; + var s3 = M[offset + 3] ^ keySchedule[3]; + + // Key schedule row counter + var ksRow = 4; + + // Rounds + for (var round = 1; round < nRounds; round++) { + // Shift rows, sub bytes, mix columns, add round key + var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; + var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; + var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; + var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; + + // Update state + s0 = t0; + s1 = t1; + s2 = t2; + s3 = t3; + } + + // Shift rows, sub bytes, add round key + var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; + var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; + var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; + var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; + + // Set output + M[offset] = t0; + M[offset + 1] = t1; + M[offset + 2] = t2; + M[offset + 3] = t3; + }, + + keySize: 256/32 + }); + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); + * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); + */ + C.AES = BlockCipher._createHelper(AES); + }()); + + + return CryptoJS.AES; + +})); +},{"./cipher-core":472,"./core":473,"./enc-base64":474,"./evpkdf":476,"./md5":481}],472:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + /** + * Cipher core components. + */ + CryptoJS.lib.Cipher || (function (undefined) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var WordArray = C_lib.WordArray; + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; + var C_enc = C.enc; + var Utf8 = C_enc.Utf8; + var Base64 = C_enc.Base64; + var C_algo = C.algo; + var EvpKDF = C_algo.EvpKDF; + + /** + * Abstract base cipher template. + * + * @property {number} keySize This cipher's key size. Default: 4 (128 bits) + * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) + * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. + * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. + */ + var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + * + * @property {WordArray} iv The IV to use for this operation. + */ + cfg: Base.extend(), + + /** + * Creates this cipher in encryption mode. + * + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {Cipher} A cipher instance. + * + * @static + * + * @example + * + * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); + */ + createEncryptor: function (key, cfg) { + return this.create(this._ENC_XFORM_MODE, key, cfg); + }, + + /** + * Creates this cipher in decryption mode. + * + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {Cipher} A cipher instance. + * + * @static + * + * @example + * + * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); + */ + createDecryptor: function (key, cfg) { + return this.create(this._DEC_XFORM_MODE, key, cfg); + }, + + /** + * Initializes a newly created cipher. + * + * @param {number} xformMode Either the encryption or decryption transormation mode constant. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @example + * + * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); + */ + init: function (xformMode, key, cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); + + // Store transform mode and key + this._xformMode = xformMode; + this._key = key; + + // Set initial values + this.reset(); + }, + + /** + * Resets this cipher to its initial state. + * + * @example + * + * cipher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); + + // Perform concrete-cipher logic + this._doReset(); + }, + + /** + * Adds data to be encrypted or decrypted. + * + * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. + * + * @return {WordArray} The data after processing. + * + * @example + * + * var encrypted = cipher.process('data'); + * var encrypted = cipher.process(wordArray); + */ + process: function (dataUpdate) { + // Append + this._append(dataUpdate); + + // Process available blocks + return this._process(); + }, + + /** + * Finalizes the encryption or decryption process. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. + * + * @return {WordArray} The data after final processing. + * + * @example + * + * var encrypted = cipher.finalize(); + * var encrypted = cipher.finalize('data'); + * var encrypted = cipher.finalize(wordArray); + */ + finalize: function (dataUpdate) { + // Final data update + if (dataUpdate) { + this._append(dataUpdate); + } + + // Perform concrete-cipher logic + var finalProcessedData = this._doFinalize(); + + return finalProcessedData; + }, + + keySize: 128/32, + + ivSize: 128/32, + + _ENC_XFORM_MODE: 1, + + _DEC_XFORM_MODE: 2, + + /** + * Creates shortcut functions to a cipher's object interface. + * + * @param {Cipher} cipher The cipher to create a helper for. + * + * @return {Object} An object with encrypt and decrypt shortcut functions. + * + * @static + * + * @example + * + * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); + */ + _createHelper: (function () { + function selectCipherStrategy(key) { + if (typeof key == 'string') { + return PasswordBasedCipher; + } else { + return SerializableCipher; + } + } + + return function (cipher) { + return { + encrypt: function (message, key, cfg) { + return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); + }, + + decrypt: function (ciphertext, key, cfg) { + return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); + } + }; + }; + }()) + }); + + /** + * Abstract base stream cipher template. + * + * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) + */ + var StreamCipher = C_lib.StreamCipher = Cipher.extend({ + _doFinalize: function () { + // Process partial blocks + var finalProcessedBlocks = this._process(!!'flush'); + + return finalProcessedBlocks; + }, + + blockSize: 1 + }); + + /** + * Mode namespace. + */ + var C_mode = C.mode = {}; + + /** + * Abstract base block cipher mode template. + */ + var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ + /** + * Creates this mode for encryption. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @static + * + * @example + * + * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); + */ + createEncryptor: function (cipher, iv) { + return this.Encryptor.create(cipher, iv); + }, + + /** + * Creates this mode for decryption. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @static + * + * @example + * + * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); + */ + createDecryptor: function (cipher, iv) { + return this.Decryptor.create(cipher, iv); + }, + + /** + * Initializes a newly created mode. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @example + * + * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); + */ + init: function (cipher, iv) { + this._cipher = cipher; + this._iv = iv; + } + }); + + /** + * Cipher Block Chaining mode. + */ + var CBC = C_mode.CBC = (function () { + /** + * Abstract base CBC mode. + */ + var CBC = BlockCipherMode.extend(); + + /** + * CBC encryptor. + */ + CBC.Encryptor = CBC.extend({ + /** + * Processes the data block at offset. + * + * @param {Array} words The data words to operate on. + * @param {number} offset The offset where the block starts. + * + * @example + * + * mode.processBlock(data.words, offset); + */ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + // XOR and encrypt + xorBlock.call(this, words, offset, blockSize); + cipher.encryptBlock(words, offset); + + // Remember this block to use with next block + this._prevBlock = words.slice(offset, offset + blockSize); + } + }); + + /** + * CBC decryptor. + */ + CBC.Decryptor = CBC.extend({ + /** + * Processes the data block at offset. + * + * @param {Array} words The data words to operate on. + * @param {number} offset The offset where the block starts. + * + * @example + * + * mode.processBlock(data.words, offset); + */ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + // Remember this block to use with next block + var thisBlock = words.slice(offset, offset + blockSize); + + // Decrypt and XOR + cipher.decryptBlock(words, offset); + xorBlock.call(this, words, offset, blockSize); + + // This block becomes the previous block + this._prevBlock = thisBlock; + } + }); + + function xorBlock(words, offset, blockSize) { + // Shortcut + var iv = this._iv; + + // Choose mixing block + if (iv) { + var block = iv; + + // Remove IV for subsequent blocks + this._iv = undefined; + } else { + var block = this._prevBlock; + } + + // XOR blocks + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= block[i]; + } + } + + return CBC; + }()); + + /** + * Padding namespace. + */ + var C_pad = C.pad = {}; + + /** + * PKCS #5/7 padding strategy. + */ + var Pkcs7 = C_pad.Pkcs7 = { + /** + * Pads data using the algorithm defined in PKCS #5/7. + * + * @param {WordArray} data The data to pad. + * @param {number} blockSize The multiple that the data should be padded to. + * + * @static + * + * @example + * + * CryptoJS.pad.Pkcs7.pad(wordArray, 4); + */ + pad: function (data, blockSize) { + // Shortcut + var blockSizeBytes = blockSize * 4; + + // Count padding bytes + var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; + + // Create padding word + var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; + + // Create padding + var paddingWords = []; + for (var i = 0; i < nPaddingBytes; i += 4) { + paddingWords.push(paddingWord); + } + var padding = WordArray.create(paddingWords, nPaddingBytes); + + // Add padding + data.concat(padding); + }, + + /** + * Unpads data that had been padded using the algorithm defined in PKCS #5/7. + * + * @param {WordArray} data The data to unpad. + * + * @static + * + * @example + * + * CryptoJS.pad.Pkcs7.unpad(wordArray); + */ + unpad: function (data) { + // Get number of padding bytes from last byte + var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; + + // Remove padding + data.sigBytes -= nPaddingBytes; + } + }; + + /** + * Abstract base block cipher template. + * + * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) + */ + var BlockCipher = C_lib.BlockCipher = Cipher.extend({ + /** + * Configuration options. + * + * @property {Mode} mode The block mode to use. Default: CBC + * @property {Padding} padding The padding strategy to use. Default: Pkcs7 + */ + cfg: Cipher.cfg.extend({ + mode: CBC, + padding: Pkcs7 + }), + + reset: function () { + // Reset cipher + Cipher.reset.call(this); + + // Shortcuts + var cfg = this.cfg; + var iv = cfg.iv; + var mode = cfg.mode; + + // Reset block mode + if (this._xformMode == this._ENC_XFORM_MODE) { + var modeCreator = mode.createEncryptor; + } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { + var modeCreator = mode.createDecryptor; + + // Keep at least one block in the buffer for unpadding + this._minBufferSize = 1; + } + this._mode = modeCreator.call(mode, this, iv && iv.words); + }, + + _doProcessBlock: function (words, offset) { + this._mode.processBlock(words, offset); + }, + + _doFinalize: function () { + // Shortcut + var padding = this.cfg.padding; + + // Finalize + if (this._xformMode == this._ENC_XFORM_MODE) { + // Pad data + padding.pad(this._data, this.blockSize); + + // Process final blocks + var finalProcessedBlocks = this._process(!!'flush'); + } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { + // Process final blocks + var finalProcessedBlocks = this._process(!!'flush'); + + // Unpad data + padding.unpad(finalProcessedBlocks); + } + + return finalProcessedBlocks; + }, + + blockSize: 128/32 + }); + + /** + * A collection of cipher parameters. + * + * @property {WordArray} ciphertext The raw ciphertext. + * @property {WordArray} key The key to this ciphertext. + * @property {WordArray} iv The IV used in the ciphering operation. + * @property {WordArray} salt The salt used with a key derivation function. + * @property {Cipher} algorithm The cipher algorithm. + * @property {Mode} mode The block mode used in the ciphering operation. + * @property {Padding} padding The padding scheme used in the ciphering operation. + * @property {number} blockSize The block size of the cipher. + * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. + */ + var CipherParams = C_lib.CipherParams = Base.extend({ + /** + * Initializes a newly created cipher params object. + * + * @param {Object} cipherParams An object with any of the possible cipher parameters. + * + * @example + * + * var cipherParams = CryptoJS.lib.CipherParams.create({ + * ciphertext: ciphertextWordArray, + * key: keyWordArray, + * iv: ivWordArray, + * salt: saltWordArray, + * algorithm: CryptoJS.algo.AES, + * mode: CryptoJS.mode.CBC, + * padding: CryptoJS.pad.PKCS7, + * blockSize: 4, + * formatter: CryptoJS.format.OpenSSL + * }); + */ + init: function (cipherParams) { + this.mixIn(cipherParams); + }, + + /** + * Converts this cipher params object to a string. + * + * @param {Format} formatter (Optional) The formatting strategy to use. + * + * @return {string} The stringified cipher params. + * + * @throws Error If neither the formatter nor the default formatter is set. + * + * @example + * + * var string = cipherParams + ''; + * var string = cipherParams.toString(); + * var string = cipherParams.toString(CryptoJS.format.OpenSSL); + */ + toString: function (formatter) { + return (formatter || this.formatter).stringify(this); + } + }); + + /** + * Format namespace. + */ + var C_format = C.format = {}; + + /** + * OpenSSL formatting strategy. + */ + var OpenSSLFormatter = C_format.OpenSSL = { + /** + * Converts a cipher params object to an OpenSSL-compatible string. + * + * @param {CipherParams} cipherParams The cipher params object. + * + * @return {string} The OpenSSL-compatible string. + * + * @static + * + * @example + * + * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); + */ + stringify: function (cipherParams) { + // Shortcuts + var ciphertext = cipherParams.ciphertext; + var salt = cipherParams.salt; + + // Format + if (salt) { + var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); + } else { + var wordArray = ciphertext; + } + + return wordArray.toString(Base64); + }, + + /** + * Converts an OpenSSL-compatible string to a cipher params object. + * + * @param {string} openSSLStr The OpenSSL-compatible string. + * + * @return {CipherParams} The cipher params object. + * + * @static + * + * @example + * + * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); + */ + parse: function (openSSLStr) { + // Parse base64 + var ciphertext = Base64.parse(openSSLStr); + + // Shortcut + var ciphertextWords = ciphertext.words; + + // Test for salt + if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { + // Extract salt + var salt = WordArray.create(ciphertextWords.slice(2, 4)); + + // Remove salt from ciphertext + ciphertextWords.splice(0, 4); + ciphertext.sigBytes -= 16; + } + + return CipherParams.create({ ciphertext: ciphertext, salt: salt }); + } + }; + + /** + * A cipher wrapper that returns ciphertext as a serializable cipher params object. + */ + var SerializableCipher = C_lib.SerializableCipher = Base.extend({ + /** + * Configuration options. + * + * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL + */ + cfg: Base.extend({ + format: OpenSSLFormatter + }), + + /** + * Encrypts a message. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {WordArray|string} message The message to encrypt. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {CipherParams} A cipher params object. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + */ + encrypt: function (cipher, message, key, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Encrypt + var encryptor = cipher.createEncryptor(key, cfg); + var ciphertext = encryptor.finalize(message); + + // Shortcut + var cipherCfg = encryptor.cfg; + + // Create and return serializable cipher params + return CipherParams.create({ + ciphertext: ciphertext, + key: key, + iv: cipherCfg.iv, + algorithm: cipher, + mode: cipherCfg.mode, + padding: cipherCfg.padding, + blockSize: cipher.blockSize, + formatter: cfg.format + }); + }, + + /** + * Decrypts serialized ciphertext. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {CipherParams|string} ciphertext The ciphertext to decrypt. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {WordArray} The plaintext. + * + * @static + * + * @example + * + * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + */ + decrypt: function (cipher, ciphertext, key, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Convert string to CipherParams + ciphertext = this._parse(ciphertext, cfg.format); + + // Decrypt + var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); + + return plaintext; + }, + + /** + * Converts serialized ciphertext to CipherParams, + * else assumed CipherParams already and returns ciphertext unchanged. + * + * @param {CipherParams|string} ciphertext The ciphertext. + * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. + * + * @return {CipherParams} The unserialized ciphertext. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); + */ + _parse: function (ciphertext, format) { + if (typeof ciphertext == 'string') { + return format.parse(ciphertext, this); + } else { + return ciphertext; + } + } + }); + + /** + * Key derivation function namespace. + */ + var C_kdf = C.kdf = {}; + + /** + * OpenSSL key derivation function. + */ + var OpenSSLKdf = C_kdf.OpenSSL = { + /** + * Derives a key and IV from a password. + * + * @param {string} password The password to derive from. + * @param {number} keySize The size in words of the key to generate. + * @param {number} ivSize The size in words of the IV to generate. + * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. + * + * @return {CipherParams} A cipher params object with the key, IV, and salt. + * + * @static + * + * @example + * + * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); + * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); + */ + execute: function (password, keySize, ivSize, salt) { + // Generate random salt + if (!salt) { + salt = WordArray.random(64/8); + } + + // Derive key and IV + var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); + + // Separate key and IV + var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); + key.sigBytes = keySize * 4; + + // Return params + return CipherParams.create({ key: key, iv: iv, salt: salt }); + } + }; + + /** + * A serializable cipher wrapper that derives the key from a password, + * and returns ciphertext as a serializable cipher params object. + */ + var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ + /** + * Configuration options. + * + * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL + */ + cfg: SerializableCipher.cfg.extend({ + kdf: OpenSSLKdf + }), + + /** + * Encrypts a message using a password. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {WordArray|string} message The message to encrypt. + * @param {string} password The password. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {CipherParams} A cipher params object. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); + * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); + */ + encrypt: function (cipher, message, password, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Derive key and other params + var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); + + // Add IV to config + cfg.iv = derivedParams.iv; + + // Encrypt + var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); + + // Mix in derived params + ciphertext.mixIn(derivedParams); + + return ciphertext; + }, + + /** + * Decrypts serialized ciphertext using a password. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {CipherParams|string} ciphertext The ciphertext to decrypt. + * @param {string} password The password. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {WordArray} The plaintext. + * + * @static + * + * @example + * + * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); + * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); + */ + decrypt: function (cipher, ciphertext, password, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); + + // Convert string to CipherParams + ciphertext = this._parse(ciphertext, cfg.format); + + // Derive key and other params + var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); + + // Add IV to config + cfg.iv = derivedParams.iv; + + // Decrypt + var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); + + return plaintext; + } + }); + }()); + + +})); +},{"./core":473}],473:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(); + } + else if (typeof define === "function" && define.amd) { + // AMD + define([], factory); + } + else { + // Global (browser) + root.CryptoJS = factory(); + } +}(this, function () { + + /** + * CryptoJS core components. + */ + var CryptoJS = CryptoJS || (function (Math, undefined) { + /* + * Local polyfil of Object.create + */ + var create = Object.create || (function () { + function F() {}; + + return function (obj) { + var subtype; + + F.prototype = obj; + + subtype = new F(); + + F.prototype = null; + + return subtype; + }; + }()) + + /** + * CryptoJS namespace. + */ + var C = {}; + + /** + * Library namespace. + */ + var C_lib = C.lib = {}; + + /** + * Base object for prototypal inheritance. + */ + var Base = C_lib.Base = (function () { + + + return { + /** + * Creates a new object that inherits from this object. + * + * @param {Object} overrides Properties to copy into the new object. + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * field: 'value', + * + * method: function () { + * } + * }); + */ + extend: function (overrides) { + // Spawn + var subtype = create(this); + + // Augment + if (overrides) { + subtype.mixIn(overrides); + } + + // Create default initializer + if (!subtype.hasOwnProperty('init') || this.init === subtype.init) { + subtype.init = function () { + subtype.$super.init.apply(this, arguments); + }; + } + + // Initializer's prototype is the subtype object + subtype.init.prototype = subtype; + + // Reference supertype + subtype.$super = this; + + return subtype; + }, + + /** + * Extends this object and runs the init method. + * Arguments to create() will be passed to init(). + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var instance = MyType.create(); + */ + create: function () { + var instance = this.extend(); + instance.init.apply(instance, arguments); + + return instance; + }, + + /** + * Initializes a newly created object. + * Override this method to add some logic when your objects are created. + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * init: function () { + * // ... + * } + * }); + */ + init: function () { + }, + + /** + * Copies properties into this object. + * + * @param {Object} properties The properties to mix in. + * + * @example + * + * MyType.mixIn({ + * field: 'value' + * }); + */ + mixIn: function (properties) { + for (var propertyName in properties) { + if (properties.hasOwnProperty(propertyName)) { + this[propertyName] = properties[propertyName]; + } + } + + // IE won't copy toString using the loop above + if (properties.hasOwnProperty('toString')) { + this.toString = properties.toString; + } + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = instance.clone(); + */ + clone: function () { + return this.init.prototype.extend(this); + } + }; + }()); + + /** + * An array of 32-bit words. + * + * @property {Array} words The array of 32-bit words. + * @property {number} sigBytes The number of significant bytes in this word array. + */ + var WordArray = C_lib.WordArray = Base.extend({ + /** + * Initializes a newly created word array. + * + * @param {Array} words (Optional) An array of 32-bit words. + * @param {number} sigBytes (Optional) The number of significant bytes in the words. + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.create(); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); + */ + init: function (words, sigBytes) { + words = this.words = words || []; + + if (sigBytes != undefined) { + this.sigBytes = sigBytes; + } else { + this.sigBytes = words.length * 4; + } + }, + + /** + * Converts this word array to a string. + * + * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex + * + * @return {string} The stringified word array. + * + * @example + * + * var string = wordArray + ''; + * var string = wordArray.toString(); + * var string = wordArray.toString(CryptoJS.enc.Utf8); + */ + toString: function (encoder) { + return (encoder || Hex).stringify(this); + }, + + /** + * Concatenates a word array to this word array. + * + * @param {WordArray} wordArray The word array to append. + * + * @return {WordArray} This word array. + * + * @example + * + * wordArray1.concat(wordArray2); + */ + concat: function (wordArray) { + // Shortcuts + var thisWords = this.words; + var thatWords = wordArray.words; + var thisSigBytes = this.sigBytes; + var thatSigBytes = wordArray.sigBytes; + + // Clamp excess bits + this.clamp(); + + // Concat + if (thisSigBytes % 4) { + // Copy one byte at a time + for (var i = 0; i < thatSigBytes; i++) { + var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); + } + } else { + // Copy one word at a time + for (var i = 0; i < thatSigBytes; i += 4) { + thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; + } + } + this.sigBytes += thatSigBytes; + + // Chainable + return this; + }, + + /** + * Removes insignificant bits. + * + * @example + * + * wordArray.clamp(); + */ + clamp: function () { + // Shortcuts + var words = this.words; + var sigBytes = this.sigBytes; + + // Clamp + words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); + words.length = Math.ceil(sigBytes / 4); + }, + + /** + * Creates a copy of this word array. + * + * @return {WordArray} The clone. + * + * @example + * + * var clone = wordArray.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone.words = this.words.slice(0); + + return clone; + }, + + /** + * Creates a word array filled with random bytes. + * + * @param {number} nBytes The number of random bytes to generate. + * + * @return {WordArray} The random word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.random(16); + */ + random: function (nBytes) { + var words = []; + + var r = (function (m_w) { + var m_w = m_w; + var m_z = 0x3ade68b1; + var mask = 0xffffffff; + + return function () { + m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; + m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; + var result = ((m_z << 0x10) + m_w) & mask; + result /= 0x100000000; + result += 0.5; + return result * (Math.random() > .5 ? 1 : -1); + } + }); + + for (var i = 0, rcache; i < nBytes; i += 4) { + var _r = r((rcache || Math.random()) * 0x100000000); + + rcache = _r() * 0x3ade67b7; + words.push((_r() * 0x100000000) | 0); + } + + return new WordArray.init(words, nBytes); + } + }); + + /** + * Encoder namespace. + */ + var C_enc = C.enc = {}; + + /** + * Hex encoding strategy. + */ + var Hex = C_enc.Hex = { + /** + * Converts a word array to a hex string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The hex string. + * + * @static + * + * @example + * + * var hexString = CryptoJS.enc.Hex.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var hexChars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + hexChars.push((bite >>> 4).toString(16)); + hexChars.push((bite & 0x0f).toString(16)); + } + + return hexChars.join(''); + }, + + /** + * Converts a hex string to a word array. + * + * @param {string} hexStr The hex string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Hex.parse(hexString); + */ + parse: function (hexStr) { + // Shortcut + var hexStrLength = hexStr.length; + + // Convert + var words = []; + for (var i = 0; i < hexStrLength; i += 2) { + words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); + } + + return new WordArray.init(words, hexStrLength / 2); + } + }; + + /** + * Latin1 encoding strategy. + */ + var Latin1 = C_enc.Latin1 = { + /** + * Converts a word array to a Latin1 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Latin1 string. + * + * @static + * + * @example + * + * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var latin1Chars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + latin1Chars.push(String.fromCharCode(bite)); + } + + return latin1Chars.join(''); + }, + + /** + * Converts a Latin1 string to a word array. + * + * @param {string} latin1Str The Latin1 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); + */ + parse: function (latin1Str) { + // Shortcut + var latin1StrLength = latin1Str.length; + + // Convert + var words = []; + for (var i = 0; i < latin1StrLength; i++) { + words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); + } + + return new WordArray.init(words, latin1StrLength); + } + }; + + /** + * UTF-8 encoding strategy. + */ + var Utf8 = C_enc.Utf8 = { + /** + * Converts a word array to a UTF-8 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-8 string. + * + * @static + * + * @example + * + * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); + */ + stringify: function (wordArray) { + try { + return decodeURIComponent(escape(Latin1.stringify(wordArray))); + } catch (e) { + throw new Error('Malformed UTF-8 data'); + } + }, + + /** + * Converts a UTF-8 string to a word array. + * + * @param {string} utf8Str The UTF-8 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); + */ + parse: function (utf8Str) { + return Latin1.parse(unescape(encodeURIComponent(utf8Str))); + } + }; + + /** + * Abstract buffered block algorithm template. + * + * The property blockSize must be implemented in a concrete subtype. + * + * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 + */ + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ + /** + * Resets this block algorithm's data buffer to its initial state. + * + * @example + * + * bufferedBlockAlgorithm.reset(); + */ + reset: function () { + // Initial values + this._data = new WordArray.init(); + this._nDataBytes = 0; + }, + + /** + * Adds new data to this block algorithm's buffer. + * + * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. + * + * @example + * + * bufferedBlockAlgorithm._append('data'); + * bufferedBlockAlgorithm._append(wordArray); + */ + _append: function (data) { + // Convert string to WordArray, else assume WordArray already + if (typeof data == 'string') { + data = Utf8.parse(data); + } + + // Append + this._data.concat(data); + this._nDataBytes += data.sigBytes; + }, + + /** + * Processes available data blocks. + * + * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. + * + * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. + * + * @return {WordArray} The processed data. + * + * @example + * + * var processedData = bufferedBlockAlgorithm._process(); + * var processedData = bufferedBlockAlgorithm._process(!!'flush'); + */ + _process: function (doFlush) { + // Shortcuts + var data = this._data; + var dataWords = data.words; + var dataSigBytes = data.sigBytes; + var blockSize = this.blockSize; + var blockSizeBytes = blockSize * 4; + + // Count blocks ready + var nBlocksReady = dataSigBytes / blockSizeBytes; + if (doFlush) { + // Round up to include partial blocks + nBlocksReady = Math.ceil(nBlocksReady); + } else { + // Round down to include only full blocks, + // less the number of blocks that must remain in the buffer + nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); + } + + // Count words ready + var nWordsReady = nBlocksReady * blockSize; + + // Count bytes ready + var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); + + // Process blocks + if (nWordsReady) { + for (var offset = 0; offset < nWordsReady; offset += blockSize) { + // Perform concrete-algorithm logic + this._doProcessBlock(dataWords, offset); + } + + // Remove processed words + var processedWords = dataWords.splice(0, nWordsReady); + data.sigBytes -= nBytesReady; + } + + // Return processed words + return new WordArray.init(processedWords, nBytesReady); + }, + + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = bufferedBlockAlgorithm.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone._data = this._data.clone(); + + return clone; + }, + + _minBufferSize: 0 + }); + + /** + * Abstract hasher template. + * + * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) + */ + var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + */ + cfg: Base.extend(), + + /** + * Initializes a newly created hasher. + * + * @param {Object} cfg (Optional) The configuration options to use for this hash computation. + * + * @example + * + * var hasher = CryptoJS.algo.SHA256.create(); + */ + init: function (cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); + + // Set initial values + this.reset(); + }, + + /** + * Resets this hasher to its initial state. + * + * @example + * + * hasher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); + + // Perform concrete-hasher logic + this._doReset(); + }, + + /** + * Updates this hasher with a message. + * + * @param {WordArray|string} messageUpdate The message to append. + * + * @return {Hasher} This hasher. + * + * @example + * + * hasher.update('message'); + * hasher.update(wordArray); + */ + update: function (messageUpdate) { + // Append + this._append(messageUpdate); + + // Update the hash + this._process(); + + // Chainable + return this; + }, + + /** + * Finalizes the hash computation. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} messageUpdate (Optional) A final message update. + * + * @return {WordArray} The hash. + * + * @example + * + * var hash = hasher.finalize(); + * var hash = hasher.finalize('message'); + * var hash = hasher.finalize(wordArray); + */ + finalize: function (messageUpdate) { + // Final message update + if (messageUpdate) { + this._append(messageUpdate); + } + + // Perform concrete-hasher logic + var hash = this._doFinalize(); + + return hash; + }, + + blockSize: 512/32, + + /** + * Creates a shortcut function to a hasher's object interface. + * + * @param {Hasher} hasher The hasher to create a helper for. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); + */ + _createHelper: function (hasher) { + return function (message, cfg) { + return new hasher.init(cfg).finalize(message); + }; + }, + + /** + * Creates a shortcut function to the HMAC's object interface. + * + * @param {Hasher} hasher The hasher to use in this HMAC helper. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); + */ + _createHmacHelper: function (hasher) { + return function (message, key) { + return new C_algo.HMAC.init(hasher, key).finalize(message); + }; + } + }); + + /** + * Algorithm namespace. + */ + var C_algo = C.algo = {}; + + return C; + }(Math)); + + + return CryptoJS; + +})); +},{}],474:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var C_enc = C.enc; + + /** + * Base64 encoding strategy. + */ + var Base64 = C_enc.Base64 = { + /** + * Converts a word array to a Base64 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Base64 string. + * + * @static + * + * @example + * + * var base64String = CryptoJS.enc.Base64.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + var map = this._map; + + // Clamp excess bits + wordArray.clamp(); + + // Convert + var base64Chars = []; + for (var i = 0; i < sigBytes; i += 3) { + var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; + var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; + + var triplet = (byte1 << 16) | (byte2 << 8) | byte3; + + for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { + base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); + } + } + + // Add padding + var paddingChar = map.charAt(64); + if (paddingChar) { + while (base64Chars.length % 4) { + base64Chars.push(paddingChar); + } + } + + return base64Chars.join(''); + }, + + /** + * Converts a Base64 string to a word array. + * + * @param {string} base64Str The Base64 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Base64.parse(base64String); + */ + parse: function (base64Str) { + // Shortcuts + var base64StrLength = base64Str.length; + var map = this._map; + var reverseMap = this._reverseMap; + + if (!reverseMap) { + reverseMap = this._reverseMap = []; + for (var j = 0; j < map.length; j++) { + reverseMap[map.charCodeAt(j)] = j; + } + } + + // Ignore padding + var paddingChar = map.charAt(64); + if (paddingChar) { + var paddingIndex = base64Str.indexOf(paddingChar); + if (paddingIndex !== -1) { + base64StrLength = paddingIndex; + } + } + + // Convert + return parseLoop(base64Str, base64StrLength, reverseMap); + + }, + + _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' + }; + + function parseLoop(base64Str, base64StrLength, reverseMap) { + var words = []; + var nBytes = 0; + for (var i = 0; i < base64StrLength; i++) { + if (i % 4) { + var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2); + var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2); + words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8); + nBytes++; + } + } + return WordArray.create(words, nBytes); + } + }()); + + + return CryptoJS.enc.Base64; + +})); +},{"./core":473}],475:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var C_enc = C.enc; + + /** + * UTF-16 BE encoding strategy. + */ + var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { + /** + * Converts a word array to a UTF-16 BE string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-16 BE string. + * + * @static + * + * @example + * + * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var utf16Chars = []; + for (var i = 0; i < sigBytes; i += 2) { + var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; + utf16Chars.push(String.fromCharCode(codePoint)); + } + + return utf16Chars.join(''); + }, + + /** + * Converts a UTF-16 BE string to a word array. + * + * @param {string} utf16Str The UTF-16 BE string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); + */ + parse: function (utf16Str) { + // Shortcut + var utf16StrLength = utf16Str.length; + + // Convert + var words = []; + for (var i = 0; i < utf16StrLength; i++) { + words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); + } + + return WordArray.create(words, utf16StrLength * 2); + } + }; + + /** + * UTF-16 LE encoding strategy. + */ + C_enc.Utf16LE = { + /** + * Converts a word array to a UTF-16 LE string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-16 LE string. + * + * @static + * + * @example + * + * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + + // Convert + var utf16Chars = []; + for (var i = 0; i < sigBytes; i += 2) { + var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); + utf16Chars.push(String.fromCharCode(codePoint)); + } + + return utf16Chars.join(''); + }, + + /** + * Converts a UTF-16 LE string to a word array. + * + * @param {string} utf16Str The UTF-16 LE string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); + */ + parse: function (utf16Str) { + // Shortcut + var utf16StrLength = utf16Str.length; + + // Convert + var words = []; + for (var i = 0; i < utf16StrLength; i++) { + words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); + } + + return WordArray.create(words, utf16StrLength * 2); + } + }; + + function swapEndian(word) { + return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); + } + }()); + + + return CryptoJS.enc.Utf16; + +})); +},{"./core":473}],476:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./sha1", "./hmac"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var WordArray = C_lib.WordArray; + var C_algo = C.algo; + var MD5 = C_algo.MD5; + + /** + * This key derivation function is meant to conform with EVP_BytesToKey. + * www.openssl.org/docs/crypto/EVP_BytesToKey.html + */ + var EvpKDF = C_algo.EvpKDF = Base.extend({ + /** + * Configuration options. + * + * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) + * @property {Hasher} hasher The hash algorithm to use. Default: MD5 + * @property {number} iterations The number of iterations to perform. Default: 1 + */ + cfg: Base.extend({ + keySize: 128/32, + hasher: MD5, + iterations: 1 + }), + + /** + * Initializes a newly created key derivation function. + * + * @param {Object} cfg (Optional) The configuration options to use for the derivation. + * + * @example + * + * var kdf = CryptoJS.algo.EvpKDF.create(); + * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); + * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); + */ + init: function (cfg) { + this.cfg = this.cfg.extend(cfg); + }, + + /** + * Derives a key from a password. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * + * @return {WordArray} The derived key. + * + * @example + * + * var key = kdf.compute(password, salt); + */ + compute: function (password, salt) { + // Shortcut + var cfg = this.cfg; + + // Init hasher + var hasher = cfg.hasher.create(); + + // Initial values + var derivedKey = WordArray.create(); + + // Shortcuts + var derivedKeyWords = derivedKey.words; + var keySize = cfg.keySize; + var iterations = cfg.iterations; + + // Generate key + while (derivedKeyWords.length < keySize) { + if (block) { + hasher.update(block); + } + var block = hasher.update(password).finalize(salt); + hasher.reset(); + + // Iterations + for (var i = 1; i < iterations; i++) { + block = hasher.finalize(block); + hasher.reset(); + } + + derivedKey.concat(block); + } + derivedKey.sigBytes = keySize * 4; + + return derivedKey; + } + }); + + /** + * Derives a key from a password. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * @param {Object} cfg (Optional) The configuration options to use for this computation. + * + * @return {WordArray} The derived key. + * + * @static + * + * @example + * + * var key = CryptoJS.EvpKDF(password, salt); + * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); + * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); + */ + C.EvpKDF = function (password, salt, cfg) { + return EvpKDF.create(cfg).compute(password, salt); + }; + }()); + + + return CryptoJS.EvpKDF; + +})); +},{"./core":473,"./hmac":478,"./sha1":497}],477:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./cipher-core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./cipher-core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function (undefined) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var CipherParams = C_lib.CipherParams; + var C_enc = C.enc; + var Hex = C_enc.Hex; + var C_format = C.format; + + var HexFormatter = C_format.Hex = { + /** + * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. + * + * @param {CipherParams} cipherParams The cipher params object. + * + * @return {string} The hexadecimally encoded string. + * + * @static + * + * @example + * + * var hexString = CryptoJS.format.Hex.stringify(cipherParams); + */ + stringify: function (cipherParams) { + return cipherParams.ciphertext.toString(Hex); + }, + + /** + * Converts a hexadecimally encoded ciphertext string to a cipher params object. + * + * @param {string} input The hexadecimally encoded string. + * + * @return {CipherParams} The cipher params object. + * + * @static + * + * @example + * + * var cipherParams = CryptoJS.format.Hex.parse(hexString); + */ + parse: function (input) { + var ciphertext = Hex.parse(input); + return CipherParams.create({ ciphertext: ciphertext }); + } + }; + }()); + + + return CryptoJS.format.Hex; + +})); +},{"./cipher-core":472,"./core":473}],478:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var C_enc = C.enc; + var Utf8 = C_enc.Utf8; + var C_algo = C.algo; + + /** + * HMAC algorithm. + */ + var HMAC = C_algo.HMAC = Base.extend({ + /** + * Initializes a newly created HMAC. + * + * @param {Hasher} hasher The hash algorithm to use. + * @param {WordArray|string} key The secret key. + * + * @example + * + * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); + */ + init: function (hasher, key) { + // Init hasher + hasher = this._hasher = new hasher.init(); + + // Convert string to WordArray, else assume WordArray already + if (typeof key == 'string') { + key = Utf8.parse(key); + } + + // Shortcuts + var hasherBlockSize = hasher.blockSize; + var hasherBlockSizeBytes = hasherBlockSize * 4; + + // Allow arbitrary length keys + if (key.sigBytes > hasherBlockSizeBytes) { + key = hasher.finalize(key); + } + + // Clamp excess bits + key.clamp(); + + // Clone key for inner and outer pads + var oKey = this._oKey = key.clone(); + var iKey = this._iKey = key.clone(); + + // Shortcuts + var oKeyWords = oKey.words; + var iKeyWords = iKey.words; + + // XOR keys with pad constants + for (var i = 0; i < hasherBlockSize; i++) { + oKeyWords[i] ^= 0x5c5c5c5c; + iKeyWords[i] ^= 0x36363636; + } + oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; + + // Set initial values + this.reset(); + }, + + /** + * Resets this HMAC to its initial state. + * + * @example + * + * hmacHasher.reset(); + */ + reset: function () { + // Shortcut + var hasher = this._hasher; + + // Reset + hasher.reset(); + hasher.update(this._iKey); + }, + + /** + * Updates this HMAC with a message. + * + * @param {WordArray|string} messageUpdate The message to append. + * + * @return {HMAC} This HMAC instance. + * + * @example + * + * hmacHasher.update('message'); + * hmacHasher.update(wordArray); + */ + update: function (messageUpdate) { + this._hasher.update(messageUpdate); + + // Chainable + return this; + }, + + /** + * Finalizes the HMAC computation. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} messageUpdate (Optional) A final message update. + * + * @return {WordArray} The HMAC. + * + * @example + * + * var hmac = hmacHasher.finalize(); + * var hmac = hmacHasher.finalize('message'); + * var hmac = hmacHasher.finalize(wordArray); + */ + finalize: function (messageUpdate) { + // Shortcut + var hasher = this._hasher; + + // Compute HMAC + var innerHash = hasher.finalize(messageUpdate); + hasher.reset(); + var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); + + return hmac; + } + }); + }()); + + +})); +},{"./core":473}],479:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./x64-core"), require("./lib-typedarrays"), require("./enc-utf16"), require("./enc-base64"), require("./md5"), require("./sha1"), require("./sha256"), require("./sha224"), require("./sha512"), require("./sha384"), require("./sha3"), require("./ripemd160"), require("./hmac"), require("./pbkdf2"), require("./evpkdf"), require("./cipher-core"), require("./mode-cfb"), require("./mode-ctr"), require("./mode-ctr-gladman"), require("./mode-ofb"), require("./mode-ecb"), require("./pad-ansix923"), require("./pad-iso10126"), require("./pad-iso97971"), require("./pad-zeropadding"), require("./pad-nopadding"), require("./format-hex"), require("./aes"), require("./tripledes"), require("./rc4"), require("./rabbit"), require("./rabbit-legacy")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./x64-core", "./lib-typedarrays", "./enc-utf16", "./enc-base64", "./md5", "./sha1", "./sha256", "./sha224", "./sha512", "./sha384", "./sha3", "./ripemd160", "./hmac", "./pbkdf2", "./evpkdf", "./cipher-core", "./mode-cfb", "./mode-ctr", "./mode-ctr-gladman", "./mode-ofb", "./mode-ecb", "./pad-ansix923", "./pad-iso10126", "./pad-iso97971", "./pad-zeropadding", "./pad-nopadding", "./format-hex", "./aes", "./tripledes", "./rc4", "./rabbit", "./rabbit-legacy"], factory); + } + else { + // Global (browser) + root.CryptoJS = factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + return CryptoJS; + +})); +},{"./aes":471,"./cipher-core":472,"./core":473,"./enc-base64":474,"./enc-utf16":475,"./evpkdf":476,"./format-hex":477,"./hmac":478,"./lib-typedarrays":480,"./md5":481,"./mode-cfb":482,"./mode-ctr":484,"./mode-ctr-gladman":483,"./mode-ecb":485,"./mode-ofb":486,"./pad-ansix923":487,"./pad-iso10126":488,"./pad-iso97971":489,"./pad-nopadding":490,"./pad-zeropadding":491,"./pbkdf2":492,"./rabbit":494,"./rabbit-legacy":493,"./rc4":495,"./ripemd160":496,"./sha1":497,"./sha224":498,"./sha256":499,"./sha3":500,"./sha384":501,"./sha512":502,"./tripledes":503,"./x64-core":504}],480:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function () { + // Check if typed arrays are supported + if (typeof ArrayBuffer != 'function') { + return; + } + + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + + // Reference original init + var superInit = WordArray.init; + + // Augment WordArray.init to handle typed arrays + var subInit = WordArray.init = function (typedArray) { + // Convert buffers to uint8 + if (typedArray instanceof ArrayBuffer) { + typedArray = new Uint8Array(typedArray); + } + + // Convert other array views to uint8 + if ( + typedArray instanceof Int8Array || + (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || + typedArray instanceof Int16Array || + typedArray instanceof Uint16Array || + typedArray instanceof Int32Array || + typedArray instanceof Uint32Array || + typedArray instanceof Float32Array || + typedArray instanceof Float64Array + ) { + typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); + } + + // Handle Uint8Array + if (typedArray instanceof Uint8Array) { + // Shortcut + var typedArrayByteLength = typedArray.byteLength; + + // Extract bytes + var words = []; + for (var i = 0; i < typedArrayByteLength; i++) { + words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); + } + + // Initialize this word array + superInit.call(this, words, typedArrayByteLength); + } else { + // Else call normal init + superInit.apply(this, arguments); + } + }; + + subInit.prototype = WordArray; + }()); + + + return CryptoJS.lib.WordArray; + +})); +},{"./core":473}],481:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Constants table + var T = []; + + // Compute constants + (function () { + for (var i = 0; i < 64; i++) { + T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; + } + }()); + + /** + * MD5 hash algorithm. + */ + var MD5 = C_algo.MD5 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init([ + 0x67452301, 0xefcdab89, + 0x98badcfe, 0x10325476 + ]); + }, + + _doProcessBlock: function (M, offset) { + // Swap endian + for (var i = 0; i < 16; i++) { + // Shortcuts + var offset_i = offset + i; + var M_offset_i = M[offset_i]; + + M[offset_i] = ( + (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | + (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) + ); + } + + // Shortcuts + var H = this._hash.words; + + var M_offset_0 = M[offset + 0]; + var M_offset_1 = M[offset + 1]; + var M_offset_2 = M[offset + 2]; + var M_offset_3 = M[offset + 3]; + var M_offset_4 = M[offset + 4]; + var M_offset_5 = M[offset + 5]; + var M_offset_6 = M[offset + 6]; + var M_offset_7 = M[offset + 7]; + var M_offset_8 = M[offset + 8]; + var M_offset_9 = M[offset + 9]; + var M_offset_10 = M[offset + 10]; + var M_offset_11 = M[offset + 11]; + var M_offset_12 = M[offset + 12]; + var M_offset_13 = M[offset + 13]; + var M_offset_14 = M[offset + 14]; + var M_offset_15 = M[offset + 15]; + + // Working varialbes + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + + // Computation + a = FF(a, b, c, d, M_offset_0, 7, T[0]); + d = FF(d, a, b, c, M_offset_1, 12, T[1]); + c = FF(c, d, a, b, M_offset_2, 17, T[2]); + b = FF(b, c, d, a, M_offset_3, 22, T[3]); + a = FF(a, b, c, d, M_offset_4, 7, T[4]); + d = FF(d, a, b, c, M_offset_5, 12, T[5]); + c = FF(c, d, a, b, M_offset_6, 17, T[6]); + b = FF(b, c, d, a, M_offset_7, 22, T[7]); + a = FF(a, b, c, d, M_offset_8, 7, T[8]); + d = FF(d, a, b, c, M_offset_9, 12, T[9]); + c = FF(c, d, a, b, M_offset_10, 17, T[10]); + b = FF(b, c, d, a, M_offset_11, 22, T[11]); + a = FF(a, b, c, d, M_offset_12, 7, T[12]); + d = FF(d, a, b, c, M_offset_13, 12, T[13]); + c = FF(c, d, a, b, M_offset_14, 17, T[14]); + b = FF(b, c, d, a, M_offset_15, 22, T[15]); + + a = GG(a, b, c, d, M_offset_1, 5, T[16]); + d = GG(d, a, b, c, M_offset_6, 9, T[17]); + c = GG(c, d, a, b, M_offset_11, 14, T[18]); + b = GG(b, c, d, a, M_offset_0, 20, T[19]); + a = GG(a, b, c, d, M_offset_5, 5, T[20]); + d = GG(d, a, b, c, M_offset_10, 9, T[21]); + c = GG(c, d, a, b, M_offset_15, 14, T[22]); + b = GG(b, c, d, a, M_offset_4, 20, T[23]); + a = GG(a, b, c, d, M_offset_9, 5, T[24]); + d = GG(d, a, b, c, M_offset_14, 9, T[25]); + c = GG(c, d, a, b, M_offset_3, 14, T[26]); + b = GG(b, c, d, a, M_offset_8, 20, T[27]); + a = GG(a, b, c, d, M_offset_13, 5, T[28]); + d = GG(d, a, b, c, M_offset_2, 9, T[29]); + c = GG(c, d, a, b, M_offset_7, 14, T[30]); + b = GG(b, c, d, a, M_offset_12, 20, T[31]); + + a = HH(a, b, c, d, M_offset_5, 4, T[32]); + d = HH(d, a, b, c, M_offset_8, 11, T[33]); + c = HH(c, d, a, b, M_offset_11, 16, T[34]); + b = HH(b, c, d, a, M_offset_14, 23, T[35]); + a = HH(a, b, c, d, M_offset_1, 4, T[36]); + d = HH(d, a, b, c, M_offset_4, 11, T[37]); + c = HH(c, d, a, b, M_offset_7, 16, T[38]); + b = HH(b, c, d, a, M_offset_10, 23, T[39]); + a = HH(a, b, c, d, M_offset_13, 4, T[40]); + d = HH(d, a, b, c, M_offset_0, 11, T[41]); + c = HH(c, d, a, b, M_offset_3, 16, T[42]); + b = HH(b, c, d, a, M_offset_6, 23, T[43]); + a = HH(a, b, c, d, M_offset_9, 4, T[44]); + d = HH(d, a, b, c, M_offset_12, 11, T[45]); + c = HH(c, d, a, b, M_offset_15, 16, T[46]); + b = HH(b, c, d, a, M_offset_2, 23, T[47]); + + a = II(a, b, c, d, M_offset_0, 6, T[48]); + d = II(d, a, b, c, M_offset_7, 10, T[49]); + c = II(c, d, a, b, M_offset_14, 15, T[50]); + b = II(b, c, d, a, M_offset_5, 21, T[51]); + a = II(a, b, c, d, M_offset_12, 6, T[52]); + d = II(d, a, b, c, M_offset_3, 10, T[53]); + c = II(c, d, a, b, M_offset_10, 15, T[54]); + b = II(b, c, d, a, M_offset_1, 21, T[55]); + a = II(a, b, c, d, M_offset_8, 6, T[56]); + d = II(d, a, b, c, M_offset_15, 10, T[57]); + c = II(c, d, a, b, M_offset_6, 15, T[58]); + b = II(b, c, d, a, M_offset_13, 21, T[59]); + a = II(a, b, c, d, M_offset_4, 6, T[60]); + d = II(d, a, b, c, M_offset_11, 10, T[61]); + c = II(c, d, a, b, M_offset_2, 15, T[62]); + b = II(b, c, d, a, M_offset_9, 21, T[63]); + + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + + var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); + var nBitsTotalL = nBitsTotal; + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( + (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | + (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) + ); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( + (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | + (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) + ); + + data.sigBytes = (dataWords.length + 1) * 4; + + // Hash final blocks + this._process(); + + // Shortcuts + var hash = this._hash; + var H = hash.words; + + // Swap endian + for (var i = 0; i < 4; i++) { + // Shortcut + var H_i = H[i]; + + H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | + (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); + } + + // Return final computed hash + return hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + function FF(a, b, c, d, x, s, t) { + var n = a + ((b & c) | (~b & d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function GG(a, b, c, d, x, s, t) { + var n = a + ((b & d) | (c & ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function HH(a, b, c, d, x, s, t) { + var n = a + (b ^ c ^ d) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + function II(a, b, c, d, x, s, t) { + var n = a + (c ^ (b | ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.MD5('message'); + * var hash = CryptoJS.MD5(wordArray); + */ + C.MD5 = Hasher._createHelper(MD5); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacMD5(message, key); + */ + C.HmacMD5 = Hasher._createHmacHelper(MD5); + }(Math)); + + + return CryptoJS.MD5; + +})); +},{"./core":473}],482:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./cipher-core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./cipher-core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + /** + * Cipher Feedback block mode. + */ + CryptoJS.mode.CFB = (function () { + var CFB = CryptoJS.lib.BlockCipherMode.extend(); + + CFB.Encryptor = CFB.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); + + // Remember this block to use with next block + this._prevBlock = words.slice(offset, offset + blockSize); + } + }); + + CFB.Decryptor = CFB.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; + + // Remember this block to use with next block + var thisBlock = words.slice(offset, offset + blockSize); + + generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); + + // This block becomes the previous block + this._prevBlock = thisBlock; + } + }); + + function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { + // Shortcut + var iv = this._iv; + + // Generate keystream + if (iv) { + var keystream = iv.slice(0); + + // Remove IV for subsequent blocks + this._iv = undefined; + } else { + var keystream = this._prevBlock; + } + cipher.encryptBlock(keystream, 0); + + // Encrypt + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= keystream[i]; + } + } + + return CFB; + }()); + + + return CryptoJS.mode.CFB; + +})); +},{"./cipher-core":472,"./core":473}],483:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./cipher-core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./cipher-core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + /** @preserve + * Counter block mode compatible with Dr Brian Gladman fileenc.c + * derived from CryptoJS.mode.CTR + * Jan Hruby jhruby.web@gmail.com + */ + CryptoJS.mode.CTRGladman = (function () { + var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); + + function incWord(word) + { + if (((word >> 24) & 0xff) === 0xff) { //overflow + var b1 = (word >> 16)&0xff; + var b2 = (word >> 8)&0xff; + var b3 = word & 0xff; + + if (b1 === 0xff) // overflow b1 + { + b1 = 0; + if (b2 === 0xff) + { + b2 = 0; + if (b3 === 0xff) + { + b3 = 0; + } + else + { + ++b3; + } + } + else + { + ++b2; + } + } + else + { + ++b1; + } + + word = 0; + word += (b1 << 16); + word += (b2 << 8); + word += b3; + } + else + { + word += (0x01 << 24); + } + return word; + } + + function incCounter(counter) + { + if ((counter[0] = incWord(counter[0])) === 0) + { + // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 + counter[1] = incWord(counter[1]); + } + return counter; + } + + var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher + var blockSize = cipher.blockSize; + var iv = this._iv; + var counter = this._counter; + + // Generate keystream + if (iv) { + counter = this._counter = iv.slice(0); + + // Remove IV for subsequent blocks + this._iv = undefined; + } + + incCounter(counter); + + var keystream = counter.slice(0); + cipher.encryptBlock(keystream, 0); + + // Encrypt + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= keystream[i]; + } + } + }); + + CTRGladman.Decryptor = Encryptor; + + return CTRGladman; + }()); + + + + + return CryptoJS.mode.CTRGladman; + +})); +},{"./cipher-core":472,"./core":473}],484:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./cipher-core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./cipher-core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + /** + * Counter block mode. + */ + CryptoJS.mode.CTR = (function () { + var CTR = CryptoJS.lib.BlockCipherMode.extend(); + + var Encryptor = CTR.Encryptor = CTR.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher + var blockSize = cipher.blockSize; + var iv = this._iv; + var counter = this._counter; + + // Generate keystream + if (iv) { + counter = this._counter = iv.slice(0); + + // Remove IV for subsequent blocks + this._iv = undefined; + } + var keystream = counter.slice(0); + cipher.encryptBlock(keystream, 0); + + // Increment counter + counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 + + // Encrypt + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= keystream[i]; + } + } + }); + + CTR.Decryptor = Encryptor; + + return CTR; + }()); + + + return CryptoJS.mode.CTR; + +})); +},{"./cipher-core":472,"./core":473}],485:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./cipher-core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./cipher-core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + /** + * Electronic Codebook block mode. + */ + CryptoJS.mode.ECB = (function () { + var ECB = CryptoJS.lib.BlockCipherMode.extend(); + + ECB.Encryptor = ECB.extend({ + processBlock: function (words, offset) { + this._cipher.encryptBlock(words, offset); + } + }); + + ECB.Decryptor = ECB.extend({ + processBlock: function (words, offset) { + this._cipher.decryptBlock(words, offset); + } + }); + + return ECB; + }()); + + + return CryptoJS.mode.ECB; + +})); +},{"./cipher-core":472,"./core":473}],486:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./cipher-core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./cipher-core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + /** + * Output Feedback block mode. + */ + CryptoJS.mode.OFB = (function () { + var OFB = CryptoJS.lib.BlockCipherMode.extend(); + + var Encryptor = OFB.Encryptor = OFB.extend({ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher + var blockSize = cipher.blockSize; + var iv = this._iv; + var keystream = this._keystream; + + // Generate keystream + if (iv) { + keystream = this._keystream = iv.slice(0); + + // Remove IV for subsequent blocks + this._iv = undefined; + } + cipher.encryptBlock(keystream, 0); + + // Encrypt + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= keystream[i]; + } + } + }); + + OFB.Decryptor = Encryptor; + + return OFB; + }()); + + + return CryptoJS.mode.OFB; + +})); +},{"./cipher-core":472,"./core":473}],487:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./cipher-core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./cipher-core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + /** + * ANSI X.923 padding strategy. + */ + CryptoJS.pad.AnsiX923 = { + pad: function (data, blockSize) { + // Shortcuts + var dataSigBytes = data.sigBytes; + var blockSizeBytes = blockSize * 4; + + // Count padding bytes + var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; + + // Compute last byte position + var lastBytePos = dataSigBytes + nPaddingBytes - 1; + + // Pad + data.clamp(); + data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); + data.sigBytes += nPaddingBytes; + }, + + unpad: function (data) { + // Get number of padding bytes from last byte + var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; + + // Remove padding + data.sigBytes -= nPaddingBytes; + } + }; + + + return CryptoJS.pad.Ansix923; + +})); +},{"./cipher-core":472,"./core":473}],488:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./cipher-core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./cipher-core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + /** + * ISO 10126 padding strategy. + */ + CryptoJS.pad.Iso10126 = { + pad: function (data, blockSize) { + // Shortcut + var blockSizeBytes = blockSize * 4; + + // Count padding bytes + var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; + + // Pad + data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). + concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); + }, + + unpad: function (data) { + // Get number of padding bytes from last byte + var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; + + // Remove padding + data.sigBytes -= nPaddingBytes; + } + }; + + + return CryptoJS.pad.Iso10126; + +})); +},{"./cipher-core":472,"./core":473}],489:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./cipher-core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./cipher-core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + /** + * ISO/IEC 9797-1 Padding Method 2. + */ + CryptoJS.pad.Iso97971 = { + pad: function (data, blockSize) { + // Add 0x80 byte + data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); + + // Zero pad the rest + CryptoJS.pad.ZeroPadding.pad(data, blockSize); + }, + + unpad: function (data) { + // Remove zero padding + CryptoJS.pad.ZeroPadding.unpad(data); + + // Remove one more byte -- the 0x80 byte + data.sigBytes--; + } + }; + + + return CryptoJS.pad.Iso97971; + +})); +},{"./cipher-core":472,"./core":473}],490:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./cipher-core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./cipher-core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + /** + * A noop padding strategy. + */ + CryptoJS.pad.NoPadding = { + pad: function () { + }, + + unpad: function () { + } + }; + + + return CryptoJS.pad.NoPadding; + +})); +},{"./cipher-core":472,"./core":473}],491:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./cipher-core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./cipher-core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + /** + * Zero padding strategy. + */ + CryptoJS.pad.ZeroPadding = { + pad: function (data, blockSize) { + // Shortcut + var blockSizeBytes = blockSize * 4; + + // Pad + data.clamp(); + data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); + }, + + unpad: function (data) { + // Shortcut + var dataWords = data.words; + + // Unpad + var i = data.sigBytes - 1; + while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { + i--; + } + data.sigBytes = i + 1; + } + }; + + + return CryptoJS.pad.ZeroPadding; + +})); +},{"./cipher-core":472,"./core":473}],492:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./sha1", "./hmac"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var WordArray = C_lib.WordArray; + var C_algo = C.algo; + var SHA1 = C_algo.SHA1; + var HMAC = C_algo.HMAC; + + /** + * Password-Based Key Derivation Function 2 algorithm. + */ + var PBKDF2 = C_algo.PBKDF2 = Base.extend({ + /** + * Configuration options. + * + * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) + * @property {Hasher} hasher The hasher to use. Default: SHA1 + * @property {number} iterations The number of iterations to perform. Default: 1 + */ + cfg: Base.extend({ + keySize: 128/32, + hasher: SHA1, + iterations: 1 + }), + + /** + * Initializes a newly created key derivation function. + * + * @param {Object} cfg (Optional) The configuration options to use for the derivation. + * + * @example + * + * var kdf = CryptoJS.algo.PBKDF2.create(); + * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); + * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); + */ + init: function (cfg) { + this.cfg = this.cfg.extend(cfg); + }, + + /** + * Computes the Password-Based Key Derivation Function 2. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * + * @return {WordArray} The derived key. + * + * @example + * + * var key = kdf.compute(password, salt); + */ + compute: function (password, salt) { + // Shortcut + var cfg = this.cfg; + + // Init HMAC + var hmac = HMAC.create(cfg.hasher, password); + + // Initial values + var derivedKey = WordArray.create(); + var blockIndex = WordArray.create([0x00000001]); + + // Shortcuts + var derivedKeyWords = derivedKey.words; + var blockIndexWords = blockIndex.words; + var keySize = cfg.keySize; + var iterations = cfg.iterations; + + // Generate key + while (derivedKeyWords.length < keySize) { + var block = hmac.update(salt).finalize(blockIndex); + hmac.reset(); + + // Shortcuts + var blockWords = block.words; + var blockWordsLength = blockWords.length; + + // Iterations + var intermediate = block; + for (var i = 1; i < iterations; i++) { + intermediate = hmac.finalize(intermediate); + hmac.reset(); + + // Shortcut + var intermediateWords = intermediate.words; + + // XOR intermediate with block + for (var j = 0; j < blockWordsLength; j++) { + blockWords[j] ^= intermediateWords[j]; + } + } + + derivedKey.concat(block); + blockIndexWords[0]++; + } + derivedKey.sigBytes = keySize * 4; + + return derivedKey; + } + }); + + /** + * Computes the Password-Based Key Derivation Function 2. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * @param {Object} cfg (Optional) The configuration options to use for this computation. + * + * @return {WordArray} The derived key. + * + * @static + * + * @example + * + * var key = CryptoJS.PBKDF2(password, salt); + * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); + * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); + */ + C.PBKDF2 = function (password, salt, cfg) { + return PBKDF2.create(cfg).compute(password, salt); + }; + }()); + + + return CryptoJS.PBKDF2; + +})); +},{"./core":473,"./hmac":478,"./sha1":497}],493:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var StreamCipher = C_lib.StreamCipher; + var C_algo = C.algo; + + // Reusable objects + var S = []; + var C_ = []; + var G = []; + + /** + * Rabbit stream cipher algorithm. + * + * This is a legacy version that neglected to convert the key to little-endian. + * This error doesn't affect the cipher's security, + * but it does affect its compatibility with other implementations. + */ + var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ + _doReset: function () { + // Shortcuts + var K = this._key.words; + var iv = this.cfg.iv; + + // Generate initial state values + var X = this._X = [ + K[0], (K[3] << 16) | (K[2] >>> 16), + K[1], (K[0] << 16) | (K[3] >>> 16), + K[2], (K[1] << 16) | (K[0] >>> 16), + K[3], (K[2] << 16) | (K[1] >>> 16) + ]; + + // Generate initial counter values + var C = this._C = [ + (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), + (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), + (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), + (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) + ]; + + // Carry bit + this._b = 0; + + // Iterate the system four times + for (var i = 0; i < 4; i++) { + nextState.call(this); + } + + // Modify the counters + for (var i = 0; i < 8; i++) { + C[i] ^= X[(i + 4) & 7]; + } + + // IV setup + if (iv) { + // Shortcuts + var IV = iv.words; + var IV_0 = IV[0]; + var IV_1 = IV[1]; + + // Generate four subvectors + var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); + var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); + var i1 = (i0 >>> 16) | (i2 & 0xffff0000); + var i3 = (i2 << 16) | (i0 & 0x0000ffff); + + // Modify counter values + C[0] ^= i0; + C[1] ^= i1; + C[2] ^= i2; + C[3] ^= i3; + C[4] ^= i0; + C[5] ^= i1; + C[6] ^= i2; + C[7] ^= i3; + + // Iterate the system four times + for (var i = 0; i < 4; i++) { + nextState.call(this); + } + } + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var X = this._X; + + // Iterate the system + nextState.call(this); + + // Generate four keystream words + S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); + S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); + S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); + S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); + + for (var i = 0; i < 4; i++) { + // Swap endian + S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | + (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); + + // Encrypt + M[offset + i] ^= S[i]; + } + }, + + blockSize: 128/32, + + ivSize: 64/32 + }); + + function nextState() { + // Shortcuts + var X = this._X; + var C = this._C; + + // Save old counter values + for (var i = 0; i < 8; i++) { + C_[i] = C[i]; + } + + // Calculate new counter values + C[0] = (C[0] + 0x4d34d34d + this._b) | 0; + C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; + C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; + C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; + C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; + C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; + C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; + C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; + this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; + + // Calculate the g-values + for (var i = 0; i < 8; i++) { + var gx = X[i] + C[i]; + + // Construct high and low argument for squaring + var ga = gx & 0xffff; + var gb = gx >>> 16; + + // Calculate high and low result of squaring + var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; + var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); + + // High XOR low + G[i] = gh ^ gl; + } + + // Calculate new state values + X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; + X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; + X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; + X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; + X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; + X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; + X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; + X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; + } + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); + * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); + */ + C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); + }()); + + + return CryptoJS.RabbitLegacy; + +})); +},{"./cipher-core":472,"./core":473,"./enc-base64":474,"./evpkdf":476,"./md5":481}],494:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var StreamCipher = C_lib.StreamCipher; + var C_algo = C.algo; + + // Reusable objects + var S = []; + var C_ = []; + var G = []; + + /** + * Rabbit stream cipher algorithm + */ + var Rabbit = C_algo.Rabbit = StreamCipher.extend({ + _doReset: function () { + // Shortcuts + var K = this._key.words; + var iv = this.cfg.iv; + + // Swap endian + for (var i = 0; i < 4; i++) { + K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | + (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); + } + + // Generate initial state values + var X = this._X = [ + K[0], (K[3] << 16) | (K[2] >>> 16), + K[1], (K[0] << 16) | (K[3] >>> 16), + K[2], (K[1] << 16) | (K[0] >>> 16), + K[3], (K[2] << 16) | (K[1] >>> 16) + ]; + + // Generate initial counter values + var C = this._C = [ + (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), + (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), + (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), + (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) + ]; + + // Carry bit + this._b = 0; + + // Iterate the system four times + for (var i = 0; i < 4; i++) { + nextState.call(this); + } + + // Modify the counters + for (var i = 0; i < 8; i++) { + C[i] ^= X[(i + 4) & 7]; + } + + // IV setup + if (iv) { + // Shortcuts + var IV = iv.words; + var IV_0 = IV[0]; + var IV_1 = IV[1]; + + // Generate four subvectors + var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); + var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); + var i1 = (i0 >>> 16) | (i2 & 0xffff0000); + var i3 = (i2 << 16) | (i0 & 0x0000ffff); + + // Modify counter values + C[0] ^= i0; + C[1] ^= i1; + C[2] ^= i2; + C[3] ^= i3; + C[4] ^= i0; + C[5] ^= i1; + C[6] ^= i2; + C[7] ^= i3; + + // Iterate the system four times + for (var i = 0; i < 4; i++) { + nextState.call(this); + } + } + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var X = this._X; + + // Iterate the system + nextState.call(this); + + // Generate four keystream words + S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); + S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); + S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); + S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); + + for (var i = 0; i < 4; i++) { + // Swap endian + S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | + (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); + + // Encrypt + M[offset + i] ^= S[i]; + } + }, + + blockSize: 128/32, + + ivSize: 64/32 + }); + + function nextState() { + // Shortcuts + var X = this._X; + var C = this._C; + + // Save old counter values + for (var i = 0; i < 8; i++) { + C_[i] = C[i]; + } + + // Calculate new counter values + C[0] = (C[0] + 0x4d34d34d + this._b) | 0; + C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; + C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; + C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; + C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; + C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; + C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; + C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; + this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; + + // Calculate the g-values + for (var i = 0; i < 8; i++) { + var gx = X[i] + C[i]; + + // Construct high and low argument for squaring + var ga = gx & 0xffff; + var gb = gx >>> 16; + + // Calculate high and low result of squaring + var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; + var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); + + // High XOR low + G[i] = gh ^ gl; + } + + // Calculate new state values + X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; + X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; + X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; + X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; + X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; + X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; + X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; + X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; + } + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); + * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); + */ + C.Rabbit = StreamCipher._createHelper(Rabbit); + }()); + + + return CryptoJS.Rabbit; + +})); +},{"./cipher-core":472,"./core":473,"./enc-base64":474,"./evpkdf":476,"./md5":481}],495:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var StreamCipher = C_lib.StreamCipher; + var C_algo = C.algo; + + /** + * RC4 stream cipher algorithm. + */ + var RC4 = C_algo.RC4 = StreamCipher.extend({ + _doReset: function () { + // Shortcuts + var key = this._key; + var keyWords = key.words; + var keySigBytes = key.sigBytes; + + // Init sbox + var S = this._S = []; + for (var i = 0; i < 256; i++) { + S[i] = i; + } + + // Key setup + for (var i = 0, j = 0; i < 256; i++) { + var keyByteIndex = i % keySigBytes; + var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; + + j = (j + S[i] + keyByte) % 256; + + // Swap + var t = S[i]; + S[i] = S[j]; + S[j] = t; + } + + // Counters + this._i = this._j = 0; + }, + + _doProcessBlock: function (M, offset) { + M[offset] ^= generateKeystreamWord.call(this); + }, + + keySize: 256/32, + + ivSize: 0 + }); + + function generateKeystreamWord() { + // Shortcuts + var S = this._S; + var i = this._i; + var j = this._j; + + // Generate keystream word + var keystreamWord = 0; + for (var n = 0; n < 4; n++) { + i = (i + 1) % 256; + j = (j + S[i]) % 256; + + // Swap + var t = S[i]; + S[i] = S[j]; + S[j] = t; + + keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); + } + + // Update counters + this._i = i; + this._j = j; + + return keystreamWord; + } + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); + * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); + */ + C.RC4 = StreamCipher._createHelper(RC4); + + /** + * Modified RC4 stream cipher algorithm. + */ + var RC4Drop = C_algo.RC4Drop = RC4.extend({ + /** + * Configuration options. + * + * @property {number} drop The number of keystream words to drop. Default 192 + */ + cfg: RC4.cfg.extend({ + drop: 192 + }), + + _doReset: function () { + RC4._doReset.call(this); + + // Drop + for (var i = this.cfg.drop; i > 0; i--) { + generateKeystreamWord.call(this); + } + } + }); + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); + * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); + */ + C.RC4Drop = StreamCipher._createHelper(RC4Drop); + }()); + + + return CryptoJS.RC4; + +})); +},{"./cipher-core":472,"./core":473,"./enc-base64":474,"./evpkdf":476,"./md5":481}],496:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + /** @preserve + (c) 2012 by Cédric Mesnil. All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Constants table + var _zl = WordArray.create([ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, + 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, + 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, + 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]); + var _zr = WordArray.create([ + 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, + 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, + 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, + 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, + 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]); + var _sl = WordArray.create([ + 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, + 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, + 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, + 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, + 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]); + var _sr = WordArray.create([ + 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, + 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, + 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, + 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, + 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]); + + var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); + var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); + + /** + * RIPEMD160 hash algorithm. + */ + var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ + _doReset: function () { + this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); + }, + + _doProcessBlock: function (M, offset) { + + // Swap endian + for (var i = 0; i < 16; i++) { + // Shortcuts + var offset_i = offset + i; + var M_offset_i = M[offset_i]; + + // Swap + M[offset_i] = ( + (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | + (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) + ); + } + // Shortcut + var H = this._hash.words; + var hl = _hl.words; + var hr = _hr.words; + var zl = _zl.words; + var zr = _zr.words; + var sl = _sl.words; + var sr = _sr.words; + + // Working variables + var al, bl, cl, dl, el; + var ar, br, cr, dr, er; + + ar = al = H[0]; + br = bl = H[1]; + cr = cl = H[2]; + dr = dl = H[3]; + er = el = H[4]; + // Computation + var t; + for (var i = 0; i < 80; i += 1) { + t = (al + M[offset+zl[i]])|0; + if (i<16){ + t += f1(bl,cl,dl) + hl[0]; + } else if (i<32) { + t += f2(bl,cl,dl) + hl[1]; + } else if (i<48) { + t += f3(bl,cl,dl) + hl[2]; + } else if (i<64) { + t += f4(bl,cl,dl) + hl[3]; + } else {// if (i<80) { + t += f5(bl,cl,dl) + hl[4]; + } + t = t|0; + t = rotl(t,sl[i]); + t = (t+el)|0; + al = el; + el = dl; + dl = rotl(cl, 10); + cl = bl; + bl = t; + + t = (ar + M[offset+zr[i]])|0; + if (i<16){ + t += f5(br,cr,dr) + hr[0]; + } else if (i<32) { + t += f4(br,cr,dr) + hr[1]; + } else if (i<48) { + t += f3(br,cr,dr) + hr[2]; + } else if (i<64) { + t += f2(br,cr,dr) + hr[3]; + } else {// if (i<80) { + t += f1(br,cr,dr) + hr[4]; + } + t = t|0; + t = rotl(t,sr[i]) ; + t = (t+er)|0; + ar = er; + er = dr; + dr = rotl(cr, 10); + cr = br; + br = t; + } + // Intermediate hash value + t = (H[1] + cl + dr)|0; + H[1] = (H[2] + dl + er)|0; + H[2] = (H[3] + el + ar)|0; + H[3] = (H[4] + al + br)|0; + H[4] = (H[0] + bl + cr)|0; + H[0] = t; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( + (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | + (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) + ); + data.sigBytes = (dataWords.length + 1) * 4; + + // Hash final blocks + this._process(); + + // Shortcuts + var hash = this._hash; + var H = hash.words; + + // Swap endian + for (var i = 0; i < 5; i++) { + // Shortcut + var H_i = H[i]; + + // Swap + H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | + (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); + } + + // Return final computed hash + return hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + + function f1(x, y, z) { + return ((x) ^ (y) ^ (z)); + + } + + function f2(x, y, z) { + return (((x)&(y)) | ((~x)&(z))); + } + + function f3(x, y, z) { + return (((x) | (~(y))) ^ (z)); + } + + function f4(x, y, z) { + return (((x) & (z)) | ((y)&(~(z)))); + } + + function f5(x, y, z) { + return ((x) ^ ((y) |(~(z)))); + + } + + function rotl(x,n) { + return (x<>>(32-n)); + } + + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.RIPEMD160('message'); + * var hash = CryptoJS.RIPEMD160(wordArray); + */ + C.RIPEMD160 = Hasher._createHelper(RIPEMD160); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacRIPEMD160(message, key); + */ + C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); + }(Math)); + + + return CryptoJS.RIPEMD160; + +})); +},{"./core":473}],497:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Reusable object + var W = []; + + /** + * SHA-1 hash algorithm. + */ + var SHA1 = C_algo.SHA1 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init([ + 0x67452301, 0xefcdab89, + 0x98badcfe, 0x10325476, + 0xc3d2e1f0 + ]); + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var H = this._hash.words; + + // Working variables + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + var e = H[4]; + + // Computation + for (var i = 0; i < 80; i++) { + if (i < 16) { + W[i] = M[offset + i] | 0; + } else { + var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; + W[i] = (n << 1) | (n >>> 31); + } + + var t = ((a << 5) | (a >>> 27)) + e + W[i]; + if (i < 20) { + t += ((b & c) | (~b & d)) + 0x5a827999; + } else if (i < 40) { + t += (b ^ c ^ d) + 0x6ed9eba1; + } else if (i < 60) { + t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; + } else /* if (i < 80) */ { + t += (b ^ c ^ d) - 0x359d3e2a; + } + + e = d; + d = c; + c = (b << 30) | (b >>> 2); + b = a; + a = t; + } + + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + H[4] = (H[4] + e) | 0; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Return final computed hash + return this._hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA1('message'); + * var hash = CryptoJS.SHA1(wordArray); + */ + C.SHA1 = Hasher._createHelper(SHA1); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA1(message, key); + */ + C.HmacSHA1 = Hasher._createHmacHelper(SHA1); + }()); + + + return CryptoJS.SHA1; + +})); +},{"./core":473}],498:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./sha256")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./sha256"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var C_algo = C.algo; + var SHA256 = C_algo.SHA256; + + /** + * SHA-224 hash algorithm. + */ + var SHA224 = C_algo.SHA224 = SHA256.extend({ + _doReset: function () { + this._hash = new WordArray.init([ + 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, + 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 + ]); + }, + + _doFinalize: function () { + var hash = SHA256._doFinalize.call(this); + + hash.sigBytes -= 4; + + return hash; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA224('message'); + * var hash = CryptoJS.SHA224(wordArray); + */ + C.SHA224 = SHA256._createHelper(SHA224); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA224(message, key); + */ + C.HmacSHA224 = SHA256._createHmacHelper(SHA224); + }()); + + + return CryptoJS.SHA224; + +})); +},{"./core":473,"./sha256":499}],499:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; + + // Initialization and round constants tables + var H = []; + var K = []; + + // Compute constants + (function () { + function isPrime(n) { + var sqrtN = Math.sqrt(n); + for (var factor = 2; factor <= sqrtN; factor++) { + if (!(n % factor)) { + return false; + } + } + + return true; + } + + function getFractionalBits(n) { + return ((n - (n | 0)) * 0x100000000) | 0; + } + + var n = 2; + var nPrime = 0; + while (nPrime < 64) { + if (isPrime(n)) { + if (nPrime < 8) { + H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); + } + K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); + + nPrime++; + } + + n++; + } + }()); + + // Reusable object + var W = []; + + /** + * SHA-256 hash algorithm. + */ + var SHA256 = C_algo.SHA256 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init(H.slice(0)); + }, + + _doProcessBlock: function (M, offset) { + // Shortcut + var H = this._hash.words; + + // Working variables + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + var e = H[4]; + var f = H[5]; + var g = H[6]; + var h = H[7]; + + // Computation + for (var i = 0; i < 64; i++) { + if (i < 16) { + W[i] = M[offset + i] | 0; + } else { + var gamma0x = W[i - 15]; + var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ + ((gamma0x << 14) | (gamma0x >>> 18)) ^ + (gamma0x >>> 3); + + var gamma1x = W[i - 2]; + var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ + ((gamma1x << 13) | (gamma1x >>> 19)) ^ + (gamma1x >>> 10); + + W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; + } + + var ch = (e & f) ^ (~e & g); + var maj = (a & b) ^ (a & c) ^ (b & c); + + var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); + var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); + + var t1 = h + sigma1 + ch + K[i] + W[i]; + var t2 = sigma0 + maj; + + h = g; + g = f; + f = e; + e = (d + t1) | 0; + d = c; + c = b; + b = a; + a = (t1 + t2) | 0; + } + + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + H[4] = (H[4] + e) | 0; + H[5] = (H[5] + f) | 0; + H[6] = (H[6] + g) | 0; + H[7] = (H[7] + h) | 0; + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Return final computed hash + return this._hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA256('message'); + * var hash = CryptoJS.SHA256(wordArray); + */ + C.SHA256 = Hasher._createHelper(SHA256); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA256(message, key); + */ + C.HmacSHA256 = Hasher._createHmacHelper(SHA256); + }(Math)); + + + return CryptoJS.SHA256; + +})); +},{"./core":473}],500:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./x64-core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./x64-core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_x64 = C.x64; + var X64Word = C_x64.Word; + var C_algo = C.algo; + + // Constants tables + var RHO_OFFSETS = []; + var PI_INDEXES = []; + var ROUND_CONSTANTS = []; + + // Compute Constants + (function () { + // Compute rho offset constants + var x = 1, y = 0; + for (var t = 0; t < 24; t++) { + RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; + + var newX = y % 5; + var newY = (2 * x + 3 * y) % 5; + x = newX; + y = newY; + } + + // Compute pi index constants + for (var x = 0; x < 5; x++) { + for (var y = 0; y < 5; y++) { + PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; + } + } + + // Compute round constants + var LFSR = 0x01; + for (var i = 0; i < 24; i++) { + var roundConstantMsw = 0; + var roundConstantLsw = 0; + + for (var j = 0; j < 7; j++) { + if (LFSR & 0x01) { + var bitPosition = (1 << j) - 1; + if (bitPosition < 32) { + roundConstantLsw ^= 1 << bitPosition; + } else /* if (bitPosition >= 32) */ { + roundConstantMsw ^= 1 << (bitPosition - 32); + } + } + + // Compute next LFSR + if (LFSR & 0x80) { + // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 + LFSR = (LFSR << 1) ^ 0x71; + } else { + LFSR <<= 1; + } + } + + ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); + } + }()); + + // Reusable objects for temporary values + var T = []; + (function () { + for (var i = 0; i < 25; i++) { + T[i] = X64Word.create(); + } + }()); + + /** + * SHA-3 hash algorithm. + */ + var SHA3 = C_algo.SHA3 = Hasher.extend({ + /** + * Configuration options. + * + * @property {number} outputLength + * The desired number of bits in the output hash. + * Only values permitted are: 224, 256, 384, 512. + * Default: 512 + */ + cfg: Hasher.cfg.extend({ + outputLength: 512 + }), + + _doReset: function () { + var state = this._state = [] + for (var i = 0; i < 25; i++) { + state[i] = new X64Word.init(); + } + + this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; + }, + + _doProcessBlock: function (M, offset) { + // Shortcuts + var state = this._state; + var nBlockSizeLanes = this.blockSize / 2; + + // Absorb + for (var i = 0; i < nBlockSizeLanes; i++) { + // Shortcuts + var M2i = M[offset + 2 * i]; + var M2i1 = M[offset + 2 * i + 1]; + + // Swap endian + M2i = ( + (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | + (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) + ); + M2i1 = ( + (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | + (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) + ); + + // Absorb message into state + var lane = state[i]; + lane.high ^= M2i1; + lane.low ^= M2i; + } + + // Rounds + for (var round = 0; round < 24; round++) { + // Theta + for (var x = 0; x < 5; x++) { + // Mix column lanes + var tMsw = 0, tLsw = 0; + for (var y = 0; y < 5; y++) { + var lane = state[x + 5 * y]; + tMsw ^= lane.high; + tLsw ^= lane.low; + } + + // Temporary values + var Tx = T[x]; + Tx.high = tMsw; + Tx.low = tLsw; + } + for (var x = 0; x < 5; x++) { + // Shortcuts + var Tx4 = T[(x + 4) % 5]; + var Tx1 = T[(x + 1) % 5]; + var Tx1Msw = Tx1.high; + var Tx1Lsw = Tx1.low; + + // Mix surrounding columns + var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); + var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); + for (var y = 0; y < 5; y++) { + var lane = state[x + 5 * y]; + lane.high ^= tMsw; + lane.low ^= tLsw; + } + } + + // Rho Pi + for (var laneIndex = 1; laneIndex < 25; laneIndex++) { + // Shortcuts + var lane = state[laneIndex]; + var laneMsw = lane.high; + var laneLsw = lane.low; + var rhoOffset = RHO_OFFSETS[laneIndex]; + + // Rotate lanes + if (rhoOffset < 32) { + var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); + var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); + } else /* if (rhoOffset >= 32) */ { + var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); + var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); + } + + // Transpose lanes + var TPiLane = T[PI_INDEXES[laneIndex]]; + TPiLane.high = tMsw; + TPiLane.low = tLsw; + } + + // Rho pi at x = y = 0 + var T0 = T[0]; + var state0 = state[0]; + T0.high = state0.high; + T0.low = state0.low; + + // Chi + for (var x = 0; x < 5; x++) { + for (var y = 0; y < 5; y++) { + // Shortcuts + var laneIndex = x + 5 * y; + var lane = state[laneIndex]; + var TLane = T[laneIndex]; + var Tx1Lane = T[((x + 1) % 5) + 5 * y]; + var Tx2Lane = T[((x + 2) % 5) + 5 * y]; + + // Mix rows + lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); + lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); + } + } + + // Iota + var lane = state[0]; + var roundConstant = ROUND_CONSTANTS[round]; + lane.high ^= roundConstant.high; + lane.low ^= roundConstant.low;; + } + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + var blockSizeBits = this.blockSize * 32; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); + dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Shortcuts + var state = this._state; + var outputLengthBytes = this.cfg.outputLength / 8; + var outputLengthLanes = outputLengthBytes / 8; + + // Squeeze + var hashWords = []; + for (var i = 0; i < outputLengthLanes; i++) { + // Shortcuts + var lane = state[i]; + var laneMsw = lane.high; + var laneLsw = lane.low; + + // Swap endian + laneMsw = ( + (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | + (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) + ); + laneLsw = ( + (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | + (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) + ); + + // Squeeze state to retrieve hash + hashWords.push(laneLsw); + hashWords.push(laneMsw); + } + + // Return final computed hash + return new WordArray.init(hashWords, outputLengthBytes); + }, + + clone: function () { + var clone = Hasher.clone.call(this); + + var state = clone._state = this._state.slice(0); + for (var i = 0; i < 25; i++) { + state[i] = state[i].clone(); + } + + return clone; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA3('message'); + * var hash = CryptoJS.SHA3(wordArray); + */ + C.SHA3 = Hasher._createHelper(SHA3); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA3(message, key); + */ + C.HmacSHA3 = Hasher._createHmacHelper(SHA3); + }(Math)); + + + return CryptoJS.SHA3; + +})); +},{"./core":473,"./x64-core":504}],501:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./x64-core", "./sha512"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function () { + // Shortcuts + var C = CryptoJS; + var C_x64 = C.x64; + var X64Word = C_x64.Word; + var X64WordArray = C_x64.WordArray; + var C_algo = C.algo; + var SHA512 = C_algo.SHA512; + + /** + * SHA-384 hash algorithm. + */ + var SHA384 = C_algo.SHA384 = SHA512.extend({ + _doReset: function () { + this._hash = new X64WordArray.init([ + new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), + new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), + new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), + new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) + ]); + }, + + _doFinalize: function () { + var hash = SHA512._doFinalize.call(this); + + hash.sigBytes -= 16; + + return hash; + } + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA384('message'); + * var hash = CryptoJS.SHA384(wordArray); + */ + C.SHA384 = SHA512._createHelper(SHA384); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA384(message, key); + */ + C.HmacSHA384 = SHA512._createHmacHelper(SHA384); + }()); + + + return CryptoJS.SHA384; + +})); +},{"./core":473,"./sha512":502,"./x64-core":504}],502:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./x64-core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./x64-core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Hasher = C_lib.Hasher; + var C_x64 = C.x64; + var X64Word = C_x64.Word; + var X64WordArray = C_x64.WordArray; + var C_algo = C.algo; + + function X64Word_create() { + return X64Word.create.apply(X64Word, arguments); + } + + // Constants + var K = [ + X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), + X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), + X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), + X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), + X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), + X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), + X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), + X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), + X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), + X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), + X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), + X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), + X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), + X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), + X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), + X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), + X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), + X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), + X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), + X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), + X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), + X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), + X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), + X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), + X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), + X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), + X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), + X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), + X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), + X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), + X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), + X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), + X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), + X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), + X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), + X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), + X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), + X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), + X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), + X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) + ]; + + // Reusable objects + var W = []; + (function () { + for (var i = 0; i < 80; i++) { + W[i] = X64Word_create(); + } + }()); + + /** + * SHA-512 hash algorithm. + */ + var SHA512 = C_algo.SHA512 = Hasher.extend({ + _doReset: function () { + this._hash = new X64WordArray.init([ + new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), + new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), + new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), + new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) + ]); + }, + + _doProcessBlock: function (M, offset) { + // Shortcuts + var H = this._hash.words; + + var H0 = H[0]; + var H1 = H[1]; + var H2 = H[2]; + var H3 = H[3]; + var H4 = H[4]; + var H5 = H[5]; + var H6 = H[6]; + var H7 = H[7]; + + var H0h = H0.high; + var H0l = H0.low; + var H1h = H1.high; + var H1l = H1.low; + var H2h = H2.high; + var H2l = H2.low; + var H3h = H3.high; + var H3l = H3.low; + var H4h = H4.high; + var H4l = H4.low; + var H5h = H5.high; + var H5l = H5.low; + var H6h = H6.high; + var H6l = H6.low; + var H7h = H7.high; + var H7l = H7.low; + + // Working variables + var ah = H0h; + var al = H0l; + var bh = H1h; + var bl = H1l; + var ch = H2h; + var cl = H2l; + var dh = H3h; + var dl = H3l; + var eh = H4h; + var el = H4l; + var fh = H5h; + var fl = H5l; + var gh = H6h; + var gl = H6l; + var hh = H7h; + var hl = H7l; + + // Rounds + for (var i = 0; i < 80; i++) { + // Shortcut + var Wi = W[i]; + + // Extend message + if (i < 16) { + var Wih = Wi.high = M[offset + i * 2] | 0; + var Wil = Wi.low = M[offset + i * 2 + 1] | 0; + } else { + // Gamma0 + var gamma0x = W[i - 15]; + var gamma0xh = gamma0x.high; + var gamma0xl = gamma0x.low; + var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7); + var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25)); + + // Gamma1 + var gamma1x = W[i - 2]; + var gamma1xh = gamma1x.high; + var gamma1xl = gamma1x.low; + var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6); + var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26)); + + // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] + var Wi7 = W[i - 7]; + var Wi7h = Wi7.high; + var Wi7l = Wi7.low; + + var Wi16 = W[i - 16]; + var Wi16h = Wi16.high; + var Wi16l = Wi16.low; + + var Wil = gamma0l + Wi7l; + var Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0); + var Wil = Wil + gamma1l; + var Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); + var Wil = Wil + Wi16l; + var Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); + + Wi.high = Wih; + Wi.low = Wil; + } + + var chh = (eh & fh) ^ (~eh & gh); + var chl = (el & fl) ^ (~el & gl); + var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch); + var majl = (al & bl) ^ (al & cl) ^ (bl & cl); + + var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7)); + var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7)); + var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9)); + var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9)); + + // t1 = h + sigma1 + ch + K[i] + W[i] + var Ki = K[i]; + var Kih = Ki.high; + var Kil = Ki.low; + + var t1l = hl + sigma1l; + var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); + var t1l = t1l + chl; + var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); + var t1l = t1l + Kil; + var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); + var t1l = t1l + Wil; + var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); + + // t2 = sigma0 + maj + var t2l = sigma0l + majl; + var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); + + // Update working variables + hh = gh; + hl = gl; + gh = fh; + gl = fl; + fh = eh; + fl = el; + el = (dl + t1l) | 0; + eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0; + dh = ch; + dl = cl; + ch = bh; + cl = bl; + bh = ah; + bl = al; + al = (t1l + t2l) | 0; + ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0; + } + + // Intermediate hash value + H0l = H0.low = (H0l + al); + H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); + H1l = H1.low = (H1l + bl); + H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); + H2l = H2.low = (H2l + cl); + H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); + H3l = H3.low = (H3l + dl); + H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); + H4l = H4.low = (H4l + el); + H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); + H5l = H5.low = (H5l + fl); + H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); + H6l = H6.low = (H6l + gl); + H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); + H7l = H7.low = (H7l + hl); + H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); + }, + + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); + dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; + data.sigBytes = dataWords.length * 4; + + // Hash final blocks + this._process(); + + // Convert hash to 32-bit word array before returning + var hash = this._hash.toX32(); + + // Return final computed hash + return hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + + return clone; + }, + + blockSize: 1024/32 + }); + + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA512('message'); + * var hash = CryptoJS.SHA512(wordArray); + */ + C.SHA512 = Hasher._createHelper(SHA512); + + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA512(message, key); + */ + C.HmacSHA512 = Hasher._createHmacHelper(SHA512); + }()); + + + return CryptoJS.SHA512; + +})); +},{"./core":473,"./x64-core":504}],503:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var BlockCipher = C_lib.BlockCipher; + var C_algo = C.algo; + + // Permuted Choice 1 constants + var PC1 = [ + 57, 49, 41, 33, 25, 17, 9, 1, + 58, 50, 42, 34, 26, 18, 10, 2, + 59, 51, 43, 35, 27, 19, 11, 3, + 60, 52, 44, 36, 63, 55, 47, 39, + 31, 23, 15, 7, 62, 54, 46, 38, + 30, 22, 14, 6, 61, 53, 45, 37, + 29, 21, 13, 5, 28, 20, 12, 4 + ]; + + // Permuted Choice 2 constants + var PC2 = [ + 14, 17, 11, 24, 1, 5, + 3, 28, 15, 6, 21, 10, + 23, 19, 12, 4, 26, 8, + 16, 7, 27, 20, 13, 2, + 41, 52, 31, 37, 47, 55, + 30, 40, 51, 45, 33, 48, + 44, 49, 39, 56, 34, 53, + 46, 42, 50, 36, 29, 32 + ]; + + // Cumulative bit shift constants + var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; + + // SBOXes and round permutation constants + var SBOX_P = [ + { + 0x0: 0x808200, + 0x10000000: 0x8000, + 0x20000000: 0x808002, + 0x30000000: 0x2, + 0x40000000: 0x200, + 0x50000000: 0x808202, + 0x60000000: 0x800202, + 0x70000000: 0x800000, + 0x80000000: 0x202, + 0x90000000: 0x800200, + 0xa0000000: 0x8200, + 0xb0000000: 0x808000, + 0xc0000000: 0x8002, + 0xd0000000: 0x800002, + 0xe0000000: 0x0, + 0xf0000000: 0x8202, + 0x8000000: 0x0, + 0x18000000: 0x808202, + 0x28000000: 0x8202, + 0x38000000: 0x8000, + 0x48000000: 0x808200, + 0x58000000: 0x200, + 0x68000000: 0x808002, + 0x78000000: 0x2, + 0x88000000: 0x800200, + 0x98000000: 0x8200, + 0xa8000000: 0x808000, + 0xb8000000: 0x800202, + 0xc8000000: 0x800002, + 0xd8000000: 0x8002, + 0xe8000000: 0x202, + 0xf8000000: 0x800000, + 0x1: 0x8000, + 0x10000001: 0x2, + 0x20000001: 0x808200, + 0x30000001: 0x800000, + 0x40000001: 0x808002, + 0x50000001: 0x8200, + 0x60000001: 0x200, + 0x70000001: 0x800202, + 0x80000001: 0x808202, + 0x90000001: 0x808000, + 0xa0000001: 0x800002, + 0xb0000001: 0x8202, + 0xc0000001: 0x202, + 0xd0000001: 0x800200, + 0xe0000001: 0x8002, + 0xf0000001: 0x0, + 0x8000001: 0x808202, + 0x18000001: 0x808000, + 0x28000001: 0x800000, + 0x38000001: 0x200, + 0x48000001: 0x8000, + 0x58000001: 0x800002, + 0x68000001: 0x2, + 0x78000001: 0x8202, + 0x88000001: 0x8002, + 0x98000001: 0x800202, + 0xa8000001: 0x202, + 0xb8000001: 0x808200, + 0xc8000001: 0x800200, + 0xd8000001: 0x0, + 0xe8000001: 0x8200, + 0xf8000001: 0x808002 + }, + { + 0x0: 0x40084010, + 0x1000000: 0x4000, + 0x2000000: 0x80000, + 0x3000000: 0x40080010, + 0x4000000: 0x40000010, + 0x5000000: 0x40084000, + 0x6000000: 0x40004000, + 0x7000000: 0x10, + 0x8000000: 0x84000, + 0x9000000: 0x40004010, + 0xa000000: 0x40000000, + 0xb000000: 0x84010, + 0xc000000: 0x80010, + 0xd000000: 0x0, + 0xe000000: 0x4010, + 0xf000000: 0x40080000, + 0x800000: 0x40004000, + 0x1800000: 0x84010, + 0x2800000: 0x10, + 0x3800000: 0x40004010, + 0x4800000: 0x40084010, + 0x5800000: 0x40000000, + 0x6800000: 0x80000, + 0x7800000: 0x40080010, + 0x8800000: 0x80010, + 0x9800000: 0x0, + 0xa800000: 0x4000, + 0xb800000: 0x40080000, + 0xc800000: 0x40000010, + 0xd800000: 0x84000, + 0xe800000: 0x40084000, + 0xf800000: 0x4010, + 0x10000000: 0x0, + 0x11000000: 0x40080010, + 0x12000000: 0x40004010, + 0x13000000: 0x40084000, + 0x14000000: 0x40080000, + 0x15000000: 0x10, + 0x16000000: 0x84010, + 0x17000000: 0x4000, + 0x18000000: 0x4010, + 0x19000000: 0x80000, + 0x1a000000: 0x80010, + 0x1b000000: 0x40000010, + 0x1c000000: 0x84000, + 0x1d000000: 0x40004000, + 0x1e000000: 0x40000000, + 0x1f000000: 0x40084010, + 0x10800000: 0x84010, + 0x11800000: 0x80000, + 0x12800000: 0x40080000, + 0x13800000: 0x4000, + 0x14800000: 0x40004000, + 0x15800000: 0x40084010, + 0x16800000: 0x10, + 0x17800000: 0x40000000, + 0x18800000: 0x40084000, + 0x19800000: 0x40000010, + 0x1a800000: 0x40004010, + 0x1b800000: 0x80010, + 0x1c800000: 0x0, + 0x1d800000: 0x4010, + 0x1e800000: 0x40080010, + 0x1f800000: 0x84000 + }, + { + 0x0: 0x104, + 0x100000: 0x0, + 0x200000: 0x4000100, + 0x300000: 0x10104, + 0x400000: 0x10004, + 0x500000: 0x4000004, + 0x600000: 0x4010104, + 0x700000: 0x4010000, + 0x800000: 0x4000000, + 0x900000: 0x4010100, + 0xa00000: 0x10100, + 0xb00000: 0x4010004, + 0xc00000: 0x4000104, + 0xd00000: 0x10000, + 0xe00000: 0x4, + 0xf00000: 0x100, + 0x80000: 0x4010100, + 0x180000: 0x4010004, + 0x280000: 0x0, + 0x380000: 0x4000100, + 0x480000: 0x4000004, + 0x580000: 0x10000, + 0x680000: 0x10004, + 0x780000: 0x104, + 0x880000: 0x4, + 0x980000: 0x100, + 0xa80000: 0x4010000, + 0xb80000: 0x10104, + 0xc80000: 0x10100, + 0xd80000: 0x4000104, + 0xe80000: 0x4010104, + 0xf80000: 0x4000000, + 0x1000000: 0x4010100, + 0x1100000: 0x10004, + 0x1200000: 0x10000, + 0x1300000: 0x4000100, + 0x1400000: 0x100, + 0x1500000: 0x4010104, + 0x1600000: 0x4000004, + 0x1700000: 0x0, + 0x1800000: 0x4000104, + 0x1900000: 0x4000000, + 0x1a00000: 0x4, + 0x1b00000: 0x10100, + 0x1c00000: 0x4010000, + 0x1d00000: 0x104, + 0x1e00000: 0x10104, + 0x1f00000: 0x4010004, + 0x1080000: 0x4000000, + 0x1180000: 0x104, + 0x1280000: 0x4010100, + 0x1380000: 0x0, + 0x1480000: 0x10004, + 0x1580000: 0x4000100, + 0x1680000: 0x100, + 0x1780000: 0x4010004, + 0x1880000: 0x10000, + 0x1980000: 0x4010104, + 0x1a80000: 0x10104, + 0x1b80000: 0x4000004, + 0x1c80000: 0x4000104, + 0x1d80000: 0x4010000, + 0x1e80000: 0x4, + 0x1f80000: 0x10100 + }, + { + 0x0: 0x80401000, + 0x10000: 0x80001040, + 0x20000: 0x401040, + 0x30000: 0x80400000, + 0x40000: 0x0, + 0x50000: 0x401000, + 0x60000: 0x80000040, + 0x70000: 0x400040, + 0x80000: 0x80000000, + 0x90000: 0x400000, + 0xa0000: 0x40, + 0xb0000: 0x80001000, + 0xc0000: 0x80400040, + 0xd0000: 0x1040, + 0xe0000: 0x1000, + 0xf0000: 0x80401040, + 0x8000: 0x80001040, + 0x18000: 0x40, + 0x28000: 0x80400040, + 0x38000: 0x80001000, + 0x48000: 0x401000, + 0x58000: 0x80401040, + 0x68000: 0x0, + 0x78000: 0x80400000, + 0x88000: 0x1000, + 0x98000: 0x80401000, + 0xa8000: 0x400000, + 0xb8000: 0x1040, + 0xc8000: 0x80000000, + 0xd8000: 0x400040, + 0xe8000: 0x401040, + 0xf8000: 0x80000040, + 0x100000: 0x400040, + 0x110000: 0x401000, + 0x120000: 0x80000040, + 0x130000: 0x0, + 0x140000: 0x1040, + 0x150000: 0x80400040, + 0x160000: 0x80401000, + 0x170000: 0x80001040, + 0x180000: 0x80401040, + 0x190000: 0x80000000, + 0x1a0000: 0x80400000, + 0x1b0000: 0x401040, + 0x1c0000: 0x80001000, + 0x1d0000: 0x400000, + 0x1e0000: 0x40, + 0x1f0000: 0x1000, + 0x108000: 0x80400000, + 0x118000: 0x80401040, + 0x128000: 0x0, + 0x138000: 0x401000, + 0x148000: 0x400040, + 0x158000: 0x80000000, + 0x168000: 0x80001040, + 0x178000: 0x40, + 0x188000: 0x80000040, + 0x198000: 0x1000, + 0x1a8000: 0x80001000, + 0x1b8000: 0x80400040, + 0x1c8000: 0x1040, + 0x1d8000: 0x80401000, + 0x1e8000: 0x400000, + 0x1f8000: 0x401040 + }, + { + 0x0: 0x80, + 0x1000: 0x1040000, + 0x2000: 0x40000, + 0x3000: 0x20000000, + 0x4000: 0x20040080, + 0x5000: 0x1000080, + 0x6000: 0x21000080, + 0x7000: 0x40080, + 0x8000: 0x1000000, + 0x9000: 0x20040000, + 0xa000: 0x20000080, + 0xb000: 0x21040080, + 0xc000: 0x21040000, + 0xd000: 0x0, + 0xe000: 0x1040080, + 0xf000: 0x21000000, + 0x800: 0x1040080, + 0x1800: 0x21000080, + 0x2800: 0x80, + 0x3800: 0x1040000, + 0x4800: 0x40000, + 0x5800: 0x20040080, + 0x6800: 0x21040000, + 0x7800: 0x20000000, + 0x8800: 0x20040000, + 0x9800: 0x0, + 0xa800: 0x21040080, + 0xb800: 0x1000080, + 0xc800: 0x20000080, + 0xd800: 0x21000000, + 0xe800: 0x1000000, + 0xf800: 0x40080, + 0x10000: 0x40000, + 0x11000: 0x80, + 0x12000: 0x20000000, + 0x13000: 0x21000080, + 0x14000: 0x1000080, + 0x15000: 0x21040000, + 0x16000: 0x20040080, + 0x17000: 0x1000000, + 0x18000: 0x21040080, + 0x19000: 0x21000000, + 0x1a000: 0x1040000, + 0x1b000: 0x20040000, + 0x1c000: 0x40080, + 0x1d000: 0x20000080, + 0x1e000: 0x0, + 0x1f000: 0x1040080, + 0x10800: 0x21000080, + 0x11800: 0x1000000, + 0x12800: 0x1040000, + 0x13800: 0x20040080, + 0x14800: 0x20000000, + 0x15800: 0x1040080, + 0x16800: 0x80, + 0x17800: 0x21040000, + 0x18800: 0x40080, + 0x19800: 0x21040080, + 0x1a800: 0x0, + 0x1b800: 0x21000000, + 0x1c800: 0x1000080, + 0x1d800: 0x40000, + 0x1e800: 0x20040000, + 0x1f800: 0x20000080 + }, + { + 0x0: 0x10000008, + 0x100: 0x2000, + 0x200: 0x10200000, + 0x300: 0x10202008, + 0x400: 0x10002000, + 0x500: 0x200000, + 0x600: 0x200008, + 0x700: 0x10000000, + 0x800: 0x0, + 0x900: 0x10002008, + 0xa00: 0x202000, + 0xb00: 0x8, + 0xc00: 0x10200008, + 0xd00: 0x202008, + 0xe00: 0x2008, + 0xf00: 0x10202000, + 0x80: 0x10200000, + 0x180: 0x10202008, + 0x280: 0x8, + 0x380: 0x200000, + 0x480: 0x202008, + 0x580: 0x10000008, + 0x680: 0x10002000, + 0x780: 0x2008, + 0x880: 0x200008, + 0x980: 0x2000, + 0xa80: 0x10002008, + 0xb80: 0x10200008, + 0xc80: 0x0, + 0xd80: 0x10202000, + 0xe80: 0x202000, + 0xf80: 0x10000000, + 0x1000: 0x10002000, + 0x1100: 0x10200008, + 0x1200: 0x10202008, + 0x1300: 0x2008, + 0x1400: 0x200000, + 0x1500: 0x10000000, + 0x1600: 0x10000008, + 0x1700: 0x202000, + 0x1800: 0x202008, + 0x1900: 0x0, + 0x1a00: 0x8, + 0x1b00: 0x10200000, + 0x1c00: 0x2000, + 0x1d00: 0x10002008, + 0x1e00: 0x10202000, + 0x1f00: 0x200008, + 0x1080: 0x8, + 0x1180: 0x202000, + 0x1280: 0x200000, + 0x1380: 0x10000008, + 0x1480: 0x10002000, + 0x1580: 0x2008, + 0x1680: 0x10202008, + 0x1780: 0x10200000, + 0x1880: 0x10202000, + 0x1980: 0x10200008, + 0x1a80: 0x2000, + 0x1b80: 0x202008, + 0x1c80: 0x200008, + 0x1d80: 0x0, + 0x1e80: 0x10000000, + 0x1f80: 0x10002008 + }, + { + 0x0: 0x100000, + 0x10: 0x2000401, + 0x20: 0x400, + 0x30: 0x100401, + 0x40: 0x2100401, + 0x50: 0x0, + 0x60: 0x1, + 0x70: 0x2100001, + 0x80: 0x2000400, + 0x90: 0x100001, + 0xa0: 0x2000001, + 0xb0: 0x2100400, + 0xc0: 0x2100000, + 0xd0: 0x401, + 0xe0: 0x100400, + 0xf0: 0x2000000, + 0x8: 0x2100001, + 0x18: 0x0, + 0x28: 0x2000401, + 0x38: 0x2100400, + 0x48: 0x100000, + 0x58: 0x2000001, + 0x68: 0x2000000, + 0x78: 0x401, + 0x88: 0x100401, + 0x98: 0x2000400, + 0xa8: 0x2100000, + 0xb8: 0x100001, + 0xc8: 0x400, + 0xd8: 0x2100401, + 0xe8: 0x1, + 0xf8: 0x100400, + 0x100: 0x2000000, + 0x110: 0x100000, + 0x120: 0x2000401, + 0x130: 0x2100001, + 0x140: 0x100001, + 0x150: 0x2000400, + 0x160: 0x2100400, + 0x170: 0x100401, + 0x180: 0x401, + 0x190: 0x2100401, + 0x1a0: 0x100400, + 0x1b0: 0x1, + 0x1c0: 0x0, + 0x1d0: 0x2100000, + 0x1e0: 0x2000001, + 0x1f0: 0x400, + 0x108: 0x100400, + 0x118: 0x2000401, + 0x128: 0x2100001, + 0x138: 0x1, + 0x148: 0x2000000, + 0x158: 0x100000, + 0x168: 0x401, + 0x178: 0x2100400, + 0x188: 0x2000001, + 0x198: 0x2100000, + 0x1a8: 0x0, + 0x1b8: 0x2100401, + 0x1c8: 0x100401, + 0x1d8: 0x400, + 0x1e8: 0x2000400, + 0x1f8: 0x100001 + }, + { + 0x0: 0x8000820, + 0x1: 0x20000, + 0x2: 0x8000000, + 0x3: 0x20, + 0x4: 0x20020, + 0x5: 0x8020820, + 0x6: 0x8020800, + 0x7: 0x800, + 0x8: 0x8020000, + 0x9: 0x8000800, + 0xa: 0x20800, + 0xb: 0x8020020, + 0xc: 0x820, + 0xd: 0x0, + 0xe: 0x8000020, + 0xf: 0x20820, + 0x80000000: 0x800, + 0x80000001: 0x8020820, + 0x80000002: 0x8000820, + 0x80000003: 0x8000000, + 0x80000004: 0x8020000, + 0x80000005: 0x20800, + 0x80000006: 0x20820, + 0x80000007: 0x20, + 0x80000008: 0x8000020, + 0x80000009: 0x820, + 0x8000000a: 0x20020, + 0x8000000b: 0x8020800, + 0x8000000c: 0x0, + 0x8000000d: 0x8020020, + 0x8000000e: 0x8000800, + 0x8000000f: 0x20000, + 0x10: 0x20820, + 0x11: 0x8020800, + 0x12: 0x20, + 0x13: 0x800, + 0x14: 0x8000800, + 0x15: 0x8000020, + 0x16: 0x8020020, + 0x17: 0x20000, + 0x18: 0x0, + 0x19: 0x20020, + 0x1a: 0x8020000, + 0x1b: 0x8000820, + 0x1c: 0x8020820, + 0x1d: 0x20800, + 0x1e: 0x820, + 0x1f: 0x8000000, + 0x80000010: 0x20000, + 0x80000011: 0x800, + 0x80000012: 0x8020020, + 0x80000013: 0x20820, + 0x80000014: 0x20, + 0x80000015: 0x8020000, + 0x80000016: 0x8000000, + 0x80000017: 0x8000820, + 0x80000018: 0x8020820, + 0x80000019: 0x8000020, + 0x8000001a: 0x8000800, + 0x8000001b: 0x0, + 0x8000001c: 0x20800, + 0x8000001d: 0x820, + 0x8000001e: 0x20020, + 0x8000001f: 0x8020800 + } + ]; + + // Masks that select the SBOX input + var SBOX_MASK = [ + 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, + 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f + ]; + + /** + * DES block cipher algorithm. + */ + var DES = C_algo.DES = BlockCipher.extend({ + _doReset: function () { + // Shortcuts + var key = this._key; + var keyWords = key.words; + + // Select 56 bits according to PC1 + var keyBits = []; + for (var i = 0; i < 56; i++) { + var keyBitPos = PC1[i] - 1; + keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; + } + + // Assemble 16 subkeys + var subKeys = this._subKeys = []; + for (var nSubKey = 0; nSubKey < 16; nSubKey++) { + // Create subkey + var subKey = subKeys[nSubKey] = []; + + // Shortcut + var bitShift = BIT_SHIFTS[nSubKey]; + + // Select 48 bits according to PC2 + for (var i = 0; i < 24; i++) { + // Select from the left 28 key bits + subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); + + // Select from the right 28 key bits + subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); + } + + // Since each subkey is applied to an expanded 32-bit input, + // the subkey can be broken into 8 values scaled to 32-bits, + // which allows the key to be used without expansion + subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31); + for (var i = 1; i < 7; i++) { + subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3); + } + subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27); + } + + // Compute inverse subkeys + var invSubKeys = this._invSubKeys = []; + for (var i = 0; i < 16; i++) { + invSubKeys[i] = subKeys[15 - i]; + } + }, + + encryptBlock: function (M, offset) { + this._doCryptBlock(M, offset, this._subKeys); + }, + + decryptBlock: function (M, offset) { + this._doCryptBlock(M, offset, this._invSubKeys); + }, + + _doCryptBlock: function (M, offset, subKeys) { + // Get input + this._lBlock = M[offset]; + this._rBlock = M[offset + 1]; + + // Initial permutation + exchangeLR.call(this, 4, 0x0f0f0f0f); + exchangeLR.call(this, 16, 0x0000ffff); + exchangeRL.call(this, 2, 0x33333333); + exchangeRL.call(this, 8, 0x00ff00ff); + exchangeLR.call(this, 1, 0x55555555); + + // Rounds + for (var round = 0; round < 16; round++) { + // Shortcuts + var subKey = subKeys[round]; + var lBlock = this._lBlock; + var rBlock = this._rBlock; + + // Feistel function + var f = 0; + for (var i = 0; i < 8; i++) { + f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; + } + this._lBlock = rBlock; + this._rBlock = lBlock ^ f; + } + + // Undo swap from last round + var t = this._lBlock; + this._lBlock = this._rBlock; + this._rBlock = t; + + // Final permutation + exchangeLR.call(this, 1, 0x55555555); + exchangeRL.call(this, 8, 0x00ff00ff); + exchangeRL.call(this, 2, 0x33333333); + exchangeLR.call(this, 16, 0x0000ffff); + exchangeLR.call(this, 4, 0x0f0f0f0f); + + // Set output + M[offset] = this._lBlock; + M[offset + 1] = this._rBlock; + }, + + keySize: 64/32, + + ivSize: 64/32, + + blockSize: 64/32 + }); + + // Swap bits across the left and right words + function exchangeLR(offset, mask) { + var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; + this._rBlock ^= t; + this._lBlock ^= t << offset; + } + + function exchangeRL(offset, mask) { + var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; + this._lBlock ^= t; + this._rBlock ^= t << offset; + } + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); + * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); + */ + C.DES = BlockCipher._createHelper(DES); + + /** + * Triple-DES block cipher algorithm. + */ + var TripleDES = C_algo.TripleDES = BlockCipher.extend({ + _doReset: function () { + // Shortcuts + var key = this._key; + var keyWords = key.words; + + // Create DES instances + this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2))); + this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4))); + this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6))); + }, + + encryptBlock: function (M, offset) { + this._des1.encryptBlock(M, offset); + this._des2.decryptBlock(M, offset); + this._des3.encryptBlock(M, offset); + }, + + decryptBlock: function (M, offset) { + this._des3.decryptBlock(M, offset); + this._des2.encryptBlock(M, offset); + this._des1.decryptBlock(M, offset); + }, + + keySize: 192/32, + + ivSize: 64/32, + + blockSize: 64/32 + }); + + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); + * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); + */ + C.TripleDES = BlockCipher._createHelper(TripleDES); + }()); + + + return CryptoJS.TripleDES; + +})); +},{"./cipher-core":472,"./core":473,"./enc-base64":474,"./evpkdf":476,"./md5":481}],504:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { + + (function (undefined) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var X32WordArray = C_lib.WordArray; + + /** + * x64 namespace. + */ + var C_x64 = C.x64 = {}; + + /** + * A 64-bit word. + */ + var X64Word = C_x64.Word = Base.extend({ + /** + * Initializes a newly created 64-bit word. + * + * @param {number} high The high 32 bits. + * @param {number} low The low 32 bits. + * + * @example + * + * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); + */ + init: function (high, low) { + this.high = high; + this.low = low; + } + + /** + * Bitwise NOTs this word. + * + * @return {X64Word} A new x64-Word object after negating. + * + * @example + * + * var negated = x64Word.not(); + */ + // not: function () { + // var high = ~this.high; + // var low = ~this.low; + + // return X64Word.create(high, low); + // }, + + /** + * Bitwise ANDs this word with the passed word. + * + * @param {X64Word} word The x64-Word to AND with this word. + * + * @return {X64Word} A new x64-Word object after ANDing. + * + * @example + * + * var anded = x64Word.and(anotherX64Word); + */ + // and: function (word) { + // var high = this.high & word.high; + // var low = this.low & word.low; + + // return X64Word.create(high, low); + // }, + + /** + * Bitwise ORs this word with the passed word. + * + * @param {X64Word} word The x64-Word to OR with this word. + * + * @return {X64Word} A new x64-Word object after ORing. + * + * @example + * + * var ored = x64Word.or(anotherX64Word); + */ + // or: function (word) { + // var high = this.high | word.high; + // var low = this.low | word.low; + + // return X64Word.create(high, low); + // }, + + /** + * Bitwise XORs this word with the passed word. + * + * @param {X64Word} word The x64-Word to XOR with this word. + * + * @return {X64Word} A new x64-Word object after XORing. + * + * @example + * + * var xored = x64Word.xor(anotherX64Word); + */ + // xor: function (word) { + // var high = this.high ^ word.high; + // var low = this.low ^ word.low; + + // return X64Word.create(high, low); + // }, + + /** + * Shifts this word n bits to the left. + * + * @param {number} n The number of bits to shift. + * + * @return {X64Word} A new x64-Word object after shifting. + * + * @example + * + * var shifted = x64Word.shiftL(25); + */ + // shiftL: function (n) { + // if (n < 32) { + // var high = (this.high << n) | (this.low >>> (32 - n)); + // var low = this.low << n; + // } else { + // var high = this.low << (n - 32); + // var low = 0; + // } + + // return X64Word.create(high, low); + // }, + + /** + * Shifts this word n bits to the right. + * + * @param {number} n The number of bits to shift. + * + * @return {X64Word} A new x64-Word object after shifting. + * + * @example + * + * var shifted = x64Word.shiftR(7); + */ + // shiftR: function (n) { + // if (n < 32) { + // var low = (this.low >>> n) | (this.high << (32 - n)); + // var high = this.high >>> n; + // } else { + // var low = this.high >>> (n - 32); + // var high = 0; + // } + + // return X64Word.create(high, low); + // }, + + /** + * Rotates this word n bits to the left. + * + * @param {number} n The number of bits to rotate. + * + * @return {X64Word} A new x64-Word object after rotating. + * + * @example + * + * var rotated = x64Word.rotL(25); + */ + // rotL: function (n) { + // return this.shiftL(n).or(this.shiftR(64 - n)); + // }, + + /** + * Rotates this word n bits to the right. + * + * @param {number} n The number of bits to rotate. + * + * @return {X64Word} A new x64-Word object after rotating. + * + * @example + * + * var rotated = x64Word.rotR(7); + */ + // rotR: function (n) { + // return this.shiftR(n).or(this.shiftL(64 - n)); + // }, + + /** + * Adds this word with the passed word. + * + * @param {X64Word} word The x64-Word to add with this word. + * + * @return {X64Word} A new x64-Word object after adding. + * + * @example + * + * var added = x64Word.add(anotherX64Word); + */ + // add: function (word) { + // var low = (this.low + word.low) | 0; + // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; + // var high = (this.high + word.high + carry) | 0; + + // return X64Word.create(high, low); + // } + }); + + /** + * An array of 64-bit words. + * + * @property {Array} words The array of CryptoJS.x64.Word objects. + * @property {number} sigBytes The number of significant bytes in this word array. + */ + var X64WordArray = C_x64.WordArray = Base.extend({ + /** + * Initializes a newly created word array. + * + * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. + * @param {number} sigBytes (Optional) The number of significant bytes in the words. + * + * @example + * + * var wordArray = CryptoJS.x64.WordArray.create(); + * + * var wordArray = CryptoJS.x64.WordArray.create([ + * CryptoJS.x64.Word.create(0x00010203, 0x04050607), + * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) + * ]); + * + * var wordArray = CryptoJS.x64.WordArray.create([ + * CryptoJS.x64.Word.create(0x00010203, 0x04050607), + * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) + * ], 10); + */ + init: function (words, sigBytes) { + words = this.words = words || []; + + if (sigBytes != undefined) { + this.sigBytes = sigBytes; + } else { + this.sigBytes = words.length * 8; + } + }, + + /** + * Converts this 64-bit word array to a 32-bit word array. + * + * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. + * + * @example + * + * var x32WordArray = x64WordArray.toX32(); + */ + toX32: function () { + // Shortcuts + var x64Words = this.words; + var x64WordsLength = x64Words.length; + + // Convert + var x32Words = []; + for (var i = 0; i < x64WordsLength; i++) { + var x64Word = x64Words[i]; + x32Words.push(x64Word.high); + x32Words.push(x64Word.low); + } + + return X32WordArray.create(x32Words, this.sigBytes); + }, + + /** + * Creates a copy of this word array. + * + * @return {X64WordArray} The clone. + * + * @example + * + * var clone = x64WordArray.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + + // Clone "words" array + var words = clone.words = this.words.slice(0); + + // Clone each X64Word object + var wordsLength = words.length; + for (var i = 0; i < wordsLength; i++) { + words[i] = words[i].clone(); + } + + return clone; + } + }); + }()); + + + return CryptoJS; + +})); +},{"./core":473}],505:[function(require,module,exports){ +(function (global){ +'use strict'; + +var csjs = require('csjs'); +var insertCss = require('insert-css'); + +function csjsInserter() { + var args = Array.prototype.slice.call(arguments); + var result = csjs.apply(null, args); + if (global.document) { + insertCss(csjs.getCss(result)); + } + return result; +} + +module.exports = csjsInserter; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"csjs":510,"insert-css":835}],506:[function(require,module,exports){ +'use strict'; + +module.exports = require('csjs/get-css'); + +},{"csjs/get-css":509}],507:[function(require,module,exports){ +'use strict'; + +var csjs = require('./csjs'); + +module.exports = csjs; +module.exports.csjs = csjs; +module.exports.getCss = require('./get-css'); + +},{"./csjs":505,"./get-css":506}],508:[function(require,module,exports){ +'use strict'; + +module.exports = require('./lib/csjs'); + +},{"./lib/csjs":514}],509:[function(require,module,exports){ +'use strict'; + +module.exports = require('./lib/get-css'); + +},{"./lib/get-css":518}],510:[function(require,module,exports){ +'use strict'; + +var csjs = require('./csjs'); + +module.exports = csjs(); +module.exports.csjs = csjs; +module.exports.noScope = csjs({ noscope: true }); +module.exports.getCss = require('./get-css'); + +},{"./csjs":508,"./get-css":509}],511:[function(require,module,exports){ +'use strict'; + +/** + * base62 encode implementation based on base62 module: + * https://github.com/andrew/base62.js + */ + +var CHARS = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + +module.exports = function encode(integer) { + if (integer === 0) { + return '0'; + } + var str = ''; + while (integer > 0) { + str = CHARS[integer % 62] + str; + integer = Math.floor(integer / 62); + } + return str; +}; + +},{}],512:[function(require,module,exports){ +'use strict'; + +var makeComposition = require('./composition').makeComposition; + +module.exports = function createExports(classes, keyframes, compositions) { + var keyframesObj = Object.keys(keyframes).reduce(function(acc, key) { + var val = keyframes[key]; + acc[val] = makeComposition([key], [val], true); + return acc; + }, {}); + + var exports = Object.keys(classes).reduce(function(acc, key) { + var val = classes[key]; + var composition = compositions[key]; + var extended = composition ? getClassChain(composition) : []; + var allClasses = [key].concat(extended); + var unscoped = allClasses.map(function(name) { + return classes[name] ? classes[name] : name; + }); + acc[val] = makeComposition(allClasses, unscoped); + return acc; + }, keyframesObj); + + return exports; +} + +function getClassChain(obj) { + var visited = {}, acc = []; + + function traverse(obj) { + return Object.keys(obj).forEach(function(key) { + if (!visited[key]) { + visited[key] = true; + acc.push(key); + traverse(obj[key]); + } + }); + } + + traverse(obj); + return acc; +} + +},{"./composition":513}],513:[function(require,module,exports){ +'use strict'; + +module.exports = { + makeComposition: makeComposition, + isComposition: isComposition, + ignoreComposition: ignoreComposition +}; + +/** + * Returns an immutable composition object containing the given class names + * @param {array} classNames - The input array of class names + * @return {Composition} - An immutable object that holds multiple + * representations of the class composition + */ +function makeComposition(classNames, unscoped, isAnimation) { + var classString = classNames.join(' '); + return Object.create(Composition.prototype, { + classNames: { // the original array of class names + value: Object.freeze(classNames), + configurable: false, + writable: false, + enumerable: true + }, + unscoped: { // the original array of class names + value: Object.freeze(unscoped), + configurable: false, + writable: false, + enumerable: true + }, + className: { // space-separated class string for use in HTML + value: classString, + configurable: false, + writable: false, + enumerable: true + }, + selector: { // comma-separated, period-prefixed string for use in CSS + value: classNames.map(function(name) { + return isAnimation ? name : '.' + name; + }).join(', '), + configurable: false, + writable: false, + enumerable: true + }, + toString: { // toString() method, returns class string for use in HTML + value: function() { + return classString; + }, + configurable: false, + writeable: false, + enumerable: false + } + }); +} + +/** + * Returns whether the input value is a Composition + * @param value - value to check + * @return {boolean} - whether value is a Composition or not + */ +function isComposition(value) { + return value instanceof Composition; +} + +function ignoreComposition(values) { + return values.reduce(function(acc, val) { + if (isComposition(val)) { + val.classNames.forEach(function(name, i) { + acc[name] = val.unscoped[i]; + }); + } + return acc; + }, {}); +} + +/** + * Private constructor for use in `instanceof` checks + */ +function Composition() {} + +},{}],514:[function(require,module,exports){ +'use strict'; + +var extractExtends = require('./css-extract-extends'); +var composition = require('./composition'); +var isComposition = composition.isComposition; +var ignoreComposition = composition.ignoreComposition; +var buildExports = require('./build-exports'); +var scopify = require('./scopeify'); +var cssKey = require('./css-key'); +var extractExports = require('./extract-exports'); + +module.exports = function csjsTemplate(opts) { + opts = (typeof opts === 'undefined') ? {} : opts; + var noscope = (typeof opts.noscope === 'undefined') ? false : opts.noscope; + + return function csjsHandler(strings, values) { + // Fast path to prevent arguments deopt + var values = Array(arguments.length - 1); + for (var i = 1; i < arguments.length; i++) { + values[i - 1] = arguments[i]; + } + var css = joiner(strings, values.map(selectorize)); + var ignores = ignoreComposition(values); + + var scope = noscope ? extractExports(css) : scopify(css, ignores); + var extracted = extractExtends(scope.css); + var localClasses = without(scope.classes, ignores); + var localKeyframes = without(scope.keyframes, ignores); + var compositions = extracted.compositions; + + var exports = buildExports(localClasses, localKeyframes, compositions); + + return Object.defineProperty(exports, cssKey, { + enumerable: false, + configurable: false, + writeable: false, + value: extracted.css + }); + } +} + +/** + * Replaces class compositions with comma seperated class selectors + * @param value - the potential class composition + * @return - the original value or the selectorized class composition + */ +function selectorize(value) { + return isComposition(value) ? value.selector : value; +} + +/** + * Joins template string literals and values + * @param {array} strings - array of strings + * @param {array} values - array of values + * @return {string} - strings and values joined + */ +function joiner(strings, values) { + return strings.map(function(str, i) { + return (i !== values.length) ? str + values[i] : str; + }).join(''); +} + +/** + * Returns first object without keys of second + * @param {object} obj - source object + * @param {object} unwanted - object with unwanted keys + * @return {object} - first object without unwanted keys + */ +function without(obj, unwanted) { + return Object.keys(obj).reduce(function(acc, key) { + if (!unwanted[key]) { + acc[key] = obj[key]; + } + return acc; + }, {}); +} + +},{"./build-exports":512,"./composition":513,"./css-extract-extends":515,"./css-key":516,"./extract-exports":517,"./scopeify":523}],515:[function(require,module,exports){ +'use strict'; + +var makeComposition = require('./composition').makeComposition; + +var regex = /\.([^\s]+)(\s+)(extends\s+)(\.[^{]+)/g; + +module.exports = function extractExtends(css) { + var found, matches = []; + while (found = regex.exec(css)) { + matches.unshift(found); + } + + function extractCompositions(acc, match) { + var extendee = getClassName(match[1]); + var keyword = match[3]; + var extended = match[4]; + + // remove from output css + var index = match.index + match[1].length + match[2].length; + var len = keyword.length + extended.length; + acc.css = acc.css.slice(0, index) + " " + acc.css.slice(index + len + 1); + + var extendedClasses = splitter(extended); + + extendedClasses.forEach(function(className) { + if (!acc.compositions[extendee]) { + acc.compositions[extendee] = {}; + } + if (!acc.compositions[className]) { + acc.compositions[className] = {}; + } + acc.compositions[extendee][className] = acc.compositions[className]; + }); + return acc; + } + + return matches.reduce(extractCompositions, { + css: css, + compositions: {} + }); + +}; + +function splitter(match) { + return match.split(',').map(getClassName); +} + +function getClassName(str) { + var trimmed = str.trim(); + return trimmed[0] === '.' ? trimmed.substr(1) : trimmed; +} + +},{"./composition":513}],516:[function(require,module,exports){ +'use strict'; + +/** + * CSS identifiers with whitespace are invalid + * Hence this key will not cause a collision + */ + +module.exports = ' css '; + +},{}],517:[function(require,module,exports){ +'use strict'; + +var regex = require('./regex'); +var classRegex = regex.classRegex; +var keyframesRegex = regex.keyframesRegex; + +module.exports = extractExports; + +function extractExports(css) { + return { + css: css, + keyframes: getExport(css, keyframesRegex), + classes: getExport(css, classRegex) + }; +} + +function getExport(css, regex) { + var prop = {}; + var match; + while((match = regex.exec(css)) !== null) { + var name = match[2]; + prop[name] = name; + } + return prop; +} + +},{"./regex":520}],518:[function(require,module,exports){ +'use strict'; + +var cssKey = require('./css-key'); + +module.exports = function getCss(csjs) { + return csjs[cssKey]; +}; + +},{"./css-key":516}],519:[function(require,module,exports){ +'use strict'; + +/** + * djb2 string hash implementation based on string-hash module: + * https://github.com/darkskyapp/string-hash + */ + +module.exports = function hashStr(str) { + var hash = 5381; + var i = str.length; + + while (i) { + hash = (hash * 33) ^ str.charCodeAt(--i) + } + return hash >>> 0; +}; + +},{}],520:[function(require,module,exports){ +'use strict'; + +var findClasses = /(\.)(?!\d)([^\s\.,{\[>+~#:)]*)(?![^{]*})/.source; +var findKeyframes = /(@\S*keyframes\s*)([^{\s]*)/.source; +var ignoreComments = /(?!(?:[^*/]|\*[^/]|\/[^*])*\*+\/)/.source; + +var classRegex = new RegExp(findClasses + ignoreComments, 'g'); +var keyframesRegex = new RegExp(findKeyframes + ignoreComments, 'g'); + +module.exports = { + classRegex: classRegex, + keyframesRegex: keyframesRegex, + ignoreComments: ignoreComments, +}; + +},{}],521:[function(require,module,exports){ +var ignoreComments = require('./regex').ignoreComments; + +module.exports = replaceAnimations; + +function replaceAnimations(result) { + var animations = Object.keys(result.keyframes).reduce(function(acc, key) { + acc[result.keyframes[key]] = key; + return acc; + }, {}); + var unscoped = Object.keys(animations); + + if (unscoped.length) { + var regexStr = '((?:animation|animation-name)\\s*:[^};]*)(' + + unscoped.join('|') + ')([;\\s])' + ignoreComments; + var regex = new RegExp(regexStr, 'g'); + + var replaced = result.css.replace(regex, function(match, preamble, name, ending) { + return preamble + animations[name] + ending; + }); + + return { + css: replaced, + keyframes: result.keyframes, + classes: result.classes + } + } + + return result; +} + +},{"./regex":520}],522:[function(require,module,exports){ +'use strict'; + +var encode = require('./base62-encode'); +var hash = require('./hash-string'); + +module.exports = function fileScoper(fileSrc) { + var suffix = encode(hash(fileSrc)); + + return function scopedName(name) { + return name + '_' + suffix; + } +}; + +},{"./base62-encode":511,"./hash-string":519}],523:[function(require,module,exports){ +'use strict'; + +var fileScoper = require('./scoped-name'); +var replaceAnimations = require('./replace-animations'); +var regex = require('./regex'); +var classRegex = regex.classRegex; +var keyframesRegex = regex.keyframesRegex; + +module.exports = scopify; + +function scopify(css, ignores) { + var makeScopedName = fileScoper(css); + var replacers = { + classes: classRegex, + keyframes: keyframesRegex + }; + + function scopeCss(result, key) { + var replacer = replacers[key]; + function replaceFn(fullMatch, prefix, name) { + var scopedName = ignores[name] ? name : makeScopedName(name); + result[key][scopedName] = name; + return prefix + scopedName; + } + return { + css: result.css.replace(replacer, replaceFn), + keyframes: result.keyframes, + classes: result.classes + }; + } + + var result = Object.keys(replacers).reduce(scopeCss, { + css: css, + keyframes: {}, + classes: {} + }); + + return replaceAnimations(result); +} + +},{"./regex":520,"./replace-animations":521,"./scoped-name":522}],524:[function(require,module,exports){ +(function (global){ + +var NativeCustomEvent = global.CustomEvent; + +function useNative () { + try { + var p = new NativeCustomEvent('cat', { detail: { foo: 'bar' } }); + return 'cat' === p.type && 'bar' === p.detail.foo; + } catch (e) { + } + return false; +} + +/** + * Cross-browser `CustomEvent` constructor. + * + * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent.CustomEvent + * + * @public + */ + +module.exports = useNative() ? NativeCustomEvent : + +// IE >= 9 +'undefined' !== typeof document && 'function' === typeof document.createEvent ? function CustomEvent (type, params) { + var e = document.createEvent('CustomEvent'); + if (params) { + e.initCustomEvent(type, params.bubbles, params.cancelable, params.detail); + } else { + e.initCustomEvent(type, false, false, void 0); + } + return e; +} : + +// IE <= 8 +function CustomEvent (type, params) { + var e = document.createEventObject(); + e.type = type; + if (params) { + e.bubbles = Boolean(params.bubbles); + e.cancelable = Boolean(params.cancelable); + e.detail = params.detail; + } else { + e.bubbles = false; + e.cancelable = false; + e.detail = void 0; + } + return e; +} + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],525:[function(require,module,exports){ +'use strict'; +var token = '%[a-f0-9]{2}'; +var singleMatcher = new RegExp(token, 'gi'); +var multiMatcher = new RegExp('(' + token + ')+', 'gi'); + +function decodeComponents(components, split) { + try { + // Try to decode the entire string first + return decodeURIComponent(components.join('')); + } catch (err) { + // Do nothing + } + + if (components.length === 1) { + return components; + } + + split = split || 1; + + // Split the array in 2 parts + var left = components.slice(0, split); + var right = components.slice(split); + + return Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right)); +} + +function decode(input) { + try { + return decodeURIComponent(input); + } catch (err) { + var tokens = input.match(singleMatcher); + + for (var i = 1; i < tokens.length; i++) { + input = decodeComponents(tokens, i).join(''); + + tokens = input.match(singleMatcher); + } + + return input; + } +} + +function customDecodeURIComponent(input) { + // Keep track of all the replacements and prefill the map with the `BOM` + var replaceMap = { + '%FE%FF': '\uFFFD\uFFFD', + '%FF%FE': '\uFFFD\uFFFD' + }; + + var match = multiMatcher.exec(input); + while (match) { + try { + // Decode as big chunks as possible + replaceMap[match[0]] = decodeURIComponent(match[0]); + } catch (err) { + var result = decode(match[0]); + + if (result !== match[0]) { + replaceMap[match[0]] = result; + } + } + + match = multiMatcher.exec(input); + } + + // Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else + replaceMap['%C2'] = '\uFFFD'; + + var entries = Object.keys(replaceMap); + + for (var i = 0; i < entries.length; i++) { + // Replace all decoded components + var key = entries[i]; + input = input.replace(new RegExp(key, 'g'), replaceMap[key]); + } + + return input; +} + +module.exports = function (encodedURI) { + if (typeof encodedURI !== 'string') { + throw new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`'); + } + + try { + encodedURI = encodedURI.replace(/\+/g, ' '); + + // Try the built in decoder first + return decodeURIComponent(encodedURI); + } catch (err) { + // Fallback to a more advanced decoder + return customDecodeURIComponent(encodedURI); + } +}; + +},{}],526:[function(require,module,exports){ +var util = require('util') + , AbstractIterator = require('abstract-leveldown').AbstractIterator + + +function DeferredIterator (options) { + AbstractIterator.call(this, options) + + this._options = options + this._iterator = null + this._operations = [] +} + +util.inherits(DeferredIterator, AbstractIterator) + +DeferredIterator.prototype.setDb = function (db) { + var it = this._iterator = db.iterator(this._options) + this._operations.forEach(function (op) { + it[op.method].apply(it, op.args) + }) +} + +DeferredIterator.prototype._operation = function (method, args) { + if (this._iterator) + return this._iterator[method].apply(this._iterator, args) + this._operations.push({ method: method, args: args }) +} + +'next end'.split(' ').forEach(function (m) { + DeferredIterator.prototype['_' + m] = function () { + this._operation(m, arguments) + } +}) + +module.exports = DeferredIterator; + +},{"abstract-leveldown":4,"util":1439}],527:[function(require,module,exports){ +(function (Buffer,process){ +var util = require('util') + , AbstractLevelDOWN = require('abstract-leveldown').AbstractLevelDOWN + , DeferredIterator = require('./deferred-iterator') + +function DeferredLevelDOWN (location) { + AbstractLevelDOWN.call(this, typeof location == 'string' ? location : '') // optional location, who cares? + this._db = undefined + this._operations = [] + this._iterators = [] +} + +util.inherits(DeferredLevelDOWN, AbstractLevelDOWN) + +// called by LevelUP when we have a real DB to take its place +DeferredLevelDOWN.prototype.setDb = function (db) { + this._db = db + this._operations.forEach(function (op) { + db[op.method].apply(db, op.args) + }) + this._iterators.forEach(function (it) { + it.setDb(db) + }) +} + +DeferredLevelDOWN.prototype._open = function (options, callback) { + return process.nextTick(callback) +} + +// queue a new deferred operation +DeferredLevelDOWN.prototype._operation = function (method, args) { + if (this._db) + return this._db[method].apply(this._db, args) + this._operations.push({ method: method, args: args }) +} + +// deferrables +'put get del batch approximateSize'.split(' ').forEach(function (m) { + DeferredLevelDOWN.prototype['_' + m] = function () { + this._operation(m, arguments) + } +}) + +DeferredLevelDOWN.prototype._isBuffer = function (obj) { + return Buffer.isBuffer(obj) +} + +DeferredLevelDOWN.prototype._iterator = function (options) { + if (this._db) + return this._db.iterator.apply(this._db, arguments) + var it = new DeferredIterator(options) + this._iterators.push(it) + return it +} + +module.exports = DeferredLevelDOWN +module.exports.DeferredIterator = DeferredIterator + +}).call(this,{"isBuffer":require("../is-buffer/index.js")},require('_process')) +},{"../is-buffer/index.js":839,"./deferred-iterator":526,"_process":109,"abstract-leveldown":4,"util":1439}],528:[function(require,module,exports){ +'use strict'; + +var keys = require('object-keys'); +var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol'; + +var toStr = Object.prototype.toString; +var concat = Array.prototype.concat; +var origDefineProperty = Object.defineProperty; + +var isFunction = function (fn) { + return typeof fn === 'function' && toStr.call(fn) === '[object Function]'; +}; + +var arePropertyDescriptorsSupported = function () { + var obj = {}; + try { + origDefineProperty(obj, 'x', { enumerable: false, value: obj }); + // eslint-disable-next-line no-unused-vars, no-restricted-syntax + for (var _ in obj) { // jscs:ignore disallowUnusedVariables + return false; + } + return obj.x === obj; + } catch (e) { /* this is IE 8. */ + return false; + } +}; +var supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported(); + +var defineProperty = function (object, name, value, predicate) { + if (name in object && (!isFunction(predicate) || !predicate())) { + return; + } + if (supportsDescriptors) { + origDefineProperty(object, name, { + configurable: true, + enumerable: false, + value: value, + writable: true + }); + } else { + object[name] = value; + } +}; + +var defineProperties = function (object, map) { + var predicates = arguments.length > 2 ? arguments[2] : {}; + var props = keys(map); + if (hasSymbols) { + props = concat.call(props, Object.getOwnPropertySymbols(map)); + } + for (var i = 0; i < props.length; i += 1) { + defineProperty(object, props[i], map[props[i]], predicates[props[i]]); + } +}; + +defineProperties.supportsDescriptors = !!supportsDescriptors; + +module.exports = defineProperties; + +},{"object-keys":530}],529:[function(require,module,exports){ +'use strict'; + +var keysShim; +if (!Object.keys) { + // modified from https://github.com/es-shims/es5-shim + var has = Object.prototype.hasOwnProperty; + var toStr = Object.prototype.toString; + var isArgs = require('./isArguments'); // eslint-disable-line global-require + var isEnumerable = Object.prototype.propertyIsEnumerable; + var hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString'); + var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype'); + var dontEnums = [ + 'toString', + 'toLocaleString', + 'valueOf', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'constructor' + ]; + var equalsConstructorPrototype = function (o) { + var ctor = o.constructor; + return ctor && ctor.prototype === o; + }; + var excludedKeys = { + $applicationCache: true, + $console: true, + $external: true, + $frame: true, + $frameElement: true, + $frames: true, + $innerHeight: true, + $innerWidth: true, + $outerHeight: true, + $outerWidth: true, + $pageXOffset: true, + $pageYOffset: true, + $parent: true, + $scrollLeft: true, + $scrollTop: true, + $scrollX: true, + $scrollY: true, + $self: true, + $webkitIndexedDB: true, + $webkitStorageInfo: true, + $window: true + }; + var hasAutomationEqualityBug = (function () { + /* global window */ + if (typeof window === 'undefined') { return false; } + for (var k in window) { + try { + if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') { + try { + equalsConstructorPrototype(window[k]); + } catch (e) { + return true; + } + } + } catch (e) { + return true; + } + } + return false; + }()); + var equalsConstructorPrototypeIfNotBuggy = function (o) { + /* global window */ + if (typeof window === 'undefined' || !hasAutomationEqualityBug) { + return equalsConstructorPrototype(o); + } + try { + return equalsConstructorPrototype(o); + } catch (e) { + return false; + } + }; + + keysShim = function keys(object) { + var isObject = object !== null && typeof object === 'object'; + var isFunction = toStr.call(object) === '[object Function]'; + var isArguments = isArgs(object); + var isString = isObject && toStr.call(object) === '[object String]'; + var theKeys = []; + + if (!isObject && !isFunction && !isArguments) { + throw new TypeError('Object.keys called on a non-object'); + } + + var skipProto = hasProtoEnumBug && isFunction; + if (isString && object.length > 0 && !has.call(object, 0)) { + for (var i = 0; i < object.length; ++i) { + theKeys.push(String(i)); + } + } + + if (isArguments && object.length > 0) { + for (var j = 0; j < object.length; ++j) { + theKeys.push(String(j)); + } + } else { + for (var name in object) { + if (!(skipProto && name === 'prototype') && has.call(object, name)) { + theKeys.push(String(name)); + } + } + } + + if (hasDontEnumBug) { + var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object); + + for (var k = 0; k < dontEnums.length; ++k) { + if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) { + theKeys.push(dontEnums[k]); + } + } + } + return theKeys; + }; +} +module.exports = keysShim; + +},{"./isArguments":531}],530:[function(require,module,exports){ +'use strict'; + +var slice = Array.prototype.slice; +var isArgs = require('./isArguments'); + +var origKeys = Object.keys; +var keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation'); + +var originalKeys = Object.keys; + +keysShim.shim = function shimObjectKeys() { + if (Object.keys) { + var keysWorksWithArguments = (function () { + // Safari 5.0 bug + var args = Object.keys(arguments); + return args && args.length === arguments.length; + }(1, 2)); + if (!keysWorksWithArguments) { + Object.keys = function keys(object) { // eslint-disable-line func-name-matching + if (isArgs(object)) { + return originalKeys(slice.call(object)); + } + return originalKeys(object); + }; + } + } else { + Object.keys = keysShim; + } + return Object.keys || keysShim; +}; + +module.exports = keysShim; + +},{"./implementation":529,"./isArguments":531}],531:[function(require,module,exports){ +'use strict'; + +var toStr = Object.prototype.toString; + +module.exports = function isArguments(value) { + var str = toStr.call(value); + var isArgs = str === '[object Arguments]'; + if (!isArgs) { + isArgs = str !== '[object Array]' && + value !== null && + typeof value === 'object' && + typeof value.length === 'number' && + value.length >= 0 && + toStr.call(value.callee) === '[object Function]'; + } + return isArgs; +}; + +},{}],532:[function(require,module,exports){ +var Stream = require('stream').Stream; +var util = require('util'); + +module.exports = DelayedStream; +function DelayedStream() { + this.source = null; + this.dataSize = 0; + this.maxDataSize = 1024 * 1024; + this.pauseStream = true; + + this._maxDataSizeExceeded = false; + this._released = false; + this._bufferedEvents = []; +} +util.inherits(DelayedStream, Stream); + +DelayedStream.create = function(source, options) { + var delayedStream = new this(); + + options = options || {}; + for (var option in options) { + delayedStream[option] = options[option]; + } + + delayedStream.source = source; + + var realEmit = source.emit; + source.emit = function() { + delayedStream._handleEmit(arguments); + return realEmit.apply(source, arguments); + }; + + source.on('error', function() {}); + if (delayedStream.pauseStream) { + source.pause(); + } + + return delayedStream; +}; + +Object.defineProperty(DelayedStream.prototype, 'readable', { + configurable: true, + enumerable: true, + get: function() { + return this.source.readable; + } +}); + +DelayedStream.prototype.setEncoding = function() { + return this.source.setEncoding.apply(this.source, arguments); +}; + +DelayedStream.prototype.resume = function() { + if (!this._released) { + this.release(); + } + + this.source.resume(); +}; + +DelayedStream.prototype.pause = function() { + this.source.pause(); +}; + +DelayedStream.prototype.release = function() { + this._released = true; + + this._bufferedEvents.forEach(function(args) { + this.emit.apply(this, args); + }.bind(this)); + this._bufferedEvents = []; +}; + +DelayedStream.prototype.pipe = function() { + var r = Stream.prototype.pipe.apply(this, arguments); + this.resume(); + return r; +}; + +DelayedStream.prototype._handleEmit = function(args) { + if (this._released) { + this.emit.apply(this, args); + return; + } + + if (args[0] === 'data') { + this.dataSize += args[1].length; + this._checkIfMaxDataSizeExceeded(); + } + + this._bufferedEvents.push(args); +}; + +DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() { + if (this._maxDataSizeExceeded) { + return; + } + + if (this.dataSize <= this.maxDataSize) { + return; + } + + this._maxDataSizeExceeded = true; + var message = + 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.' + this.emit('error', new Error(message)); +}; + +},{"stream":1394,"util":1439}],533:[function(require,module,exports){ +'use strict'; + +exports.utils = require('./des/utils'); +exports.Cipher = require('./des/cipher'); +exports.DES = require('./des/des'); +exports.CBC = require('./des/cbc'); +exports.EDE = require('./des/ede'); + +},{"./des/cbc":534,"./des/cipher":535,"./des/des":536,"./des/ede":537,"./des/utils":538}],534:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); + +var proto = {}; + +function CBCState(iv) { + assert.equal(iv.length, 8, 'Invalid IV length'); + + this.iv = new Array(8); + for (var i = 0; i < this.iv.length; i++) + this.iv[i] = iv[i]; +} + +function instantiate(Base) { + function CBC(options) { + Base.call(this, options); + this._cbcInit(); + } + inherits(CBC, Base); + + var keys = Object.keys(proto); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + CBC.prototype[key] = proto[key]; + } + + CBC.create = function create(options) { + return new CBC(options); + }; + + return CBC; +} + +exports.instantiate = instantiate; + +proto._cbcInit = function _cbcInit() { + var state = new CBCState(this.options.iv); + this._cbcState = state; +}; + +proto._update = function _update(inp, inOff, out, outOff) { + var state = this._cbcState; + var superProto = this.constructor.super_.prototype; + + var iv = state.iv; + if (this.type === 'encrypt') { + for (var i = 0; i < this.blockSize; i++) + iv[i] ^= inp[inOff + i]; + + superProto._update.call(this, iv, 0, out, outOff); + + for (var i = 0; i < this.blockSize; i++) + iv[i] = out[outOff + i]; + } else { + superProto._update.call(this, inp, inOff, out, outOff); + + for (var i = 0; i < this.blockSize; i++) + out[outOff + i] ^= iv[i]; + + for (var i = 0; i < this.blockSize; i++) + iv[i] = inp[inOff + i]; + } +}; + +},{"inherits":834,"minimalistic-assert":960}],535:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); + +function Cipher(options) { + this.options = options; + + this.type = this.options.type; + this.blockSize = 8; + this._init(); + + this.buffer = new Array(this.blockSize); + this.bufferOff = 0; +} +module.exports = Cipher; + +Cipher.prototype._init = function _init() { + // Might be overrided +}; + +Cipher.prototype.update = function update(data) { + if (data.length === 0) + return []; + + if (this.type === 'decrypt') + return this._updateDecrypt(data); + else + return this._updateEncrypt(data); +}; + +Cipher.prototype._buffer = function _buffer(data, off) { + // Append data to buffer + var min = Math.min(this.buffer.length - this.bufferOff, data.length - off); + for (var i = 0; i < min; i++) + this.buffer[this.bufferOff + i] = data[off + i]; + this.bufferOff += min; + + // Shift next + return min; +}; + +Cipher.prototype._flushBuffer = function _flushBuffer(out, off) { + this._update(this.buffer, 0, out, off); + this.bufferOff = 0; + return this.blockSize; +}; + +Cipher.prototype._updateEncrypt = function _updateEncrypt(data) { + var inputOff = 0; + var outputOff = 0; + + var count = ((this.bufferOff + data.length) / this.blockSize) | 0; + var out = new Array(count * this.blockSize); + + if (this.bufferOff !== 0) { + inputOff += this._buffer(data, inputOff); + + if (this.bufferOff === this.buffer.length) + outputOff += this._flushBuffer(out, outputOff); + } + + // Write blocks + var max = data.length - ((data.length - inputOff) % this.blockSize); + for (; inputOff < max; inputOff += this.blockSize) { + this._update(data, inputOff, out, outputOff); + outputOff += this.blockSize; + } + + // Queue rest + for (; inputOff < data.length; inputOff++, this.bufferOff++) + this.buffer[this.bufferOff] = data[inputOff]; + + return out; +}; + +Cipher.prototype._updateDecrypt = function _updateDecrypt(data) { + var inputOff = 0; + var outputOff = 0; + + var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1; + var out = new Array(count * this.blockSize); + + // TODO(indutny): optimize it, this is far from optimal + for (; count > 0; count--) { + inputOff += this._buffer(data, inputOff); + outputOff += this._flushBuffer(out, outputOff); + } + + // Buffer rest of the input + inputOff += this._buffer(data, inputOff); + + return out; +}; + +Cipher.prototype.final = function final(buffer) { + var first; + if (buffer) + first = this.update(buffer); + + var last; + if (this.type === 'encrypt') + last = this._finalEncrypt(); + else + last = this._finalDecrypt(); + + if (first) + return first.concat(last); + else + return last; +}; + +Cipher.prototype._pad = function _pad(buffer, off) { + if (off === 0) + return false; + + while (off < buffer.length) + buffer[off++] = 0; + + return true; +}; + +Cipher.prototype._finalEncrypt = function _finalEncrypt() { + if (!this._pad(this.buffer, this.bufferOff)) + return []; + + var out = new Array(this.blockSize); + this._update(this.buffer, 0, out, 0); + return out; +}; + +Cipher.prototype._unpad = function _unpad(buffer) { + return buffer; +}; + +Cipher.prototype._finalDecrypt = function _finalDecrypt() { + assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt'); + var out = new Array(this.blockSize); + this._flushBuffer(out, 0); + + return this._unpad(out); +}; + +},{"minimalistic-assert":960}],536:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); + +var des = require('../des'); +var utils = des.utils; +var Cipher = des.Cipher; + +function DESState() { + this.tmp = new Array(2); + this.keys = null; +} + +function DES(options) { + Cipher.call(this, options); + + var state = new DESState(); + this._desState = state; + + this.deriveKeys(state, options.key); +} +inherits(DES, Cipher); +module.exports = DES; + +DES.create = function create(options) { + return new DES(options); +}; + +var shiftTable = [ + 1, 1, 2, 2, 2, 2, 2, 2, + 1, 2, 2, 2, 2, 2, 2, 1 +]; + +DES.prototype.deriveKeys = function deriveKeys(state, key) { + state.keys = new Array(16 * 2); + + assert.equal(key.length, this.blockSize, 'Invalid key length'); + + var kL = utils.readUInt32BE(key, 0); + var kR = utils.readUInt32BE(key, 4); + + utils.pc1(kL, kR, state.tmp, 0); + kL = state.tmp[0]; + kR = state.tmp[1]; + for (var i = 0; i < state.keys.length; i += 2) { + var shift = shiftTable[i >>> 1]; + kL = utils.r28shl(kL, shift); + kR = utils.r28shl(kR, shift); + utils.pc2(kL, kR, state.keys, i); + } +}; + +DES.prototype._update = function _update(inp, inOff, out, outOff) { + var state = this._desState; + + var l = utils.readUInt32BE(inp, inOff); + var r = utils.readUInt32BE(inp, inOff + 4); + + // Initial Permutation + utils.ip(l, r, state.tmp, 0); + l = state.tmp[0]; + r = state.tmp[1]; + + if (this.type === 'encrypt') + this._encrypt(state, l, r, state.tmp, 0); + else + this._decrypt(state, l, r, state.tmp, 0); + + l = state.tmp[0]; + r = state.tmp[1]; + + utils.writeUInt32BE(out, l, outOff); + utils.writeUInt32BE(out, r, outOff + 4); +}; + +DES.prototype._pad = function _pad(buffer, off) { + var value = buffer.length - off; + for (var i = off; i < buffer.length; i++) + buffer[i] = value; + + return true; +}; + +DES.prototype._unpad = function _unpad(buffer) { + var pad = buffer[buffer.length - 1]; + for (var i = buffer.length - pad; i < buffer.length; i++) + assert.equal(buffer[i], pad); + + return buffer.slice(0, buffer.length - pad); +}; + +DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) { + var l = lStart; + var r = rStart; + + // Apply f() x16 times + for (var i = 0; i < state.keys.length; i += 2) { + var keyL = state.keys[i]; + var keyR = state.keys[i + 1]; + + // f(r, k) + utils.expand(r, state.tmp, 0); + + keyL ^= state.tmp[0]; + keyR ^= state.tmp[1]; + var s = utils.substitute(keyL, keyR); + var f = utils.permute(s); + + var t = r; + r = (l ^ f) >>> 0; + l = t; + } + + // Reverse Initial Permutation + utils.rip(r, l, out, off); +}; + +DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) { + var l = rStart; + var r = lStart; + + // Apply f() x16 times + for (var i = state.keys.length - 2; i >= 0; i -= 2) { + var keyL = state.keys[i]; + var keyR = state.keys[i + 1]; + + // f(r, k) + utils.expand(l, state.tmp, 0); + + keyL ^= state.tmp[0]; + keyR ^= state.tmp[1]; + var s = utils.substitute(keyL, keyR); + var f = utils.permute(s); + + var t = l; + l = (r ^ f) >>> 0; + r = t; + } + + // Reverse Initial Permutation + utils.rip(l, r, out, off); +}; + +},{"../des":533,"inherits":834,"minimalistic-assert":960}],537:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); + +var des = require('../des'); +var Cipher = des.Cipher; +var DES = des.DES; + +function EDEState(type, key) { + assert.equal(key.length, 24, 'Invalid key length'); + + var k1 = key.slice(0, 8); + var k2 = key.slice(8, 16); + var k3 = key.slice(16, 24); + + if (type === 'encrypt') { + this.ciphers = [ + DES.create({ type: 'encrypt', key: k1 }), + DES.create({ type: 'decrypt', key: k2 }), + DES.create({ type: 'encrypt', key: k3 }) + ]; + } else { + this.ciphers = [ + DES.create({ type: 'decrypt', key: k3 }), + DES.create({ type: 'encrypt', key: k2 }), + DES.create({ type: 'decrypt', key: k1 }) + ]; + } +} + +function EDE(options) { + Cipher.call(this, options); + + var state = new EDEState(this.type, this.options.key); + this._edeState = state; +} +inherits(EDE, Cipher); + +module.exports = EDE; + +EDE.create = function create(options) { + return new EDE(options); +}; + +EDE.prototype._update = function _update(inp, inOff, out, outOff) { + var state = this._edeState; + + state.ciphers[0]._update(inp, inOff, out, outOff); + state.ciphers[1]._update(out, outOff, out, outOff); + state.ciphers[2]._update(out, outOff, out, outOff); +}; + +EDE.prototype._pad = DES.prototype._pad; +EDE.prototype._unpad = DES.prototype._unpad; + +},{"../des":533,"inherits":834,"minimalistic-assert":960}],538:[function(require,module,exports){ +'use strict'; + +exports.readUInt32BE = function readUInt32BE(bytes, off) { + var res = (bytes[0 + off] << 24) | + (bytes[1 + off] << 16) | + (bytes[2 + off] << 8) | + bytes[3 + off]; + return res >>> 0; +}; + +exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) { + bytes[0 + off] = value >>> 24; + bytes[1 + off] = (value >>> 16) & 0xff; + bytes[2 + off] = (value >>> 8) & 0xff; + bytes[3 + off] = value & 0xff; +}; + +exports.ip = function ip(inL, inR, out, off) { + var outL = 0; + var outR = 0; + + for (var i = 6; i >= 0; i -= 2) { + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inR >>> (j + i)) & 1; + } + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inL >>> (j + i)) & 1; + } + } + + for (var i = 6; i >= 0; i -= 2) { + for (var j = 1; j <= 25; j += 8) { + outR <<= 1; + outR |= (inR >>> (j + i)) & 1; + } + for (var j = 1; j <= 25; j += 8) { + outR <<= 1; + outR |= (inL >>> (j + i)) & 1; + } + } + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +exports.rip = function rip(inL, inR, out, off) { + var outL = 0; + var outR = 0; + + for (var i = 0; i < 4; i++) { + for (var j = 24; j >= 0; j -= 8) { + outL <<= 1; + outL |= (inR >>> (j + i)) & 1; + outL <<= 1; + outL |= (inL >>> (j + i)) & 1; + } + } + for (var i = 4; i < 8; i++) { + for (var j = 24; j >= 0; j -= 8) { + outR <<= 1; + outR |= (inR >>> (j + i)) & 1; + outR <<= 1; + outR |= (inL >>> (j + i)) & 1; + } + } + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +exports.pc1 = function pc1(inL, inR, out, off) { + var outL = 0; + var outR = 0; + + // 7, 15, 23, 31, 39, 47, 55, 63 + // 6, 14, 22, 30, 39, 47, 55, 63 + // 5, 13, 21, 29, 39, 47, 55, 63 + // 4, 12, 20, 28 + for (var i = 7; i >= 5; i--) { + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inR >> (j + i)) & 1; + } + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inL >> (j + i)) & 1; + } + } + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inR >> (j + i)) & 1; + } + + // 1, 9, 17, 25, 33, 41, 49, 57 + // 2, 10, 18, 26, 34, 42, 50, 58 + // 3, 11, 19, 27, 35, 43, 51, 59 + // 36, 44, 52, 60 + for (var i = 1; i <= 3; i++) { + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= (inR >> (j + i)) & 1; + } + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= (inL >> (j + i)) & 1; + } + } + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= (inL >> (j + i)) & 1; + } + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +exports.r28shl = function r28shl(num, shift) { + return ((num << shift) & 0xfffffff) | (num >>> (28 - shift)); +}; + +var pc2table = [ + // inL => outL + 14, 11, 17, 4, 27, 23, 25, 0, + 13, 22, 7, 18, 5, 9, 16, 24, + 2, 20, 12, 21, 1, 8, 15, 26, + + // inR => outR + 15, 4, 25, 19, 9, 1, 26, 16, + 5, 11, 23, 8, 12, 7, 17, 0, + 22, 3, 10, 14, 6, 20, 27, 24 +]; + +exports.pc2 = function pc2(inL, inR, out, off) { + var outL = 0; + var outR = 0; + + var len = pc2table.length >>> 1; + for (var i = 0; i < len; i++) { + outL <<= 1; + outL |= (inL >>> pc2table[i]) & 0x1; + } + for (var i = len; i < pc2table.length; i++) { + outR <<= 1; + outR |= (inR >>> pc2table[i]) & 0x1; + } + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +exports.expand = function expand(r, out, off) { + var outL = 0; + var outR = 0; + + outL = ((r & 1) << 5) | (r >>> 27); + for (var i = 23; i >= 15; i -= 4) { + outL <<= 6; + outL |= (r >>> i) & 0x3f; + } + for (var i = 11; i >= 3; i -= 4) { + outR |= (r >>> i) & 0x3f; + outR <<= 6; + } + outR |= ((r & 0x1f) << 1) | (r >>> 31); + + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; + +var sTable = [ + 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1, + 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8, + 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7, + 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13, + + 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14, + 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5, + 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2, + 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9, + + 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10, + 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1, + 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7, + 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12, + + 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3, + 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9, + 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8, + 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14, + + 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1, + 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6, + 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13, + 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3, + + 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5, + 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8, + 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10, + 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13, + + 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10, + 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6, + 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7, + 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12, + + 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4, + 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2, + 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13, + 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11 +]; + +exports.substitute = function substitute(inL, inR) { + var out = 0; + for (var i = 0; i < 4; i++) { + var b = (inL >>> (18 - i * 6)) & 0x3f; + var sb = sTable[i * 0x40 + b]; + + out <<= 4; + out |= sb; + } + for (var i = 0; i < 4; i++) { + var b = (inR >>> (18 - i * 6)) & 0x3f; + var sb = sTable[4 * 0x40 + i * 0x40 + b]; + + out <<= 4; + out |= sb; + } + return out >>> 0; +}; + +var permuteTable = [ + 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22, + 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7 +]; + +exports.permute = function permute(num) { + var out = 0; + for (var i = 0; i < permuteTable.length; i++) { + out <<= 1; + out |= (num >>> permuteTable[i]) & 0x1; + } + return out >>> 0; +}; + +exports.padSplit = function padSplit(num, size, group) { + var str = num.toString(2); + while (str.length < size) + str = '0' + str; + + var out = []; + for (var i = 0; i < size; i += group) + out.push(str.slice(i, i + group)); + return out.join(' '); +}; + +},{}],539:[function(require,module,exports){ +(function (Buffer){ +var generatePrime = require('./lib/generatePrime') +var primes = require('./lib/primes.json') + +var DH = require('./lib/dh') + +function getDiffieHellman (mod) { + var prime = new Buffer(primes[mod].prime, 'hex') + var gen = new Buffer(primes[mod].gen, 'hex') + + return new DH(prime, gen) +} + +var ENCODINGS = { + 'binary': true, 'hex': true, 'base64': true +} + +function createDiffieHellman (prime, enc, generator, genc) { + if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) { + return createDiffieHellman(prime, 'binary', enc, generator) + } + + enc = enc || 'binary' + genc = genc || 'binary' + generator = generator || new Buffer([2]) + + if (!Buffer.isBuffer(generator)) { + generator = new Buffer(generator, genc) + } + + if (typeof prime === 'number') { + return new DH(generatePrime(prime, generator), generator, true) + } + + if (!Buffer.isBuffer(prime)) { + prime = new Buffer(prime, enc) + } + + return new DH(prime, generator, true) +} + +exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman +exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman + +}).call(this,require("buffer").Buffer) +},{"./lib/dh":540,"./lib/generatePrime":541,"./lib/primes.json":542,"buffer":113}],540:[function(require,module,exports){ +(function (Buffer){ +var BN = require('bn.js'); +var MillerRabin = require('miller-rabin'); +var millerRabin = new MillerRabin(); +var TWENTYFOUR = new BN(24); +var ELEVEN = new BN(11); +var TEN = new BN(10); +var THREE = new BN(3); +var SEVEN = new BN(7); +var primes = require('./generatePrime'); +var randomBytes = require('randombytes'); +module.exports = DH; + +function setPublicKey(pub, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(pub)) { + pub = new Buffer(pub, enc); + } + this._pub = new BN(pub); + return this; +} + +function setPrivateKey(priv, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(priv)) { + priv = new Buffer(priv, enc); + } + this._priv = new BN(priv); + return this; +} + +var primeCache = {}; +function checkPrime(prime, generator) { + var gen = generator.toString('hex'); + var hex = [gen, prime.toString(16)].join('_'); + if (hex in primeCache) { + return primeCache[hex]; + } + var error = 0; + + if (prime.isEven() || + !primes.simpleSieve || + !primes.fermatTest(prime) || + !millerRabin.test(prime)) { + //not a prime so +1 + error += 1; + + if (gen === '02' || gen === '05') { + // we'd be able to check the generator + // it would fail so +8 + error += 8; + } else { + //we wouldn't be able to test the generator + // so +4 + error += 4; + } + primeCache[hex] = error; + return error; + } + if (!millerRabin.test(prime.shrn(1))) { + //not a safe prime + error += 2; + } + var rem; + switch (gen) { + case '02': + if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) { + // unsuidable generator + error += 8; + } + break; + case '05': + rem = prime.mod(TEN); + if (rem.cmp(THREE) && rem.cmp(SEVEN)) { + // prime mod 10 needs to equal 3 or 7 + error += 8; + } + break; + default: + error += 4; + } + primeCache[hex] = error; + return error; +} + +function DH(prime, generator, malleable) { + this.setGenerator(generator); + this.__prime = new BN(prime); + this._prime = BN.mont(this.__prime); + this._primeLen = prime.length; + this._pub = undefined; + this._priv = undefined; + this._primeCode = undefined; + if (malleable) { + this.setPublicKey = setPublicKey; + this.setPrivateKey = setPrivateKey; + } else { + this._primeCode = 8; + } +} +Object.defineProperty(DH.prototype, 'verifyError', { + enumerable: true, + get: function () { + if (typeof this._primeCode !== 'number') { + this._primeCode = checkPrime(this.__prime, this.__gen); + } + return this._primeCode; + } +}); +DH.prototype.generateKeys = function () { + if (!this._priv) { + this._priv = new BN(randomBytes(this._primeLen)); + } + this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed(); + return this.getPublicKey(); +}; + +DH.prototype.computeSecret = function (other) { + other = new BN(other); + other = other.toRed(this._prime); + var secret = other.redPow(this._priv).fromRed(); + var out = new Buffer(secret.toArray()); + var prime = this.getPrime(); + if (out.length < prime.length) { + var front = new Buffer(prime.length - out.length); + front.fill(0); + out = Buffer.concat([front, out]); + } + return out; +}; + +DH.prototype.getPublicKey = function getPublicKey(enc) { + return formatReturnValue(this._pub, enc); +}; + +DH.prototype.getPrivateKey = function getPrivateKey(enc) { + return formatReturnValue(this._priv, enc); +}; + +DH.prototype.getPrime = function (enc) { + return formatReturnValue(this.__prime, enc); +}; + +DH.prototype.getGenerator = function (enc) { + return formatReturnValue(this._gen, enc); +}; + +DH.prototype.setGenerator = function (gen, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(gen)) { + gen = new Buffer(gen, enc); + } + this.__gen = gen; + this._gen = new BN(gen); + return this; +}; + +function formatReturnValue(bn, enc) { + var buf = new Buffer(bn.toArray()); + if (!enc) { + return buf; + } else { + return buf.toString(enc); + } +} + +}).call(this,require("buffer").Buffer) +},{"./generatePrime":541,"bn.js":66,"buffer":113,"miller-rabin":956,"randombytes":1036}],541:[function(require,module,exports){ +var randomBytes = require('randombytes'); +module.exports = findPrime; +findPrime.simpleSieve = simpleSieve; +findPrime.fermatTest = fermatTest; +var BN = require('bn.js'); +var TWENTYFOUR = new BN(24); +var MillerRabin = require('miller-rabin'); +var millerRabin = new MillerRabin(); +var ONE = new BN(1); +var TWO = new BN(2); +var FIVE = new BN(5); +var SIXTEEN = new BN(16); +var EIGHT = new BN(8); +var TEN = new BN(10); +var THREE = new BN(3); +var SEVEN = new BN(7); +var ELEVEN = new BN(11); +var FOUR = new BN(4); +var TWELVE = new BN(12); +var primes = null; + +function _getPrimes() { + if (primes !== null) + return primes; + + var limit = 0x100000; + var res = []; + res[0] = 2; + for (var i = 1, k = 3; k < limit; k += 2) { + var sqrt = Math.ceil(Math.sqrt(k)); + for (var j = 0; j < i && res[j] <= sqrt; j++) + if (k % res[j] === 0) + break; + + if (i !== j && res[j] <= sqrt) + continue; + + res[i++] = k; + } + primes = res; + return res; +} + +function simpleSieve(p) { + var primes = _getPrimes(); + + for (var i = 0; i < primes.length; i++) + if (p.modn(primes[i]) === 0) { + if (p.cmpn(primes[i]) === 0) { + return true; + } else { + return false; + } + } + + return true; +} + +function fermatTest(p) { + var red = BN.mont(p); + return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0; +} + +function findPrime(bits, gen) { + if (bits < 16) { + // this is what openssl does + if (gen === 2 || gen === 5) { + return new BN([0x8c, 0x7b]); + } else { + return new BN([0x8c, 0x27]); + } + } + gen = new BN(gen); + + var num, n2; + + while (true) { + num = new BN(randomBytes(Math.ceil(bits / 8))); + while (num.bitLength() > bits) { + num.ishrn(1); + } + if (num.isEven()) { + num.iadd(ONE); + } + if (!num.testn(1)) { + num.iadd(TWO); + } + if (!gen.cmp(TWO)) { + while (num.mod(TWENTYFOUR).cmp(ELEVEN)) { + num.iadd(FOUR); + } + } else if (!gen.cmp(FIVE)) { + while (num.mod(TEN).cmp(THREE)) { + num.iadd(FOUR); + } + } + n2 = num.shrn(1); + if (simpleSieve(n2) && simpleSieve(num) && + fermatTest(n2) && fermatTest(num) && + millerRabin.test(n2) && millerRabin.test(num)) { + return num; + } + } + +} + +},{"bn.js":66,"miller-rabin":956,"randombytes":1036}],542:[function(require,module,exports){ +module.exports={ + "modp1": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff" + }, + "modp2": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff" + }, + "modp5": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff" + }, + "modp14": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff" + }, + "modp15": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff" + }, + "modp16": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff" + }, + "modp17": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff" + }, + "modp18": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff" + } +} +},{}],543:[function(require,module,exports){ + +/** + * Module dependencies. + */ + +var extend = require('extend'); +var encode = require('ent/encode'); +var CustomEvent = require('custom-event'); +var voidElements = require('void-elements'); + +/** + * Module exports. + */ + +exports = module.exports = serialize; +exports.serializeElement = serializeElement; +exports.serializeAttribute = serializeAttribute; +exports.serializeText = serializeText; +exports.serializeComment = serializeComment; +exports.serializeDocument = serializeDocument; +exports.serializeDoctype = serializeDoctype; +exports.serializeDocumentFragment = serializeDocumentFragment; +exports.serializeNodeList = serializeNodeList; + +/** + * Serializes any DOM node. Returns a string. + * + * @param {Node} node - DOM Node to serialize + * @param {String} [context] - optional arbitrary "context" string to use (useful for event listeners) + * @param {Function} [fn] - optional callback function to use in the "serialize" event for this call + * @param {EventTarget} [eventTarget] - optional EventTarget instance to emit the "serialize" event on (defaults to `node`) + * return {String} + * @public + */ + +function serialize (node, context, fn, eventTarget) { + if (!node) return ''; + if ('function' === typeof context) { + fn = context; + context = null; + } + if (!context) context = null; + + var rtn; + var nodeType = node.nodeType; + + if (!nodeType && 'number' === typeof node.length) { + // assume it's a NodeList or Array of Nodes + rtn = exports.serializeNodeList(node, context, fn); + } else { + + if ('function' === typeof fn) { + // one-time "serialize" event listener + node.addEventListener('serialize', fn, false); + } + + // emit a custom "serialize" event on `node`, in case there + // are event listeners for custom serialization of this node + var e = new CustomEvent('serialize', { + bubbles: true, + cancelable: true, + detail: { + serialize: null, + context: context + } + }); + + e.serializeTarget = node; + + var target = eventTarget || node; + var cancelled = !target.dispatchEvent(e); + + // `e.detail.serialize` can be set to a: + // String - returned directly + // Node - goes through serializer logic instead of `node` + // Anything else - get Stringified first, and then returned directly + var s = e.detail.serialize; + if (s != null) { + if ('string' === typeof s) { + rtn = s; + } else if ('number' === typeof s.nodeType) { + // make it go through the serialization logic + rtn = serialize(s, context, null, target); + } else { + rtn = String(s); + } + } else if (!cancelled) { + // default serialization logic + switch (nodeType) { + case 1 /* element */: + rtn = exports.serializeElement(node, context, eventTarget); + break; + case 2 /* attribute */: + rtn = exports.serializeAttribute(node); + break; + case 3 /* text */: + rtn = exports.serializeText(node); + break; + case 8 /* comment */: + rtn = exports.serializeComment(node); + break; + case 9 /* document */: + rtn = exports.serializeDocument(node, context, eventTarget); + break; + case 10 /* doctype */: + rtn = exports.serializeDoctype(node); + break; + case 11 /* document fragment */: + rtn = exports.serializeDocumentFragment(node, context, eventTarget); + break; + } + } + + if ('function' === typeof fn) { + node.removeEventListener('serialize', fn, false); + } + } + + return rtn || ''; +} + +/** + * Serialize an Attribute node. + */ + +function serializeAttribute (node, opts) { + return node.name + '="' + encode(node.value, extend({ + named: true + }, opts)) + '"'; +} + +/** + * Serialize a DOM element. + */ + +function serializeElement (node, context, eventTarget) { + var c, i, l; + var name = node.nodeName.toLowerCase(); + + // opening tag + var r = '<' + name; + + // attributes + for (i = 0, c = node.attributes, l = c.length; i < l; i++) { + r += ' ' + exports.serializeAttribute(c[i]); + } + + r += '>'; + + // child nodes + r += exports.serializeNodeList(node.childNodes, context, null, eventTarget); + + // closing tag, only for non-void elements + if (!voidElements[name]) { + r += ''; + } + + return r; +} + +/** + * Serialize a text node. + */ + +function serializeText (node, opts) { + return encode(node.nodeValue, extend({ + named: true, + special: { '<': true, '>': true, '&': true } + }, opts)); +} + +/** + * Serialize a comment node. + */ + +function serializeComment (node) { + return ''; +} + +/** + * Serialize a Document node. + */ + +function serializeDocument (node, context, eventTarget) { + return exports.serializeNodeList(node.childNodes, context, null, eventTarget); +} + +/** + * Serialize a DOCTYPE node. + * See: http://stackoverflow.com/a/10162353 + */ + +function serializeDoctype (node) { + var r = ''; + return r; +} + +/** + * Serialize a DocumentFragment instance. + */ + +function serializeDocumentFragment (node, context, eventTarget) { + return exports.serializeNodeList(node.childNodes, context, null, eventTarget); +} + +/** + * Serialize a NodeList/Array of nodes. + */ + +function serializeNodeList (list, context, fn, eventTarget) { + var r = ''; + for (var i = 0, l = list.length; i < l; i++) { + r += serialize(list[i], context, fn, eventTarget); + } + return r; +} + +},{"custom-event":524,"ent/encode":564,"extend":710,"void-elements":1441}],544:[function(require,module,exports){ +var noCase = require('no-case') + +/** + * Dot case a string. + * + * @param {string} value + * @param {string} [locale] + * @return {string} + */ +module.exports = function (value, locale) { + return noCase(value, locale, '.') +} + +},{"no-case":967}],545:[function(require,module,exports){ +var crypto = require("crypto"); +var BigInteger = require("jsbn").BigInteger; +var ECPointFp = require("./lib/ec.js").ECPointFp; +var Buffer = require("safer-buffer").Buffer; +exports.ECCurves = require("./lib/sec.js"); + +// zero prepad +function unstupid(hex,len) +{ + return (hex.length >= len) ? hex : unstupid("0"+hex,len); +} + +exports.ECKey = function(curve, key, isPublic) +{ + var priv; + var c = curve(); + var n = c.getN(); + var bytes = Math.floor(n.bitLength()/8); + + if(key) + { + if(isPublic) + { + var curve = c.getCurve(); +// var x = key.slice(1,bytes+1); // skip the 04 for uncompressed format +// var y = key.slice(bytes+1); +// this.P = new ECPointFp(curve, +// curve.fromBigInteger(new BigInteger(x.toString("hex"), 16)), +// curve.fromBigInteger(new BigInteger(y.toString("hex"), 16))); + this.P = curve.decodePointHex(key.toString("hex")); + }else{ + if(key.length != bytes) return false; + priv = new BigInteger(key.toString("hex"), 16); + } + }else{ + var n1 = n.subtract(BigInteger.ONE); + var r = new BigInteger(crypto.randomBytes(n.bitLength())); + priv = r.mod(n1).add(BigInteger.ONE); + this.P = c.getG().multiply(priv); + } + if(this.P) + { +// var pubhex = unstupid(this.P.getX().toBigInteger().toString(16),bytes*2)+unstupid(this.P.getY().toBigInteger().toString(16),bytes*2); +// this.PublicKey = Buffer.from("04"+pubhex,"hex"); + this.PublicKey = Buffer.from(c.getCurve().encodeCompressedPointHex(this.P),"hex"); + } + if(priv) + { + this.PrivateKey = Buffer.from(unstupid(priv.toString(16),bytes*2),"hex"); + this.deriveSharedSecret = function(key) + { + if(!key || !key.P) return false; + var S = key.P.multiply(priv); + return Buffer.from(unstupid(S.getX().toBigInteger().toString(16),bytes*2),"hex"); + } + } +} + + +},{"./lib/ec.js":546,"./lib/sec.js":547,"crypto":470,"jsbn":863,"safer-buffer":1335}],546:[function(require,module,exports){ +// Basic Javascript Elliptic Curve implementation +// Ported loosely from BouncyCastle's Java EC code +// Only Fp curves implemented for now + +// Requires jsbn.js and jsbn2.js +var BigInteger = require('jsbn').BigInteger +var Barrett = BigInteger.prototype.Barrett + +// ---------------- +// ECFieldElementFp + +// constructor +function ECFieldElementFp(q,x) { + this.x = x; + // TODO if(x.compareTo(q) >= 0) error + this.q = q; +} + +function feFpEquals(other) { + if(other == this) return true; + return (this.q.equals(other.q) && this.x.equals(other.x)); +} + +function feFpToBigInteger() { + return this.x; +} + +function feFpNegate() { + return new ECFieldElementFp(this.q, this.x.negate().mod(this.q)); +} + +function feFpAdd(b) { + return new ECFieldElementFp(this.q, this.x.add(b.toBigInteger()).mod(this.q)); +} + +function feFpSubtract(b) { + return new ECFieldElementFp(this.q, this.x.subtract(b.toBigInteger()).mod(this.q)); +} + +function feFpMultiply(b) { + return new ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger()).mod(this.q)); +} + +function feFpSquare() { + return new ECFieldElementFp(this.q, this.x.square().mod(this.q)); +} + +function feFpDivide(b) { + return new ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger().modInverse(this.q)).mod(this.q)); +} + +ECFieldElementFp.prototype.equals = feFpEquals; +ECFieldElementFp.prototype.toBigInteger = feFpToBigInteger; +ECFieldElementFp.prototype.negate = feFpNegate; +ECFieldElementFp.prototype.add = feFpAdd; +ECFieldElementFp.prototype.subtract = feFpSubtract; +ECFieldElementFp.prototype.multiply = feFpMultiply; +ECFieldElementFp.prototype.square = feFpSquare; +ECFieldElementFp.prototype.divide = feFpDivide; + +// ---------------- +// ECPointFp + +// constructor +function ECPointFp(curve,x,y,z) { + this.curve = curve; + this.x = x; + this.y = y; + // Projective coordinates: either zinv == null or z * zinv == 1 + // z and zinv are just BigIntegers, not fieldElements + if(z == null) { + this.z = BigInteger.ONE; + } + else { + this.z = z; + } + this.zinv = null; + //TODO: compression flag +} + +function pointFpGetX() { + if(this.zinv == null) { + this.zinv = this.z.modInverse(this.curve.q); + } + var r = this.x.toBigInteger().multiply(this.zinv); + this.curve.reduce(r); + return this.curve.fromBigInteger(r); +} + +function pointFpGetY() { + if(this.zinv == null) { + this.zinv = this.z.modInverse(this.curve.q); + } + var r = this.y.toBigInteger().multiply(this.zinv); + this.curve.reduce(r); + return this.curve.fromBigInteger(r); +} + +function pointFpEquals(other) { + if(other == this) return true; + if(this.isInfinity()) return other.isInfinity(); + if(other.isInfinity()) return this.isInfinity(); + var u, v; + // u = Y2 * Z1 - Y1 * Z2 + u = other.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(other.z)).mod(this.curve.q); + if(!u.equals(BigInteger.ZERO)) return false; + // v = X2 * Z1 - X1 * Z2 + v = other.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(other.z)).mod(this.curve.q); + return v.equals(BigInteger.ZERO); +} + +function pointFpIsInfinity() { + if((this.x == null) && (this.y == null)) return true; + return this.z.equals(BigInteger.ZERO) && !this.y.toBigInteger().equals(BigInteger.ZERO); +} + +function pointFpNegate() { + return new ECPointFp(this.curve, this.x, this.y.negate(), this.z); +} + +function pointFpAdd(b) { + if(this.isInfinity()) return b; + if(b.isInfinity()) return this; + + // u = Y2 * Z1 - Y1 * Z2 + var u = b.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(b.z)).mod(this.curve.q); + // v = X2 * Z1 - X1 * Z2 + var v = b.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(b.z)).mod(this.curve.q); + + if(BigInteger.ZERO.equals(v)) { + if(BigInteger.ZERO.equals(u)) { + return this.twice(); // this == b, so double + } + return this.curve.getInfinity(); // this = -b, so infinity + } + + var THREE = new BigInteger("3"); + var x1 = this.x.toBigInteger(); + var y1 = this.y.toBigInteger(); + var x2 = b.x.toBigInteger(); + var y2 = b.y.toBigInteger(); + + var v2 = v.square(); + var v3 = v2.multiply(v); + var x1v2 = x1.multiply(v2); + var zu2 = u.square().multiply(this.z); + + // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3) + var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.q); + // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3 + var y3 = x1v2.multiply(THREE).multiply(u).subtract(y1.multiply(v3)).subtract(zu2.multiply(u)).multiply(b.z).add(u.multiply(v3)).mod(this.curve.q); + // z3 = v^3 * z1 * z2 + var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.q); + + return new ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3); +} + +function pointFpTwice() { + if(this.isInfinity()) return this; + if(this.y.toBigInteger().signum() == 0) return this.curve.getInfinity(); + + // TODO: optimized handling of constants + var THREE = new BigInteger("3"); + var x1 = this.x.toBigInteger(); + var y1 = this.y.toBigInteger(); + + var y1z1 = y1.multiply(this.z); + var y1sqz1 = y1z1.multiply(y1).mod(this.curve.q); + var a = this.curve.a.toBigInteger(); + + // w = 3 * x1^2 + a * z1^2 + var w = x1.square().multiply(THREE); + if(!BigInteger.ZERO.equals(a)) { + w = w.add(this.z.square().multiply(a)); + } + w = w.mod(this.curve.q); + //this.curve.reduce(w); + // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1) + var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.q); + // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3 + var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.square().multiply(w)).mod(this.curve.q); + // z3 = 8 * (y1 * z1)^3 + var z3 = y1z1.square().multiply(y1z1).shiftLeft(3).mod(this.curve.q); + + return new ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3); +} + +// Simple NAF (Non-Adjacent Form) multiplication algorithm +// TODO: modularize the multiplication algorithm +function pointFpMultiply(k) { + if(this.isInfinity()) return this; + if(k.signum() == 0) return this.curve.getInfinity(); + + var e = k; + var h = e.multiply(new BigInteger("3")); + + var neg = this.negate(); + var R = this; + + var i; + for(i = h.bitLength() - 2; i > 0; --i) { + R = R.twice(); + + var hBit = h.testBit(i); + var eBit = e.testBit(i); + + if (hBit != eBit) { + R = R.add(hBit ? this : neg); + } + } + + return R; +} + +// Compute this*j + x*k (simultaneous multiplication) +function pointFpMultiplyTwo(j,x,k) { + var i; + if(j.bitLength() > k.bitLength()) + i = j.bitLength() - 1; + else + i = k.bitLength() - 1; + + var R = this.curve.getInfinity(); + var both = this.add(x); + while(i >= 0) { + R = R.twice(); + if(j.testBit(i)) { + if(k.testBit(i)) { + R = R.add(both); + } + else { + R = R.add(this); + } + } + else { + if(k.testBit(i)) { + R = R.add(x); + } + } + --i; + } + + return R; +} + +ECPointFp.prototype.getX = pointFpGetX; +ECPointFp.prototype.getY = pointFpGetY; +ECPointFp.prototype.equals = pointFpEquals; +ECPointFp.prototype.isInfinity = pointFpIsInfinity; +ECPointFp.prototype.negate = pointFpNegate; +ECPointFp.prototype.add = pointFpAdd; +ECPointFp.prototype.twice = pointFpTwice; +ECPointFp.prototype.multiply = pointFpMultiply; +ECPointFp.prototype.multiplyTwo = pointFpMultiplyTwo; + +// ---------------- +// ECCurveFp + +// constructor +function ECCurveFp(q,a,b) { + this.q = q; + this.a = this.fromBigInteger(a); + this.b = this.fromBigInteger(b); + this.infinity = new ECPointFp(this, null, null); + this.reducer = new Barrett(this.q); +} + +function curveFpGetQ() { + return this.q; +} + +function curveFpGetA() { + return this.a; +} + +function curveFpGetB() { + return this.b; +} + +function curveFpEquals(other) { + if(other == this) return true; + return(this.q.equals(other.q) && this.a.equals(other.a) && this.b.equals(other.b)); +} + +function curveFpGetInfinity() { + return this.infinity; +} + +function curveFpFromBigInteger(x) { + return new ECFieldElementFp(this.q, x); +} + +function curveReduce(x) { + this.reducer.reduce(x); +} + +// for now, work with hex strings because they're easier in JS +function curveFpDecodePointHex(s) { + switch(parseInt(s.substr(0,2), 16)) { // first byte + case 0: + return this.infinity; + case 2: + case 3: + // point compression not supported yet + return null; + case 4: + case 6: + case 7: + var len = (s.length - 2) / 2; + var xHex = s.substr(2, len); + var yHex = s.substr(len+2, len); + + return new ECPointFp(this, + this.fromBigInteger(new BigInteger(xHex, 16)), + this.fromBigInteger(new BigInteger(yHex, 16))); + + default: // unsupported + return null; + } +} + +function curveFpEncodePointHex(p) { + if (p.isInfinity()) return "00"; + var xHex = p.getX().toBigInteger().toString(16); + var yHex = p.getY().toBigInteger().toString(16); + var oLen = this.getQ().toString(16).length; + if ((oLen % 2) != 0) oLen++; + while (xHex.length < oLen) { + xHex = "0" + xHex; + } + while (yHex.length < oLen) { + yHex = "0" + yHex; + } + return "04" + xHex + yHex; +} + +ECCurveFp.prototype.getQ = curveFpGetQ; +ECCurveFp.prototype.getA = curveFpGetA; +ECCurveFp.prototype.getB = curveFpGetB; +ECCurveFp.prototype.equals = curveFpEquals; +ECCurveFp.prototype.getInfinity = curveFpGetInfinity; +ECCurveFp.prototype.fromBigInteger = curveFpFromBigInteger; +ECCurveFp.prototype.reduce = curveReduce; +//ECCurveFp.prototype.decodePointHex = curveFpDecodePointHex; +ECCurveFp.prototype.encodePointHex = curveFpEncodePointHex; + +// from: https://github.com/kaielvin/jsbn-ec-point-compression +ECCurveFp.prototype.decodePointHex = function(s) +{ + var yIsEven; + switch(parseInt(s.substr(0,2), 16)) { // first byte + case 0: + return this.infinity; + case 2: + yIsEven = false; + case 3: + if(yIsEven == undefined) yIsEven = true; + var len = s.length - 2; + var xHex = s.substr(2, len); + var x = this.fromBigInteger(new BigInteger(xHex,16)); + var alpha = x.multiply(x.square().add(this.getA())).add(this.getB()); + var beta = alpha.sqrt(); + + if (beta == null) throw "Invalid point compression"; + + var betaValue = beta.toBigInteger(); + if (betaValue.testBit(0) != yIsEven) + { + // Use the other root + beta = this.fromBigInteger(this.getQ().subtract(betaValue)); + } + return new ECPointFp(this,x,beta); + case 4: + case 6: + case 7: + var len = (s.length - 2) / 2; + var xHex = s.substr(2, len); + var yHex = s.substr(len+2, len); + + return new ECPointFp(this, + this.fromBigInteger(new BigInteger(xHex, 16)), + this.fromBigInteger(new BigInteger(yHex, 16))); + + default: // unsupported + return null; + } +} +ECCurveFp.prototype.encodeCompressedPointHex = function(p) +{ + if (p.isInfinity()) return "00"; + var xHex = p.getX().toBigInteger().toString(16); + var oLen = this.getQ().toString(16).length; + if ((oLen % 2) != 0) oLen++; + while (xHex.length < oLen) + xHex = "0" + xHex; + var yPrefix; + if(p.getY().toBigInteger().isEven()) yPrefix = "02"; + else yPrefix = "03"; + + return yPrefix + xHex; +} + + +ECFieldElementFp.prototype.getR = function() +{ + if(this.r != undefined) return this.r; + + this.r = null; + var bitLength = this.q.bitLength(); + if (bitLength > 128) + { + var firstWord = this.q.shiftRight(bitLength - 64); + if (firstWord.intValue() == -1) + { + this.r = BigInteger.ONE.shiftLeft(bitLength).subtract(this.q); + } + } + return this.r; +} +ECFieldElementFp.prototype.modMult = function(x1,x2) +{ + return this.modReduce(x1.multiply(x2)); +} +ECFieldElementFp.prototype.modReduce = function(x) +{ + if (this.getR() != null) + { + var qLen = q.bitLength(); + while (x.bitLength() > (qLen + 1)) + { + var u = x.shiftRight(qLen); + var v = x.subtract(u.shiftLeft(qLen)); + if (!this.getR().equals(BigInteger.ONE)) + { + u = u.multiply(this.getR()); + } + x = u.add(v); + } + while (x.compareTo(q) >= 0) + { + x = x.subtract(q); + } + } + else + { + x = x.mod(q); + } + return x; +} +ECFieldElementFp.prototype.sqrt = function() +{ + if (!this.q.testBit(0)) throw "unsupported"; + + // p mod 4 == 3 + if (this.q.testBit(1)) + { + var z = new ECFieldElementFp(this.q,this.x.modPow(this.q.shiftRight(2).add(BigInteger.ONE),this.q)); + return z.square().equals(this) ? z : null; + } + + // p mod 4 == 1 + var qMinusOne = this.q.subtract(BigInteger.ONE); + + var legendreExponent = qMinusOne.shiftRight(1); + if (!(this.x.modPow(legendreExponent, this.q).equals(BigInteger.ONE))) + { + return null; + } + + var u = qMinusOne.shiftRight(2); + var k = u.shiftLeft(1).add(BigInteger.ONE); + + var Q = this.x; + var fourQ = modDouble(modDouble(Q)); + + var U, V; + do + { + var P; + do + { + P = new BigInteger(this.q.bitLength(), new SecureRandom()); + } + while (P.compareTo(this.q) >= 0 + || !(P.multiply(P).subtract(fourQ).modPow(legendreExponent, this.q).equals(qMinusOne))); + + var result = this.lucasSequence(P, Q, k); + U = result[0]; + V = result[1]; + + if (this.modMult(V, V).equals(fourQ)) + { + // Integer division by 2, mod q + if (V.testBit(0)) + { + V = V.add(q); + } + + V = V.shiftRight(1); + + return new ECFieldElementFp(q,V); + } + } + while (U.equals(BigInteger.ONE) || U.equals(qMinusOne)); + + return null; +} +ECFieldElementFp.prototype.lucasSequence = function(P,Q,k) +{ + var n = k.bitLength(); + var s = k.getLowestSetBit(); + + var Uh = BigInteger.ONE; + var Vl = BigInteger.TWO; + var Vh = P; + var Ql = BigInteger.ONE; + var Qh = BigInteger.ONE; + + for (var j = n - 1; j >= s + 1; --j) + { + Ql = this.modMult(Ql, Qh); + + if (k.testBit(j)) + { + Qh = this.modMult(Ql, Q); + Uh = this.modMult(Uh, Vh); + Vl = this.modReduce(Vh.multiply(Vl).subtract(P.multiply(Ql))); + Vh = this.modReduce(Vh.multiply(Vh).subtract(Qh.shiftLeft(1))); + } + else + { + Qh = Ql; + Uh = this.modReduce(Uh.multiply(Vl).subtract(Ql)); + Vh = this.modReduce(Vh.multiply(Vl).subtract(P.multiply(Ql))); + Vl = this.modReduce(Vl.multiply(Vl).subtract(Ql.shiftLeft(1))); + } + } + + Ql = this.modMult(Ql, Qh); + Qh = this.modMult(Ql, Q); + Uh = this.modReduce(Uh.multiply(Vl).subtract(Ql)); + Vl = this.modReduce(Vh.multiply(Vl).subtract(P.multiply(Ql))); + Ql = this.modMult(Ql, Qh); + + for (var j = 1; j <= s; ++j) + { + Uh = this.modMult(Uh, Vl); + Vl = this.modReduce(Vl.multiply(Vl).subtract(Ql.shiftLeft(1))); + Ql = this.modMult(Ql, Ql); + } + + return [ Uh, Vl ]; +} + +var exports = { + ECCurveFp: ECCurveFp, + ECPointFp: ECPointFp, + ECFieldElementFp: ECFieldElementFp +} + +module.exports = exports + +},{"jsbn":863}],547:[function(require,module,exports){ +// Named EC curves + +// Requires ec.js, jsbn.js, and jsbn2.js +var BigInteger = require('jsbn').BigInteger +var ECCurveFp = require('./ec.js').ECCurveFp + + +// ---------------- +// X9ECParameters + +// constructor +function X9ECParameters(curve,g,n,h) { + this.curve = curve; + this.g = g; + this.n = n; + this.h = h; +} + +function x9getCurve() { + return this.curve; +} + +function x9getG() { + return this.g; +} + +function x9getN() { + return this.n; +} + +function x9getH() { + return this.h; +} + +X9ECParameters.prototype.getCurve = x9getCurve; +X9ECParameters.prototype.getG = x9getG; +X9ECParameters.prototype.getN = x9getN; +X9ECParameters.prototype.getH = x9getH; + +// ---------------- +// SECNamedCurves + +function fromHex(s) { return new BigInteger(s, 16); } + +function secp128r1() { + // p = 2^128 - 2^97 - 1 + var p = fromHex("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF"); + var a = fromHex("FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC"); + var b = fromHex("E87579C11079F43DD824993C2CEE5ED3"); + //byte[] S = Hex.decode("000E0D4D696E6768756151750CC03A4473D03679"); + var n = fromHex("FFFFFFFE0000000075A30D1B9038A115"); + var h = BigInteger.ONE; + var curve = new ECCurveFp(p, a, b); + var G = curve.decodePointHex("04" + + "161FF7528B899B2D0C28607CA52C5B86" + + "CF5AC8395BAFEB13C02DA292DDED7A83"); + return new X9ECParameters(curve, G, n, h); +} + +function secp160k1() { + // p = 2^160 - 2^32 - 2^14 - 2^12 - 2^9 - 2^8 - 2^7 - 2^3 - 2^2 - 1 + var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73"); + var a = BigInteger.ZERO; + var b = fromHex("7"); + //byte[] S = null; + var n = fromHex("0100000000000000000001B8FA16DFAB9ACA16B6B3"); + var h = BigInteger.ONE; + var curve = new ECCurveFp(p, a, b); + var G = curve.decodePointHex("04" + + "3B4C382CE37AA192A4019E763036F4F5DD4D7EBB" + + "938CF935318FDCED6BC28286531733C3F03C4FEE"); + return new X9ECParameters(curve, G, n, h); +} + +function secp160r1() { + // p = 2^160 - 2^31 - 1 + var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF"); + var a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC"); + var b = fromHex("1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45"); + //byte[] S = Hex.decode("1053CDE42C14D696E67687561517533BF3F83345"); + var n = fromHex("0100000000000000000001F4C8F927AED3CA752257"); + var h = BigInteger.ONE; + var curve = new ECCurveFp(p, a, b); + var G = curve.decodePointHex("04" + + "4A96B5688EF573284664698968C38BB913CBFC82" + + "23A628553168947D59DCC912042351377AC5FB32"); + return new X9ECParameters(curve, G, n, h); +} + +function secp192k1() { + // p = 2^192 - 2^32 - 2^12 - 2^8 - 2^7 - 2^6 - 2^3 - 1 + var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37"); + var a = BigInteger.ZERO; + var b = fromHex("3"); + //byte[] S = null; + var n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D"); + var h = BigInteger.ONE; + var curve = new ECCurveFp(p, a, b); + var G = curve.decodePointHex("04" + + "DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D" + + "9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D"); + return new X9ECParameters(curve, G, n, h); +} + +function secp192r1() { + // p = 2^192 - 2^64 - 1 + var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF"); + var a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC"); + var b = fromHex("64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1"); + //byte[] S = Hex.decode("3045AE6FC8422F64ED579528D38120EAE12196D5"); + var n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831"); + var h = BigInteger.ONE; + var curve = new ECCurveFp(p, a, b); + var G = curve.decodePointHex("04" + + "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012" + + "07192B95FFC8DA78631011ED6B24CDD573F977A11E794811"); + return new X9ECParameters(curve, G, n, h); +} + +function secp224r1() { + // p = 2^224 - 2^96 + 1 + var p = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001"); + var a = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE"); + var b = fromHex("B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4"); + //byte[] S = Hex.decode("BD71344799D5C7FCDC45B59FA3B9AB8F6A948BC5"); + var n = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D"); + var h = BigInteger.ONE; + var curve = new ECCurveFp(p, a, b); + var G = curve.decodePointHex("04" + + "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21" + + "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34"); + return new X9ECParameters(curve, G, n, h); +} + +function secp256r1() { + // p = 2^224 (2^32 - 1) + 2^192 + 2^96 - 1 + var p = fromHex("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF"); + var a = fromHex("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC"); + var b = fromHex("5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B"); + //byte[] S = Hex.decode("C49D360886E704936A6678E1139D26B7819F7E90"); + var n = fromHex("FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551"); + var h = BigInteger.ONE; + var curve = new ECCurveFp(p, a, b); + var G = curve.decodePointHex("04" + + "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296" + + "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5"); + return new X9ECParameters(curve, G, n, h); +} + +// TODO: make this into a proper hashtable +function getSECCurveByName(name) { + if(name == "secp128r1") return secp128r1(); + if(name == "secp160k1") return secp160k1(); + if(name == "secp160r1") return secp160r1(); + if(name == "secp192k1") return secp192k1(); + if(name == "secp192r1") return secp192r1(); + if(name == "secp224r1") return secp224r1(); + if(name == "secp256r1") return secp256r1(); + return null; +} + +module.exports = { + "secp128r1":secp128r1, + "secp160k1":secp160k1, + "secp160r1":secp160r1, + "secp192k1":secp192k1, + "secp192r1":secp192r1, + "secp224r1":secp224r1, + "secp256r1":secp256r1 +} + +},{"./ec.js":546,"jsbn":863}],548:[function(require,module,exports){ +'use strict'; + +var elliptic = exports; + +elliptic.version = require('../package.json').version; +elliptic.utils = require('./elliptic/utils'); +elliptic.rand = require('brorand'); +elliptic.curve = require('./elliptic/curve'); +elliptic.curves = require('./elliptic/curves'); + +// Protocols +elliptic.ec = require('./elliptic/ec'); +elliptic.eddsa = require('./elliptic/eddsa'); + +},{"../package.json":563,"./elliptic/curve":551,"./elliptic/curves":554,"./elliptic/ec":555,"./elliptic/eddsa":558,"./elliptic/utils":562,"brorand":76}],549:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; +var getNAF = utils.getNAF; +var getJSF = utils.getJSF; +var assert = utils.assert; + +function BaseCurve(type, conf) { + this.type = type; + this.p = new BN(conf.p, 16); + + // Use Montgomery, when there is no fast reduction for the prime + this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p); + + // Useful for many curves + this.zero = new BN(0).toRed(this.red); + this.one = new BN(1).toRed(this.red); + this.two = new BN(2).toRed(this.red); + + // Curve configuration, optional + this.n = conf.n && new BN(conf.n, 16); + this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed); + + // Temporary arrays + this._wnafT1 = new Array(4); + this._wnafT2 = new Array(4); + this._wnafT3 = new Array(4); + this._wnafT4 = new Array(4); + + // Generalized Greg Maxwell's trick + var adjustCount = this.n && this.p.div(this.n); + if (!adjustCount || adjustCount.cmpn(100) > 0) { + this.redN = null; + } else { + this._maxwellTrick = true; + this.redN = this.n.toRed(this.red); + } +} +module.exports = BaseCurve; + +BaseCurve.prototype.point = function point() { + throw new Error('Not implemented'); +}; + +BaseCurve.prototype.validate = function validate() { + throw new Error('Not implemented'); +}; + +BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) { + assert(p.precomputed); + var doubles = p._getDoubles(); + + var naf = getNAF(k, 1); + var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1); + I /= 3; + + // Translate into more windowed form + var repr = []; + for (var j = 0; j < naf.length; j += doubles.step) { + var nafW = 0; + for (var k = j + doubles.step - 1; k >= j; k--) + nafW = (nafW << 1) + naf[k]; + repr.push(nafW); + } + + var a = this.jpoint(null, null, null); + var b = this.jpoint(null, null, null); + for (var i = I; i > 0; i--) { + for (var j = 0; j < repr.length; j++) { + var nafW = repr[j]; + if (nafW === i) + b = b.mixedAdd(doubles.points[j]); + else if (nafW === -i) + b = b.mixedAdd(doubles.points[j].neg()); + } + a = a.add(b); + } + return a.toP(); +}; + +BaseCurve.prototype._wnafMul = function _wnafMul(p, k) { + var w = 4; + + // Precompute window + var nafPoints = p._getNAFPoints(w); + w = nafPoints.wnd; + var wnd = nafPoints.points; + + // Get NAF form + var naf = getNAF(k, w); + + // Add `this`*(N+1) for every w-NAF index + var acc = this.jpoint(null, null, null); + for (var i = naf.length - 1; i >= 0; i--) { + // Count zeroes + for (var k = 0; i >= 0 && naf[i] === 0; i--) + k++; + if (i >= 0) + k++; + acc = acc.dblp(k); + + if (i < 0) + break; + var z = naf[i]; + assert(z !== 0); + if (p.type === 'affine') { + // J +- P + if (z > 0) + acc = acc.mixedAdd(wnd[(z - 1) >> 1]); + else + acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg()); + } else { + // J +- J + if (z > 0) + acc = acc.add(wnd[(z - 1) >> 1]); + else + acc = acc.add(wnd[(-z - 1) >> 1].neg()); + } + } + return p.type === 'affine' ? acc.toP() : acc; +}; + +BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW, + points, + coeffs, + len, + jacobianResult) { + var wndWidth = this._wnafT1; + var wnd = this._wnafT2; + var naf = this._wnafT3; + + // Fill all arrays + var max = 0; + for (var i = 0; i < len; i++) { + var p = points[i]; + var nafPoints = p._getNAFPoints(defW); + wndWidth[i] = nafPoints.wnd; + wnd[i] = nafPoints.points; + } + + // Comb small window NAFs + for (var i = len - 1; i >= 1; i -= 2) { + var a = i - 1; + var b = i; + if (wndWidth[a] !== 1 || wndWidth[b] !== 1) { + naf[a] = getNAF(coeffs[a], wndWidth[a]); + naf[b] = getNAF(coeffs[b], wndWidth[b]); + max = Math.max(naf[a].length, max); + max = Math.max(naf[b].length, max); + continue; + } + + var comb = [ + points[a], /* 1 */ + null, /* 3 */ + null, /* 5 */ + points[b] /* 7 */ + ]; + + // Try to avoid Projective points, if possible + if (points[a].y.cmp(points[b].y) === 0) { + comb[1] = points[a].add(points[b]); + comb[2] = points[a].toJ().mixedAdd(points[b].neg()); + } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) { + comb[1] = points[a].toJ().mixedAdd(points[b]); + comb[2] = points[a].add(points[b].neg()); + } else { + comb[1] = points[a].toJ().mixedAdd(points[b]); + comb[2] = points[a].toJ().mixedAdd(points[b].neg()); + } + + var index = [ + -3, /* -1 -1 */ + -1, /* -1 0 */ + -5, /* -1 1 */ + -7, /* 0 -1 */ + 0, /* 0 0 */ + 7, /* 0 1 */ + 5, /* 1 -1 */ + 1, /* 1 0 */ + 3 /* 1 1 */ + ]; + + var jsf = getJSF(coeffs[a], coeffs[b]); + max = Math.max(jsf[0].length, max); + naf[a] = new Array(max); + naf[b] = new Array(max); + for (var j = 0; j < max; j++) { + var ja = jsf[0][j] | 0; + var jb = jsf[1][j] | 0; + + naf[a][j] = index[(ja + 1) * 3 + (jb + 1)]; + naf[b][j] = 0; + wnd[a] = comb; + } + } + + var acc = this.jpoint(null, null, null); + var tmp = this._wnafT4; + for (var i = max; i >= 0; i--) { + var k = 0; + + while (i >= 0) { + var zero = true; + for (var j = 0; j < len; j++) { + tmp[j] = naf[j][i] | 0; + if (tmp[j] !== 0) + zero = false; + } + if (!zero) + break; + k++; + i--; + } + if (i >= 0) + k++; + acc = acc.dblp(k); + if (i < 0) + break; + + for (var j = 0; j < len; j++) { + var z = tmp[j]; + var p; + if (z === 0) + continue; + else if (z > 0) + p = wnd[j][(z - 1) >> 1]; + else if (z < 0) + p = wnd[j][(-z - 1) >> 1].neg(); + + if (p.type === 'affine') + acc = acc.mixedAdd(p); + else + acc = acc.add(p); + } + } + // Zeroify references + for (var i = 0; i < len; i++) + wnd[i] = null; + + if (jacobianResult) + return acc; + else + return acc.toP(); +}; + +function BasePoint(curve, type) { + this.curve = curve; + this.type = type; + this.precomputed = null; +} +BaseCurve.BasePoint = BasePoint; + +BasePoint.prototype.eq = function eq(/*other*/) { + throw new Error('Not implemented'); +}; + +BasePoint.prototype.validate = function validate() { + return this.curve.validate(this); +}; + +BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) { + bytes = utils.toArray(bytes, enc); + + var len = this.p.byteLength(); + + // uncompressed, hybrid-odd, hybrid-even + if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) && + bytes.length - 1 === 2 * len) { + if (bytes[0] === 0x06) + assert(bytes[bytes.length - 1] % 2 === 0); + else if (bytes[0] === 0x07) + assert(bytes[bytes.length - 1] % 2 === 1); + + var res = this.point(bytes.slice(1, 1 + len), + bytes.slice(1 + len, 1 + 2 * len)); + + return res; + } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) && + bytes.length - 1 === len) { + return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03); + } + throw new Error('Unknown point format'); +}; + +BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) { + return this.encode(enc, true); +}; + +BasePoint.prototype._encode = function _encode(compact) { + var len = this.curve.p.byteLength(); + var x = this.getX().toArray('be', len); + + if (compact) + return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x); + + return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ; +}; + +BasePoint.prototype.encode = function encode(enc, compact) { + return utils.encode(this._encode(compact), enc); +}; + +BasePoint.prototype.precompute = function precompute(power) { + if (this.precomputed) + return this; + + var precomputed = { + doubles: null, + naf: null, + beta: null + }; + precomputed.naf = this._getNAFPoints(8); + precomputed.doubles = this._getDoubles(4, power); + precomputed.beta = this._getBeta(); + this.precomputed = precomputed; + + return this; +}; + +BasePoint.prototype._hasDoubles = function _hasDoubles(k) { + if (!this.precomputed) + return false; + + var doubles = this.precomputed.doubles; + if (!doubles) + return false; + + return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step); +}; + +BasePoint.prototype._getDoubles = function _getDoubles(step, power) { + if (this.precomputed && this.precomputed.doubles) + return this.precomputed.doubles; + + var doubles = [ this ]; + var acc = this; + for (var i = 0; i < power; i += step) { + for (var j = 0; j < step; j++) + acc = acc.dbl(); + doubles.push(acc); + } + return { + step: step, + points: doubles + }; +}; + +BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) { + if (this.precomputed && this.precomputed.naf) + return this.precomputed.naf; + + var res = [ this ]; + var max = (1 << wnd) - 1; + var dbl = max === 1 ? null : this.dbl(); + for (var i = 1; i < max; i++) + res[i] = res[i - 1].add(dbl); + return { + wnd: wnd, + points: res + }; +}; + +BasePoint.prototype._getBeta = function _getBeta() { + return null; +}; + +BasePoint.prototype.dblp = function dblp(k) { + var r = this; + for (var i = 0; i < k; i++) + r = r.dbl(); + return r; +}; + +},{"../../elliptic":548,"bn.js":66}],550:[function(require,module,exports){ +'use strict'; + +var curve = require('../curve'); +var elliptic = require('../../elliptic'); +var BN = require('bn.js'); +var inherits = require('inherits'); +var Base = curve.base; + +var assert = elliptic.utils.assert; + +function EdwardsCurve(conf) { + // NOTE: Important as we are creating point in Base.call() + this.twisted = (conf.a | 0) !== 1; + this.mOneA = this.twisted && (conf.a | 0) === -1; + this.extended = this.mOneA; + + Base.call(this, 'edwards', conf); + + this.a = new BN(conf.a, 16).umod(this.red.m); + this.a = this.a.toRed(this.red); + this.c = new BN(conf.c, 16).toRed(this.red); + this.c2 = this.c.redSqr(); + this.d = new BN(conf.d, 16).toRed(this.red); + this.dd = this.d.redAdd(this.d); + + assert(!this.twisted || this.c.fromRed().cmpn(1) === 0); + this.oneC = (conf.c | 0) === 1; +} +inherits(EdwardsCurve, Base); +module.exports = EdwardsCurve; + +EdwardsCurve.prototype._mulA = function _mulA(num) { + if (this.mOneA) + return num.redNeg(); + else + return this.a.redMul(num); +}; + +EdwardsCurve.prototype._mulC = function _mulC(num) { + if (this.oneC) + return num; + else + return this.c.redMul(num); +}; + +// Just for compatibility with Short curve +EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) { + return this.point(x, y, z, t); +}; + +EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) { + x = new BN(x, 16); + if (!x.red) + x = x.toRed(this.red); + + var x2 = x.redSqr(); + var rhs = this.c2.redSub(this.a.redMul(x2)); + var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2)); + + var y2 = rhs.redMul(lhs.redInvm()); + var y = y2.redSqrt(); + if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) + throw new Error('invalid point'); + + var isOdd = y.fromRed().isOdd(); + if (odd && !isOdd || !odd && isOdd) + y = y.redNeg(); + + return this.point(x, y); +}; + +EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) { + y = new BN(y, 16); + if (!y.red) + y = y.toRed(this.red); + + // x^2 = (y^2 - c^2) / (c^2 d y^2 - a) + var y2 = y.redSqr(); + var lhs = y2.redSub(this.c2); + var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a); + var x2 = lhs.redMul(rhs.redInvm()); + + if (x2.cmp(this.zero) === 0) { + if (odd) + throw new Error('invalid point'); + else + return this.point(this.zero, y); + } + + var x = x2.redSqrt(); + if (x.redSqr().redSub(x2).cmp(this.zero) !== 0) + throw new Error('invalid point'); + + if (x.fromRed().isOdd() !== odd) + x = x.redNeg(); + + return this.point(x, y); +}; + +EdwardsCurve.prototype.validate = function validate(point) { + if (point.isInfinity()) + return true; + + // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2) + point.normalize(); + + var x2 = point.x.redSqr(); + var y2 = point.y.redSqr(); + var lhs = x2.redMul(this.a).redAdd(y2); + var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2))); + + return lhs.cmp(rhs) === 0; +}; + +function Point(curve, x, y, z, t) { + Base.BasePoint.call(this, curve, 'projective'); + if (x === null && y === null && z === null) { + this.x = this.curve.zero; + this.y = this.curve.one; + this.z = this.curve.one; + this.t = this.curve.zero; + this.zOne = true; + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + this.z = z ? new BN(z, 16) : this.curve.one; + this.t = t && new BN(t, 16); + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); + if (this.t && !this.t.red) + this.t = this.t.toRed(this.curve.red); + this.zOne = this.z === this.curve.one; + + // Use extended coordinates + if (this.curve.extended && !this.t) { + this.t = this.x.redMul(this.y); + if (!this.zOne) + this.t = this.t.redMul(this.z.redInvm()); + } + } +} +inherits(Point, Base.BasePoint); + +EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) { + return Point.fromJSON(this, obj); +}; + +EdwardsCurve.prototype.point = function point(x, y, z, t) { + return new Point(this, x, y, z, t); +}; + +Point.fromJSON = function fromJSON(curve, obj) { + return new Point(curve, obj[0], obj[1], obj[2]); +}; + +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +Point.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.x.cmpn(0) === 0 && + (this.y.cmp(this.z) === 0 || + (this.zOne && this.y.cmp(this.curve.c) === 0)); +}; + +Point.prototype._extDbl = function _extDbl() { + // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + // #doubling-dbl-2008-hwcd + // 4M + 4S + + // A = X1^2 + var a = this.x.redSqr(); + // B = Y1^2 + var b = this.y.redSqr(); + // C = 2 * Z1^2 + var c = this.z.redSqr(); + c = c.redIAdd(c); + // D = a * A + var d = this.curve._mulA(a); + // E = (X1 + Y1)^2 - A - B + var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b); + // G = D + B + var g = d.redAdd(b); + // F = G - C + var f = g.redSub(c); + // H = D - B + var h = d.redSub(b); + // X3 = E * F + var nx = e.redMul(f); + // Y3 = G * H + var ny = g.redMul(h); + // T3 = E * H + var nt = e.redMul(h); + // Z3 = F * G + var nz = f.redMul(g); + return this.curve.point(nx, ny, nz, nt); +}; + +Point.prototype._projDbl = function _projDbl() { + // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html + // #doubling-dbl-2008-bbjlp + // #doubling-dbl-2007-bl + // and others + // Generally 3M + 4S or 2M + 4S + + // B = (X1 + Y1)^2 + var b = this.x.redAdd(this.y).redSqr(); + // C = X1^2 + var c = this.x.redSqr(); + // D = Y1^2 + var d = this.y.redSqr(); + + var nx; + var ny; + var nz; + if (this.curve.twisted) { + // E = a * C + var e = this.curve._mulA(c); + // F = E + D + var f = e.redAdd(d); + if (this.zOne) { + // X3 = (B - C - D) * (F - 2) + nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two)); + // Y3 = F * (E - D) + ny = f.redMul(e.redSub(d)); + // Z3 = F^2 - 2 * F + nz = f.redSqr().redSub(f).redSub(f); + } else { + // H = Z1^2 + var h = this.z.redSqr(); + // J = F - 2 * H + var j = f.redSub(h).redISub(h); + // X3 = (B-C-D)*J + nx = b.redSub(c).redISub(d).redMul(j); + // Y3 = F * (E - D) + ny = f.redMul(e.redSub(d)); + // Z3 = F * J + nz = f.redMul(j); + } + } else { + // E = C + D + var e = c.redAdd(d); + // H = (c * Z1)^2 + var h = this.curve._mulC(this.z).redSqr(); + // J = E - 2 * H + var j = e.redSub(h).redSub(h); + // X3 = c * (B - E) * J + nx = this.curve._mulC(b.redISub(e)).redMul(j); + // Y3 = c * E * (C - D) + ny = this.curve._mulC(e).redMul(c.redISub(d)); + // Z3 = E * J + nz = e.redMul(j); + } + return this.curve.point(nx, ny, nz); +}; + +Point.prototype.dbl = function dbl() { + if (this.isInfinity()) + return this; + + // Double in extended coordinates + if (this.curve.extended) + return this._extDbl(); + else + return this._projDbl(); +}; + +Point.prototype._extAdd = function _extAdd(p) { + // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + // #addition-add-2008-hwcd-3 + // 8M + + // A = (Y1 - X1) * (Y2 - X2) + var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x)); + // B = (Y1 + X1) * (Y2 + X2) + var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x)); + // C = T1 * k * T2 + var c = this.t.redMul(this.curve.dd).redMul(p.t); + // D = Z1 * 2 * Z2 + var d = this.z.redMul(p.z.redAdd(p.z)); + // E = B - A + var e = b.redSub(a); + // F = D - C + var f = d.redSub(c); + // G = D + C + var g = d.redAdd(c); + // H = B + A + var h = b.redAdd(a); + // X3 = E * F + var nx = e.redMul(f); + // Y3 = G * H + var ny = g.redMul(h); + // T3 = E * H + var nt = e.redMul(h); + // Z3 = F * G + var nz = f.redMul(g); + return this.curve.point(nx, ny, nz, nt); +}; + +Point.prototype._projAdd = function _projAdd(p) { + // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html + // #addition-add-2008-bbjlp + // #addition-add-2007-bl + // 10M + 1S + + // A = Z1 * Z2 + var a = this.z.redMul(p.z); + // B = A^2 + var b = a.redSqr(); + // C = X1 * X2 + var c = this.x.redMul(p.x); + // D = Y1 * Y2 + var d = this.y.redMul(p.y); + // E = d * C * D + var e = this.curve.d.redMul(c).redMul(d); + // F = B - E + var f = b.redSub(e); + // G = B + E + var g = b.redAdd(e); + // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D) + var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d); + var nx = a.redMul(f).redMul(tmp); + var ny; + var nz; + if (this.curve.twisted) { + // Y3 = A * G * (D - a * C) + ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c))); + // Z3 = F * G + nz = f.redMul(g); + } else { + // Y3 = A * G * (D - C) + ny = a.redMul(g).redMul(d.redSub(c)); + // Z3 = c * F * G + nz = this.curve._mulC(f).redMul(g); + } + return this.curve.point(nx, ny, nz); +}; + +Point.prototype.add = function add(p) { + if (this.isInfinity()) + return p; + if (p.isInfinity()) + return this; + + if (this.curve.extended) + return this._extAdd(p); + else + return this._projAdd(p); +}; + +Point.prototype.mul = function mul(k) { + if (this._hasDoubles(k)) + return this.curve._fixedNafMul(this, k); + else + return this.curve._wnafMul(this, k); +}; + +Point.prototype.mulAdd = function mulAdd(k1, p, k2) { + return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false); +}; + +Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) { + return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true); +}; + +Point.prototype.normalize = function normalize() { + if (this.zOne) + return this; + + // Normalize coordinates + var zi = this.z.redInvm(); + this.x = this.x.redMul(zi); + this.y = this.y.redMul(zi); + if (this.t) + this.t = this.t.redMul(zi); + this.z = this.curve.one; + this.zOne = true; + return this; +}; + +Point.prototype.neg = function neg() { + return this.curve.point(this.x.redNeg(), + this.y, + this.z, + this.t && this.t.redNeg()); +}; + +Point.prototype.getX = function getX() { + this.normalize(); + return this.x.fromRed(); +}; + +Point.prototype.getY = function getY() { + this.normalize(); + return this.y.fromRed(); +}; + +Point.prototype.eq = function eq(other) { + return this === other || + this.getX().cmp(other.getX()) === 0 && + this.getY().cmp(other.getY()) === 0; +}; + +Point.prototype.eqXToP = function eqXToP(x) { + var rx = x.toRed(this.curve.red).redMul(this.z); + if (this.x.cmp(rx) === 0) + return true; + + var xc = x.clone(); + var t = this.curve.redN.redMul(this.z); + for (;;) { + xc.iadd(this.curve.n); + if (xc.cmp(this.curve.p) >= 0) + return false; + + rx.redIAdd(t); + if (this.x.cmp(rx) === 0) + return true; + } +}; + +// Compatibility with BaseCurve +Point.prototype.toP = Point.prototype.normalize; +Point.prototype.mixedAdd = Point.prototype.add; + +},{"../../elliptic":548,"../curve":551,"bn.js":66,"inherits":834}],551:[function(require,module,exports){ +'use strict'; + +var curve = exports; + +curve.base = require('./base'); +curve.short = require('./short'); +curve.mont = require('./mont'); +curve.edwards = require('./edwards'); + +},{"./base":549,"./edwards":550,"./mont":552,"./short":553}],552:[function(require,module,exports){ +'use strict'; + +var curve = require('../curve'); +var BN = require('bn.js'); +var inherits = require('inherits'); +var Base = curve.base; + +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; + +function MontCurve(conf) { + Base.call(this, 'mont', conf); + + this.a = new BN(conf.a, 16).toRed(this.red); + this.b = new BN(conf.b, 16).toRed(this.red); + this.i4 = new BN(4).toRed(this.red).redInvm(); + this.two = new BN(2).toRed(this.red); + this.a24 = this.i4.redMul(this.a.redAdd(this.two)); +} +inherits(MontCurve, Base); +module.exports = MontCurve; + +MontCurve.prototype.validate = function validate(point) { + var x = point.normalize().x; + var x2 = x.redSqr(); + var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x); + var y = rhs.redSqrt(); + + return y.redSqr().cmp(rhs) === 0; +}; + +function Point(curve, x, z) { + Base.BasePoint.call(this, curve, 'projective'); + if (x === null && z === null) { + this.x = this.curve.one; + this.z = this.curve.zero; + } else { + this.x = new BN(x, 16); + this.z = new BN(z, 16); + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); + } +} +inherits(Point, Base.BasePoint); + +MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) { + return this.point(utils.toArray(bytes, enc), 1); +}; + +MontCurve.prototype.point = function point(x, z) { + return new Point(this, x, z); +}; + +MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) { + return Point.fromJSON(this, obj); +}; + +Point.prototype.precompute = function precompute() { + // No-op +}; + +Point.prototype._encode = function _encode() { + return this.getX().toArray('be', this.curve.p.byteLength()); +}; + +Point.fromJSON = function fromJSON(curve, obj) { + return new Point(curve, obj[0], obj[1] || curve.one); +}; + +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +Point.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.z.cmpn(0) === 0; +}; + +Point.prototype.dbl = function dbl() { + // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3 + // 2M + 2S + 4A + + // A = X1 + Z1 + var a = this.x.redAdd(this.z); + // AA = A^2 + var aa = a.redSqr(); + // B = X1 - Z1 + var b = this.x.redSub(this.z); + // BB = B^2 + var bb = b.redSqr(); + // C = AA - BB + var c = aa.redSub(bb); + // X3 = AA * BB + var nx = aa.redMul(bb); + // Z3 = C * (BB + A24 * C) + var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c))); + return this.curve.point(nx, nz); +}; + +Point.prototype.add = function add() { + throw new Error('Not supported on Montgomery curve'); +}; + +Point.prototype.diffAdd = function diffAdd(p, diff) { + // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3 + // 4M + 2S + 6A + + // A = X2 + Z2 + var a = this.x.redAdd(this.z); + // B = X2 - Z2 + var b = this.x.redSub(this.z); + // C = X3 + Z3 + var c = p.x.redAdd(p.z); + // D = X3 - Z3 + var d = p.x.redSub(p.z); + // DA = D * A + var da = d.redMul(a); + // CB = C * B + var cb = c.redMul(b); + // X5 = Z1 * (DA + CB)^2 + var nx = diff.z.redMul(da.redAdd(cb).redSqr()); + // Z5 = X1 * (DA - CB)^2 + var nz = diff.x.redMul(da.redISub(cb).redSqr()); + return this.curve.point(nx, nz); +}; + +Point.prototype.mul = function mul(k) { + var t = k.clone(); + var a = this; // (N / 2) * Q + Q + var b = this.curve.point(null, null); // (N / 2) * Q + var c = this; // Q + + for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1)) + bits.push(t.andln(1)); + + for (var i = bits.length - 1; i >= 0; i--) { + if (bits[i] === 0) { + // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q + a = a.diffAdd(b, c); + // N * Q = 2 * ((N / 2) * Q + Q)) + b = b.dbl(); + } else { + // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q) + b = a.diffAdd(b, c); + // N * Q + Q = 2 * ((N / 2) * Q + Q) + a = a.dbl(); + } + } + return b; +}; + +Point.prototype.mulAdd = function mulAdd() { + throw new Error('Not supported on Montgomery curve'); +}; + +Point.prototype.jumlAdd = function jumlAdd() { + throw new Error('Not supported on Montgomery curve'); +}; + +Point.prototype.eq = function eq(other) { + return this.getX().cmp(other.getX()) === 0; +}; + +Point.prototype.normalize = function normalize() { + this.x = this.x.redMul(this.z.redInvm()); + this.z = this.curve.one; + return this; +}; + +Point.prototype.getX = function getX() { + // Normalize coordinates + this.normalize(); + + return this.x.fromRed(); +}; + +},{"../../elliptic":548,"../curve":551,"bn.js":66,"inherits":834}],553:[function(require,module,exports){ +'use strict'; + +var curve = require('../curve'); +var elliptic = require('../../elliptic'); +var BN = require('bn.js'); +var inherits = require('inherits'); +var Base = curve.base; + +var assert = elliptic.utils.assert; + +function ShortCurve(conf) { + Base.call(this, 'short', conf); + + this.a = new BN(conf.a, 16).toRed(this.red); + this.b = new BN(conf.b, 16).toRed(this.red); + this.tinv = this.two.redInvm(); + + this.zeroA = this.a.fromRed().cmpn(0) === 0; + this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0; + + // If the curve is endomorphic, precalculate beta and lambda + this.endo = this._getEndomorphism(conf); + this._endoWnafT1 = new Array(4); + this._endoWnafT2 = new Array(4); +} +inherits(ShortCurve, Base); +module.exports = ShortCurve; + +ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) { + // No efficient endomorphism + if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1) + return; + + // Compute beta and lambda, that lambda * P = (beta * Px; Py) + var beta; + var lambda; + if (conf.beta) { + beta = new BN(conf.beta, 16).toRed(this.red); + } else { + var betas = this._getEndoRoots(this.p); + // Choose the smallest beta + beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1]; + beta = beta.toRed(this.red); + } + if (conf.lambda) { + lambda = new BN(conf.lambda, 16); + } else { + // Choose the lambda that is matching selected beta + var lambdas = this._getEndoRoots(this.n); + if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) { + lambda = lambdas[0]; + } else { + lambda = lambdas[1]; + assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0); + } + } + + // Get basis vectors, used for balanced length-two representation + var basis; + if (conf.basis) { + basis = conf.basis.map(function(vec) { + return { + a: new BN(vec.a, 16), + b: new BN(vec.b, 16) + }; + }); + } else { + basis = this._getEndoBasis(lambda); + } + + return { + beta: beta, + lambda: lambda, + basis: basis + }; +}; + +ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) { + // Find roots of for x^2 + x + 1 in F + // Root = (-1 +- Sqrt(-3)) / 2 + // + var red = num === this.p ? this.red : BN.mont(num); + var tinv = new BN(2).toRed(red).redInvm(); + var ntinv = tinv.redNeg(); + + var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv); + + var l1 = ntinv.redAdd(s).fromRed(); + var l2 = ntinv.redSub(s).fromRed(); + return [ l1, l2 ]; +}; + +ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) { + // aprxSqrt >= sqrt(this.n) + var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2)); + + // 3.74 + // Run EGCD, until r(L + 1) < aprxSqrt + var u = lambda; + var v = this.n.clone(); + var x1 = new BN(1); + var y1 = new BN(0); + var x2 = new BN(0); + var y2 = new BN(1); + + // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n) + var a0; + var b0; + // First vector + var a1; + var b1; + // Second vector + var a2; + var b2; + + var prevR; + var i = 0; + var r; + var x; + while (u.cmpn(0) !== 0) { + var q = v.div(u); + r = v.sub(q.mul(u)); + x = x2.sub(q.mul(x1)); + var y = y2.sub(q.mul(y1)); + + if (!a1 && r.cmp(aprxSqrt) < 0) { + a0 = prevR.neg(); + b0 = x1; + a1 = r.neg(); + b1 = x; + } else if (a1 && ++i === 2) { + break; + } + prevR = r; + + v = u; + u = r; + x2 = x1; + x1 = x; + y2 = y1; + y1 = y; + } + a2 = r.neg(); + b2 = x; + + var len1 = a1.sqr().add(b1.sqr()); + var len2 = a2.sqr().add(b2.sqr()); + if (len2.cmp(len1) >= 0) { + a2 = a0; + b2 = b0; + } + + // Normalize signs + if (a1.negative) { + a1 = a1.neg(); + b1 = b1.neg(); + } + if (a2.negative) { + a2 = a2.neg(); + b2 = b2.neg(); + } + + return [ + { a: a1, b: b1 }, + { a: a2, b: b2 } + ]; +}; + +ShortCurve.prototype._endoSplit = function _endoSplit(k) { + var basis = this.endo.basis; + var v1 = basis[0]; + var v2 = basis[1]; + + var c1 = v2.b.mul(k).divRound(this.n); + var c2 = v1.b.neg().mul(k).divRound(this.n); + + var p1 = c1.mul(v1.a); + var p2 = c2.mul(v2.a); + var q1 = c1.mul(v1.b); + var q2 = c2.mul(v2.b); + + // Calculate answer + var k1 = k.sub(p1).sub(p2); + var k2 = q1.add(q2).neg(); + return { k1: k1, k2: k2 }; +}; + +ShortCurve.prototype.pointFromX = function pointFromX(x, odd) { + x = new BN(x, 16); + if (!x.red) + x = x.toRed(this.red); + + var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b); + var y = y2.redSqrt(); + if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) + throw new Error('invalid point'); + + // XXX Is there any way to tell if the number is odd without converting it + // to non-red form? + var isOdd = y.fromRed().isOdd(); + if (odd && !isOdd || !odd && isOdd) + y = y.redNeg(); + + return this.point(x, y); +}; + +ShortCurve.prototype.validate = function validate(point) { + if (point.inf) + return true; + + var x = point.x; + var y = point.y; + + var ax = this.a.redMul(x); + var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b); + return y.redSqr().redISub(rhs).cmpn(0) === 0; +}; + +ShortCurve.prototype._endoWnafMulAdd = + function _endoWnafMulAdd(points, coeffs, jacobianResult) { + var npoints = this._endoWnafT1; + var ncoeffs = this._endoWnafT2; + for (var i = 0; i < points.length; i++) { + var split = this._endoSplit(coeffs[i]); + var p = points[i]; + var beta = p._getBeta(); + + if (split.k1.negative) { + split.k1.ineg(); + p = p.neg(true); + } + if (split.k2.negative) { + split.k2.ineg(); + beta = beta.neg(true); + } + + npoints[i * 2] = p; + npoints[i * 2 + 1] = beta; + ncoeffs[i * 2] = split.k1; + ncoeffs[i * 2 + 1] = split.k2; + } + var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult); + + // Clean-up references to points and coefficients + for (var j = 0; j < i * 2; j++) { + npoints[j] = null; + ncoeffs[j] = null; + } + return res; +}; + +function Point(curve, x, y, isRed) { + Base.BasePoint.call(this, curve, 'affine'); + if (x === null && y === null) { + this.x = null; + this.y = null; + this.inf = true; + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + // Force redgomery representation when loading from JSON + if (isRed) { + this.x.forceRed(this.curve.red); + this.y.forceRed(this.curve.red); + } + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + this.inf = false; + } +} +inherits(Point, Base.BasePoint); + +ShortCurve.prototype.point = function point(x, y, isRed) { + return new Point(this, x, y, isRed); +}; + +ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) { + return Point.fromJSON(this, obj, red); +}; + +Point.prototype._getBeta = function _getBeta() { + if (!this.curve.endo) + return; + + var pre = this.precomputed; + if (pre && pre.beta) + return pre.beta; + + var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y); + if (pre) { + var curve = this.curve; + var endoMul = function(p) { + return curve.point(p.x.redMul(curve.endo.beta), p.y); + }; + pre.beta = beta; + beta.precomputed = { + beta: null, + naf: pre.naf && { + wnd: pre.naf.wnd, + points: pre.naf.points.map(endoMul) + }, + doubles: pre.doubles && { + step: pre.doubles.step, + points: pre.doubles.points.map(endoMul) + } + }; + } + return beta; +}; + +Point.prototype.toJSON = function toJSON() { + if (!this.precomputed) + return [ this.x, this.y ]; + + return [ this.x, this.y, this.precomputed && { + doubles: this.precomputed.doubles && { + step: this.precomputed.doubles.step, + points: this.precomputed.doubles.points.slice(1) + }, + naf: this.precomputed.naf && { + wnd: this.precomputed.naf.wnd, + points: this.precomputed.naf.points.slice(1) + } + } ]; +}; + +Point.fromJSON = function fromJSON(curve, obj, red) { + if (typeof obj === 'string') + obj = JSON.parse(obj); + var res = curve.point(obj[0], obj[1], red); + if (!obj[2]) + return res; + + function obj2point(obj) { + return curve.point(obj[0], obj[1], red); + } + + var pre = obj[2]; + res.precomputed = { + beta: null, + doubles: pre.doubles && { + step: pre.doubles.step, + points: [ res ].concat(pre.doubles.points.map(obj2point)) + }, + naf: pre.naf && { + wnd: pre.naf.wnd, + points: [ res ].concat(pre.naf.points.map(obj2point)) + } + }; + return res; +}; + +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +Point.prototype.isInfinity = function isInfinity() { + return this.inf; +}; + +Point.prototype.add = function add(p) { + // O + P = P + if (this.inf) + return p; + + // P + O = P + if (p.inf) + return this; + + // P + P = 2P + if (this.eq(p)) + return this.dbl(); + + // P + (-P) = O + if (this.neg().eq(p)) + return this.curve.point(null, null); + + // P + Q = O + if (this.x.cmp(p.x) === 0) + return this.curve.point(null, null); + + var c = this.y.redSub(p.y); + if (c.cmpn(0) !== 0) + c = c.redMul(this.x.redSub(p.x).redInvm()); + var nx = c.redSqr().redISub(this.x).redISub(p.x); + var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); + return this.curve.point(nx, ny); +}; + +Point.prototype.dbl = function dbl() { + if (this.inf) + return this; + + // 2P = O + var ys1 = this.y.redAdd(this.y); + if (ys1.cmpn(0) === 0) + return this.curve.point(null, null); + + var a = this.curve.a; + + var x2 = this.x.redSqr(); + var dyinv = ys1.redInvm(); + var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv); + + var nx = c.redSqr().redISub(this.x.redAdd(this.x)); + var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); + return this.curve.point(nx, ny); +}; + +Point.prototype.getX = function getX() { + return this.x.fromRed(); +}; + +Point.prototype.getY = function getY() { + return this.y.fromRed(); +}; + +Point.prototype.mul = function mul(k) { + k = new BN(k, 16); + + if (this._hasDoubles(k)) + return this.curve._fixedNafMul(this, k); + else if (this.curve.endo) + return this.curve._endoWnafMulAdd([ this ], [ k ]); + else + return this.curve._wnafMul(this, k); +}; + +Point.prototype.mulAdd = function mulAdd(k1, p2, k2) { + var points = [ this, p2 ]; + var coeffs = [ k1, k2 ]; + if (this.curve.endo) + return this.curve._endoWnafMulAdd(points, coeffs); + else + return this.curve._wnafMulAdd(1, points, coeffs, 2); +}; + +Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) { + var points = [ this, p2 ]; + var coeffs = [ k1, k2 ]; + if (this.curve.endo) + return this.curve._endoWnafMulAdd(points, coeffs, true); + else + return this.curve._wnafMulAdd(1, points, coeffs, 2, true); +}; + +Point.prototype.eq = function eq(p) { + return this === p || + this.inf === p.inf && + (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0); +}; + +Point.prototype.neg = function neg(_precompute) { + if (this.inf) + return this; + + var res = this.curve.point(this.x, this.y.redNeg()); + if (_precompute && this.precomputed) { + var pre = this.precomputed; + var negate = function(p) { + return p.neg(); + }; + res.precomputed = { + naf: pre.naf && { + wnd: pre.naf.wnd, + points: pre.naf.points.map(negate) + }, + doubles: pre.doubles && { + step: pre.doubles.step, + points: pre.doubles.points.map(negate) + } + }; + } + return res; +}; + +Point.prototype.toJ = function toJ() { + if (this.inf) + return this.curve.jpoint(null, null, null); + + var res = this.curve.jpoint(this.x, this.y, this.curve.one); + return res; +}; + +function JPoint(curve, x, y, z) { + Base.BasePoint.call(this, curve, 'jacobian'); + if (x === null && y === null && z === null) { + this.x = this.curve.one; + this.y = this.curve.one; + this.z = new BN(0); + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + this.z = new BN(z, 16); + } + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); + + this.zOne = this.z === this.curve.one; +} +inherits(JPoint, Base.BasePoint); + +ShortCurve.prototype.jpoint = function jpoint(x, y, z) { + return new JPoint(this, x, y, z); +}; + +JPoint.prototype.toP = function toP() { + if (this.isInfinity()) + return this.curve.point(null, null); + + var zinv = this.z.redInvm(); + var zinv2 = zinv.redSqr(); + var ax = this.x.redMul(zinv2); + var ay = this.y.redMul(zinv2).redMul(zinv); + + return this.curve.point(ax, ay); +}; + +JPoint.prototype.neg = function neg() { + return this.curve.jpoint(this.x, this.y.redNeg(), this.z); +}; + +JPoint.prototype.add = function add(p) { + // O + P = P + if (this.isInfinity()) + return p; + + // P + O = P + if (p.isInfinity()) + return this; + + // 12M + 4S + 7A + var pz2 = p.z.redSqr(); + var z2 = this.z.redSqr(); + var u1 = this.x.redMul(pz2); + var u2 = p.x.redMul(z2); + var s1 = this.y.redMul(pz2.redMul(p.z)); + var s2 = p.y.redMul(z2.redMul(this.z)); + + var h = u1.redSub(u2); + var r = s1.redSub(s2); + if (h.cmpn(0) === 0) { + if (r.cmpn(0) !== 0) + return this.curve.jpoint(null, null, null); + else + return this.dbl(); + } + + var h2 = h.redSqr(); + var h3 = h2.redMul(h); + var v = u1.redMul(h2); + + var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); + var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); + var nz = this.z.redMul(p.z).redMul(h); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.mixedAdd = function mixedAdd(p) { + // O + P = P + if (this.isInfinity()) + return p.toJ(); + + // P + O = P + if (p.isInfinity()) + return this; + + // 8M + 3S + 7A + var z2 = this.z.redSqr(); + var u1 = this.x; + var u2 = p.x.redMul(z2); + var s1 = this.y; + var s2 = p.y.redMul(z2).redMul(this.z); + + var h = u1.redSub(u2); + var r = s1.redSub(s2); + if (h.cmpn(0) === 0) { + if (r.cmpn(0) !== 0) + return this.curve.jpoint(null, null, null); + else + return this.dbl(); + } + + var h2 = h.redSqr(); + var h3 = h2.redMul(h); + var v = u1.redMul(h2); + + var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); + var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); + var nz = this.z.redMul(h); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.dblp = function dblp(pow) { + if (pow === 0) + return this; + if (this.isInfinity()) + return this; + if (!pow) + return this.dbl(); + + if (this.curve.zeroA || this.curve.threeA) { + var r = this; + for (var i = 0; i < pow; i++) + r = r.dbl(); + return r; + } + + // 1M + 2S + 1A + N * (4S + 5M + 8A) + // N = 1 => 6M + 6S + 9A + var a = this.curve.a; + var tinv = this.curve.tinv; + + var jx = this.x; + var jy = this.y; + var jz = this.z; + var jz4 = jz.redSqr().redSqr(); + + // Reuse results + var jyd = jy.redAdd(jy); + for (var i = 0; i < pow; i++) { + var jx2 = jx.redSqr(); + var jyd2 = jyd.redSqr(); + var jyd4 = jyd2.redSqr(); + var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); + + var t1 = jx.redMul(jyd2); + var nx = c.redSqr().redISub(t1.redAdd(t1)); + var t2 = t1.redISub(nx); + var dny = c.redMul(t2); + dny = dny.redIAdd(dny).redISub(jyd4); + var nz = jyd.redMul(jz); + if (i + 1 < pow) + jz4 = jz4.redMul(jyd4); + + jx = nx; + jz = nz; + jyd = dny; + } + + return this.curve.jpoint(jx, jyd.redMul(tinv), jz); +}; + +JPoint.prototype.dbl = function dbl() { + if (this.isInfinity()) + return this; + + if (this.curve.zeroA) + return this._zeroDbl(); + else if (this.curve.threeA) + return this._threeDbl(); + else + return this._dbl(); +}; + +JPoint.prototype._zeroDbl = function _zeroDbl() { + var nx; + var ny; + var nz; + // Z = 1 + if (this.zOne) { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html + // #doubling-mdbl-2007-bl + // 1M + 5S + 14A + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // S = 2 * ((X1 + YY)^2 - XX - YYYY) + var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + s = s.redIAdd(s); + // M = 3 * XX + a; a = 0 + var m = xx.redAdd(xx).redIAdd(xx); + // T = M ^ 2 - 2*S + var t = m.redSqr().redISub(s).redISub(s); + + // 8 * YYYY + var yyyy8 = yyyy.redIAdd(yyyy); + yyyy8 = yyyy8.redIAdd(yyyy8); + yyyy8 = yyyy8.redIAdd(yyyy8); + + // X3 = T + nx = t; + // Y3 = M * (S - T) - 8 * YYYY + ny = m.redMul(s.redISub(t)).redISub(yyyy8); + // Z3 = 2*Y1 + nz = this.y.redAdd(this.y); + } else { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html + // #doubling-dbl-2009-l + // 2M + 5S + 13A + + // A = X1^2 + var a = this.x.redSqr(); + // B = Y1^2 + var b = this.y.redSqr(); + // C = B^2 + var c = b.redSqr(); + // D = 2 * ((X1 + B)^2 - A - C) + var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c); + d = d.redIAdd(d); + // E = 3 * A + var e = a.redAdd(a).redIAdd(a); + // F = E^2 + var f = e.redSqr(); + + // 8 * C + var c8 = c.redIAdd(c); + c8 = c8.redIAdd(c8); + c8 = c8.redIAdd(c8); + + // X3 = F - 2 * D + nx = f.redISub(d).redISub(d); + // Y3 = E * (D - X3) - 8 * C + ny = e.redMul(d.redISub(nx)).redISub(c8); + // Z3 = 2 * Y1 * Z1 + nz = this.y.redMul(this.z); + nz = nz.redIAdd(nz); + } + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype._threeDbl = function _threeDbl() { + var nx; + var ny; + var nz; + // Z = 1 + if (this.zOne) { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html + // #doubling-mdbl-2007-bl + // 1M + 5S + 15A + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // S = 2 * ((X1 + YY)^2 - XX - YYYY) + var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + s = s.redIAdd(s); + // M = 3 * XX + a + var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a); + // T = M^2 - 2 * S + var t = m.redSqr().redISub(s).redISub(s); + // X3 = T + nx = t; + // Y3 = M * (S - T) - 8 * YYYY + var yyyy8 = yyyy.redIAdd(yyyy); + yyyy8 = yyyy8.redIAdd(yyyy8); + yyyy8 = yyyy8.redIAdd(yyyy8); + ny = m.redMul(s.redISub(t)).redISub(yyyy8); + // Z3 = 2 * Y1 + nz = this.y.redAdd(this.y); + } else { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b + // 3M + 5S + + // delta = Z1^2 + var delta = this.z.redSqr(); + // gamma = Y1^2 + var gamma = this.y.redSqr(); + // beta = X1 * gamma + var beta = this.x.redMul(gamma); + // alpha = 3 * (X1 - delta) * (X1 + delta) + var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta)); + alpha = alpha.redAdd(alpha).redIAdd(alpha); + // X3 = alpha^2 - 8 * beta + var beta4 = beta.redIAdd(beta); + beta4 = beta4.redIAdd(beta4); + var beta8 = beta4.redAdd(beta4); + nx = alpha.redSqr().redISub(beta8); + // Z3 = (Y1 + Z1)^2 - gamma - delta + nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta); + // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2 + var ggamma8 = gamma.redSqr(); + ggamma8 = ggamma8.redIAdd(ggamma8); + ggamma8 = ggamma8.redIAdd(ggamma8); + ggamma8 = ggamma8.redIAdd(ggamma8); + ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8); + } + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype._dbl = function _dbl() { + var a = this.curve.a; + + // 4M + 6S + 10A + var jx = this.x; + var jy = this.y; + var jz = this.z; + var jz4 = jz.redSqr().redSqr(); + + var jx2 = jx.redSqr(); + var jy2 = jy.redSqr(); + + var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); + + var jxd4 = jx.redAdd(jx); + jxd4 = jxd4.redIAdd(jxd4); + var t1 = jxd4.redMul(jy2); + var nx = c.redSqr().redISub(t1.redAdd(t1)); + var t2 = t1.redISub(nx); + + var jyd8 = jy2.redSqr(); + jyd8 = jyd8.redIAdd(jyd8); + jyd8 = jyd8.redIAdd(jyd8); + jyd8 = jyd8.redIAdd(jyd8); + var ny = c.redMul(t2).redISub(jyd8); + var nz = jy.redAdd(jy).redMul(jz); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.trpl = function trpl() { + if (!this.curve.zeroA) + return this.dbl().add(this); + + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl + // 5M + 10S + ... + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // ZZ = Z1^2 + var zz = this.z.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // M = 3 * XX + a * ZZ2; a = 0 + var m = xx.redAdd(xx).redIAdd(xx); + // MM = M^2 + var mm = m.redSqr(); + // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM + var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + e = e.redIAdd(e); + e = e.redAdd(e).redIAdd(e); + e = e.redISub(mm); + // EE = E^2 + var ee = e.redSqr(); + // T = 16*YYYY + var t = yyyy.redIAdd(yyyy); + t = t.redIAdd(t); + t = t.redIAdd(t); + t = t.redIAdd(t); + // U = (M + E)^2 - MM - EE - T + var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t); + // X3 = 4 * (X1 * EE - 4 * YY * U) + var yyu4 = yy.redMul(u); + yyu4 = yyu4.redIAdd(yyu4); + yyu4 = yyu4.redIAdd(yyu4); + var nx = this.x.redMul(ee).redISub(yyu4); + nx = nx.redIAdd(nx); + nx = nx.redIAdd(nx); + // Y3 = 8 * Y1 * (U * (T - U) - E * EE) + var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee))); + ny = ny.redIAdd(ny); + ny = ny.redIAdd(ny); + ny = ny.redIAdd(ny); + // Z3 = (Z1 + E)^2 - ZZ - EE + var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.mul = function mul(k, kbase) { + k = new BN(k, kbase); + + return this.curve._wnafMul(this, k); +}; + +JPoint.prototype.eq = function eq(p) { + if (p.type === 'affine') + return this.eq(p.toJ()); + + if (this === p) + return true; + + // x1 * z2^2 == x2 * z1^2 + var z2 = this.z.redSqr(); + var pz2 = p.z.redSqr(); + if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0) + return false; + + // y1 * z2^3 == y2 * z1^3 + var z3 = z2.redMul(this.z); + var pz3 = pz2.redMul(p.z); + return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0; +}; + +JPoint.prototype.eqXToP = function eqXToP(x) { + var zs = this.z.redSqr(); + var rx = x.toRed(this.curve.red).redMul(zs); + if (this.x.cmp(rx) === 0) + return true; + + var xc = x.clone(); + var t = this.curve.redN.redMul(zs); + for (;;) { + xc.iadd(this.curve.n); + if (xc.cmp(this.curve.p) >= 0) + return false; + + rx.redIAdd(t); + if (this.x.cmp(rx) === 0) + return true; + } +}; + +JPoint.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +JPoint.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.z.cmpn(0) === 0; +}; + +},{"../../elliptic":548,"../curve":551,"bn.js":66,"inherits":834}],554:[function(require,module,exports){ +'use strict'; + +var curves = exports; + +var hash = require('hash.js'); +var elliptic = require('../elliptic'); + +var assert = elliptic.utils.assert; + +function PresetCurve(options) { + if (options.type === 'short') + this.curve = new elliptic.curve.short(options); + else if (options.type === 'edwards') + this.curve = new elliptic.curve.edwards(options); + else + this.curve = new elliptic.curve.mont(options); + this.g = this.curve.g; + this.n = this.curve.n; + this.hash = options.hash; + + assert(this.g.validate(), 'Invalid curve'); + assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O'); +} +curves.PresetCurve = PresetCurve; + +function defineCurve(name, options) { + Object.defineProperty(curves, name, { + configurable: true, + enumerable: true, + get: function() { + var curve = new PresetCurve(options); + Object.defineProperty(curves, name, { + configurable: true, + enumerable: true, + value: curve + }); + return curve; + } + }); +} + +defineCurve('p192', { + type: 'short', + prime: 'p192', + p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff', + a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc', + b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1', + n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831', + hash: hash.sha256, + gRed: false, + g: [ + '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012', + '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811' + ] +}); + +defineCurve('p224', { + type: 'short', + prime: 'p224', + p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001', + a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe', + b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4', + n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d', + hash: hash.sha256, + gRed: false, + g: [ + 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21', + 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34' + ] +}); + +defineCurve('p256', { + type: 'short', + prime: null, + p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff', + a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc', + b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b', + n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551', + hash: hash.sha256, + gRed: false, + g: [ + '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296', + '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5' + ] +}); + +defineCurve('p384', { + type: 'short', + prime: null, + p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'fffffffe ffffffff 00000000 00000000 ffffffff', + a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'fffffffe ffffffff 00000000 00000000 fffffffc', + b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' + + '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef', + n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' + + 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973', + hash: hash.sha384, + gRed: false, + g: [ + 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' + + '5502f25d bf55296c 3a545e38 72760ab7', + '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' + + '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f' + ] +}); + +defineCurve('p521', { + type: 'short', + prime: null, + p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff ffffffff', + a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff fffffffc', + b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' + + '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' + + '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00', + n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' + + 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409', + hash: hash.sha512, + gRed: false, + g: [ + '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' + + '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' + + 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66', + '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' + + '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' + + '3fad0761 353c7086 a272c240 88be9476 9fd16650' + ] +}); + +defineCurve('curve25519', { + type: 'mont', + prime: 'p25519', + p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', + a: '76d06', + b: '1', + n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', + hash: hash.sha256, + gRed: false, + g: [ + '9' + ] +}); + +defineCurve('ed25519', { + type: 'edwards', + prime: 'p25519', + p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', + a: '-1', + c: '1', + // -121665 * (121666^(-1)) (mod P) + d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3', + n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', + hash: hash.sha256, + gRed: false, + g: [ + '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a', + + // 4/5 + '6666666666666666666666666666666666666666666666666666666666666658' + ] +}); + +var pre; +try { + pre = require('./precomputed/secp256k1'); +} catch (e) { + pre = undefined; +} + +defineCurve('secp256k1', { + type: 'short', + prime: 'k256', + p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f', + a: '0', + b: '7', + n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141', + h: '1', + hash: hash.sha256, + + // Precomputed endomorphism + beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee', + lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72', + basis: [ + { + a: '3086d221a7d46bcde86c90e49284eb15', + b: '-e4437ed6010e88286f547fa90abfe4c3' + }, + { + a: '114ca50f7a8e2f3f657c1108d9d44cfd8', + b: '3086d221a7d46bcde86c90e49284eb15' + } + ], + + gRed: false, + g: [ + '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', + '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8', + pre + ] +}); + +},{"../elliptic":548,"./precomputed/secp256k1":561,"hash.js":803}],555:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var HmacDRBG = require('hmac-drbg'); +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; +var assert = utils.assert; + +var KeyPair = require('./key'); +var Signature = require('./signature'); + +function EC(options) { + if (!(this instanceof EC)) + return new EC(options); + + // Shortcut `elliptic.ec(curve-name)` + if (typeof options === 'string') { + assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options); + + options = elliptic.curves[options]; + } + + // Shortcut for `elliptic.ec(elliptic.curves.curveName)` + if (options instanceof elliptic.curves.PresetCurve) + options = { curve: options }; + + this.curve = options.curve.curve; + this.n = this.curve.n; + this.nh = this.n.ushrn(1); + this.g = this.curve.g; + + // Point on curve + this.g = options.curve.g; + this.g.precompute(options.curve.n.bitLength() + 1); + + // Hash for function for DRBG + this.hash = options.hash || options.curve.hash; +} +module.exports = EC; + +EC.prototype.keyPair = function keyPair(options) { + return new KeyPair(this, options); +}; + +EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) { + return KeyPair.fromPrivate(this, priv, enc); +}; + +EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) { + return KeyPair.fromPublic(this, pub, enc); +}; + +EC.prototype.genKeyPair = function genKeyPair(options) { + if (!options) + options = {}; + + // Instantiate Hmac_DRBG + var drbg = new HmacDRBG({ + hash: this.hash, + pers: options.pers, + persEnc: options.persEnc || 'utf8', + entropy: options.entropy || elliptic.rand(this.hash.hmacStrength), + entropyEnc: options.entropy && options.entropyEnc || 'utf8', + nonce: this.n.toArray() + }); + + var bytes = this.n.byteLength(); + var ns2 = this.n.sub(new BN(2)); + do { + var priv = new BN(drbg.generate(bytes)); + if (priv.cmp(ns2) > 0) + continue; + + priv.iaddn(1); + return this.keyFromPrivate(priv); + } while (true); +}; + +EC.prototype._truncateToN = function truncateToN(msg, truncOnly) { + var delta = msg.byteLength() * 8 - this.n.bitLength(); + if (delta > 0) + msg = msg.ushrn(delta); + if (!truncOnly && msg.cmp(this.n) >= 0) + return msg.sub(this.n); + else + return msg; +}; + +EC.prototype.sign = function sign(msg, key, enc, options) { + if (typeof enc === 'object') { + options = enc; + enc = null; + } + if (!options) + options = {}; + + key = this.keyFromPrivate(key, enc); + msg = this._truncateToN(new BN(msg, 16)); + + // Zero-extend key to provide enough entropy + var bytes = this.n.byteLength(); + var bkey = key.getPrivate().toArray('be', bytes); + + // Zero-extend nonce to have the same byte size as N + var nonce = msg.toArray('be', bytes); + + // Instantiate Hmac_DRBG + var drbg = new HmacDRBG({ + hash: this.hash, + entropy: bkey, + nonce: nonce, + pers: options.pers, + persEnc: options.persEnc || 'utf8' + }); + + // Number of bytes to generate + var ns1 = this.n.sub(new BN(1)); + + for (var iter = 0; true; iter++) { + var k = options.k ? + options.k(iter) : + new BN(drbg.generate(this.n.byteLength())); + k = this._truncateToN(k, true); + if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0) + continue; + + var kp = this.g.mul(k); + if (kp.isInfinity()) + continue; + + var kpX = kp.getX(); + var r = kpX.umod(this.n); + if (r.cmpn(0) === 0) + continue; + + var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg)); + s = s.umod(this.n); + if (s.cmpn(0) === 0) + continue; + + var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | + (kpX.cmp(r) !== 0 ? 2 : 0); + + // Use complement of `s`, if it is > `n / 2` + if (options.canonical && s.cmp(this.nh) > 0) { + s = this.n.sub(s); + recoveryParam ^= 1; + } + + return new Signature({ r: r, s: s, recoveryParam: recoveryParam }); + } +}; + +EC.prototype.verify = function verify(msg, signature, key, enc) { + msg = this._truncateToN(new BN(msg, 16)); + key = this.keyFromPublic(key, enc); + signature = new Signature(signature, 'hex'); + + // Perform primitive values validation + var r = signature.r; + var s = signature.s; + if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0) + return false; + if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0) + return false; + + // Validate signature + var sinv = s.invm(this.n); + var u1 = sinv.mul(msg).umod(this.n); + var u2 = sinv.mul(r).umod(this.n); + + if (!this.curve._maxwellTrick) { + var p = this.g.mulAdd(u1, key.getPublic(), u2); + if (p.isInfinity()) + return false; + + return p.getX().umod(this.n).cmp(r) === 0; + } + + // NOTE: Greg Maxwell's trick, inspired by: + // https://git.io/vad3K + + var p = this.g.jmulAdd(u1, key.getPublic(), u2); + if (p.isInfinity()) + return false; + + // Compare `p.x` of Jacobian point with `r`, + // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the + // inverse of `p.z^2` + return p.eqXToP(r); +}; + +EC.prototype.recoverPubKey = function(msg, signature, j, enc) { + assert((3 & j) === j, 'The recovery param is more than two bits'); + signature = new Signature(signature, enc); + + var n = this.n; + var e = new BN(msg); + var r = signature.r; + var s = signature.s; + + // A set LSB signifies that the y-coordinate is odd + var isYOdd = j & 1; + var isSecondKey = j >> 1; + if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey) + throw new Error('Unable to find sencond key candinate'); + + // 1.1. Let x = r + jn. + if (isSecondKey) + r = this.curve.pointFromX(r.add(this.curve.n), isYOdd); + else + r = this.curve.pointFromX(r, isYOdd); + + var rInv = signature.r.invm(n); + var s1 = n.sub(e).mul(rInv).umod(n); + var s2 = s.mul(rInv).umod(n); + + // 1.6.1 Compute Q = r^-1 (sR - eG) + // Q = r^-1 (sR + -eG) + return this.g.mulAdd(s1, r, s2); +}; + +EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) { + signature = new Signature(signature, enc); + if (signature.recoveryParam !== null) + return signature.recoveryParam; + + for (var i = 0; i < 4; i++) { + var Qprime; + try { + Qprime = this.recoverPubKey(e, signature, i); + } catch (e) { + continue; + } + + if (Qprime.eq(Q)) + return i; + } + throw new Error('Unable to find valid recovery factor'); +}; + +},{"../../elliptic":548,"./key":556,"./signature":557,"bn.js":66,"hmac-drbg":816}],556:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; +var assert = utils.assert; + +function KeyPair(ec, options) { + this.ec = ec; + this.priv = null; + this.pub = null; + + // KeyPair(ec, { priv: ..., pub: ... }) + if (options.priv) + this._importPrivate(options.priv, options.privEnc); + if (options.pub) + this._importPublic(options.pub, options.pubEnc); +} +module.exports = KeyPair; + +KeyPair.fromPublic = function fromPublic(ec, pub, enc) { + if (pub instanceof KeyPair) + return pub; + + return new KeyPair(ec, { + pub: pub, + pubEnc: enc + }); +}; + +KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) { + if (priv instanceof KeyPair) + return priv; + + return new KeyPair(ec, { + priv: priv, + privEnc: enc + }); +}; + +KeyPair.prototype.validate = function validate() { + var pub = this.getPublic(); + + if (pub.isInfinity()) + return { result: false, reason: 'Invalid public key' }; + if (!pub.validate()) + return { result: false, reason: 'Public key is not a point' }; + if (!pub.mul(this.ec.curve.n).isInfinity()) + return { result: false, reason: 'Public key * N != O' }; + + return { result: true, reason: null }; +}; + +KeyPair.prototype.getPublic = function getPublic(compact, enc) { + // compact is optional argument + if (typeof compact === 'string') { + enc = compact; + compact = null; + } + + if (!this.pub) + this.pub = this.ec.g.mul(this.priv); + + if (!enc) + return this.pub; + + return this.pub.encode(enc, compact); +}; + +KeyPair.prototype.getPrivate = function getPrivate(enc) { + if (enc === 'hex') + return this.priv.toString(16, 2); + else + return this.priv; +}; + +KeyPair.prototype._importPrivate = function _importPrivate(key, enc) { + this.priv = new BN(key, enc || 16); + + // Ensure that the priv won't be bigger than n, otherwise we may fail + // in fixed multiplication method + this.priv = this.priv.umod(this.ec.curve.n); +}; + +KeyPair.prototype._importPublic = function _importPublic(key, enc) { + if (key.x || key.y) { + // Montgomery points only have an `x` coordinate. + // Weierstrass/Edwards points on the other hand have both `x` and + // `y` coordinates. + if (this.ec.curve.type === 'mont') { + assert(key.x, 'Need x coordinate'); + } else if (this.ec.curve.type === 'short' || + this.ec.curve.type === 'edwards') { + assert(key.x && key.y, 'Need both x and y coordinate'); + } + this.pub = this.ec.curve.point(key.x, key.y); + return; + } + this.pub = this.ec.curve.decodePoint(key, enc); +}; + +// ECDH +KeyPair.prototype.derive = function derive(pub) { + return pub.mul(this.priv).getX(); +}; + +// ECDSA +KeyPair.prototype.sign = function sign(msg, enc, options) { + return this.ec.sign(msg, this, enc, options); +}; + +KeyPair.prototype.verify = function verify(msg, signature) { + return this.ec.verify(msg, signature, this); +}; + +KeyPair.prototype.inspect = function inspect() { + return ''; +}; + +},{"../../elliptic":548,"bn.js":66}],557:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); + +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; +var assert = utils.assert; + +function Signature(options, enc) { + if (options instanceof Signature) + return options; + + if (this._importDER(options, enc)) + return; + + assert(options.r && options.s, 'Signature without r or s'); + this.r = new BN(options.r, 16); + this.s = new BN(options.s, 16); + if (options.recoveryParam === undefined) + this.recoveryParam = null; + else + this.recoveryParam = options.recoveryParam; +} +module.exports = Signature; + +function Position() { + this.place = 0; +} + +function getLength(buf, p) { + var initial = buf[p.place++]; + if (!(initial & 0x80)) { + return initial; + } + var octetLen = initial & 0xf; + var val = 0; + for (var i = 0, off = p.place; i < octetLen; i++, off++) { + val <<= 8; + val |= buf[off]; + } + p.place = off; + return val; +} + +function rmPadding(buf) { + var i = 0; + var len = buf.length - 1; + while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) { + i++; + } + if (i === 0) { + return buf; + } + return buf.slice(i); +} + +Signature.prototype._importDER = function _importDER(data, enc) { + data = utils.toArray(data, enc); + var p = new Position(); + if (data[p.place++] !== 0x30) { + return false; + } + var len = getLength(data, p); + if ((len + p.place) !== data.length) { + return false; + } + if (data[p.place++] !== 0x02) { + return false; + } + var rlen = getLength(data, p); + var r = data.slice(p.place, rlen + p.place); + p.place += rlen; + if (data[p.place++] !== 0x02) { + return false; + } + var slen = getLength(data, p); + if (data.length !== slen + p.place) { + return false; + } + var s = data.slice(p.place, slen + p.place); + if (r[0] === 0 && (r[1] & 0x80)) { + r = r.slice(1); + } + if (s[0] === 0 && (s[1] & 0x80)) { + s = s.slice(1); + } + + this.r = new BN(r); + this.s = new BN(s); + this.recoveryParam = null; + + return true; +}; + +function constructLength(arr, len) { + if (len < 0x80) { + arr.push(len); + return; + } + var octets = 1 + (Math.log(len) / Math.LN2 >>> 3); + arr.push(octets | 0x80); + while (--octets) { + arr.push((len >>> (octets << 3)) & 0xff); + } + arr.push(len); +} + +Signature.prototype.toDER = function toDER(enc) { + var r = this.r.toArray(); + var s = this.s.toArray(); + + // Pad values + if (r[0] & 0x80) + r = [ 0 ].concat(r); + // Pad values + if (s[0] & 0x80) + s = [ 0 ].concat(s); + + r = rmPadding(r); + s = rmPadding(s); + + while (!s[0] && !(s[1] & 0x80)) { + s = s.slice(1); + } + var arr = [ 0x02 ]; + constructLength(arr, r.length); + arr = arr.concat(r); + arr.push(0x02); + constructLength(arr, s.length); + var backHalf = arr.concat(s); + var res = [ 0x30 ]; + constructLength(res, backHalf.length); + res = res.concat(backHalf); + return utils.encode(res, enc); +}; + +},{"../../elliptic":548,"bn.js":66}],558:[function(require,module,exports){ +'use strict'; + +var hash = require('hash.js'); +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; +var assert = utils.assert; +var parseBytes = utils.parseBytes; +var KeyPair = require('./key'); +var Signature = require('./signature'); + +function EDDSA(curve) { + assert(curve === 'ed25519', 'only tested with ed25519 so far'); + + if (!(this instanceof EDDSA)) + return new EDDSA(curve); + + var curve = elliptic.curves[curve].curve; + this.curve = curve; + this.g = curve.g; + this.g.precompute(curve.n.bitLength() + 1); + + this.pointClass = curve.point().constructor; + this.encodingLength = Math.ceil(curve.n.bitLength() / 8); + this.hash = hash.sha512; +} + +module.exports = EDDSA; + +/** +* @param {Array|String} message - message bytes +* @param {Array|String|KeyPair} secret - secret bytes or a keypair +* @returns {Signature} - signature +*/ +EDDSA.prototype.sign = function sign(message, secret) { + message = parseBytes(message); + var key = this.keyFromSecret(secret); + var r = this.hashInt(key.messagePrefix(), message); + var R = this.g.mul(r); + var Rencoded = this.encodePoint(R); + var s_ = this.hashInt(Rencoded, key.pubBytes(), message) + .mul(key.priv()); + var S = r.add(s_).umod(this.curve.n); + return this.makeSignature({ R: R, S: S, Rencoded: Rencoded }); +}; + +/** +* @param {Array} message - message bytes +* @param {Array|String|Signature} sig - sig bytes +* @param {Array|String|Point|KeyPair} pub - public key +* @returns {Boolean} - true if public key matches sig of message +*/ +EDDSA.prototype.verify = function verify(message, sig, pub) { + message = parseBytes(message); + sig = this.makeSignature(sig); + var key = this.keyFromPublic(pub); + var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message); + var SG = this.g.mul(sig.S()); + var RplusAh = sig.R().add(key.pub().mul(h)); + return RplusAh.eq(SG); +}; + +EDDSA.prototype.hashInt = function hashInt() { + var hash = this.hash(); + for (var i = 0; i < arguments.length; i++) + hash.update(arguments[i]); + return utils.intFromLE(hash.digest()).umod(this.curve.n); +}; + +EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) { + return KeyPair.fromPublic(this, pub); +}; + +EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) { + return KeyPair.fromSecret(this, secret); +}; + +EDDSA.prototype.makeSignature = function makeSignature(sig) { + if (sig instanceof Signature) + return sig; + return new Signature(this, sig); +}; + +/** +* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2 +* +* EDDSA defines methods for encoding and decoding points and integers. These are +* helper convenience methods, that pass along to utility functions implied +* parameters. +* +*/ +EDDSA.prototype.encodePoint = function encodePoint(point) { + var enc = point.getY().toArray('le', this.encodingLength); + enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0; + return enc; +}; + +EDDSA.prototype.decodePoint = function decodePoint(bytes) { + bytes = utils.parseBytes(bytes); + + var lastIx = bytes.length - 1; + var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80); + var xIsOdd = (bytes[lastIx] & 0x80) !== 0; + + var y = utils.intFromLE(normed); + return this.curve.pointFromY(y, xIsOdd); +}; + +EDDSA.prototype.encodeInt = function encodeInt(num) { + return num.toArray('le', this.encodingLength); +}; + +EDDSA.prototype.decodeInt = function decodeInt(bytes) { + return utils.intFromLE(bytes); +}; + +EDDSA.prototype.isPoint = function isPoint(val) { + return val instanceof this.pointClass; +}; + +},{"../../elliptic":548,"./key":559,"./signature":560,"hash.js":803}],559:[function(require,module,exports){ +'use strict'; + +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; +var assert = utils.assert; +var parseBytes = utils.parseBytes; +var cachedProperty = utils.cachedProperty; + +/** +* @param {EDDSA} eddsa - instance +* @param {Object} params - public/private key parameters +* +* @param {Array} [params.secret] - secret seed bytes +* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms) +* @param {Array} [params.pub] - public key point encoded as bytes +* +*/ +function KeyPair(eddsa, params) { + this.eddsa = eddsa; + this._secret = parseBytes(params.secret); + if (eddsa.isPoint(params.pub)) + this._pub = params.pub; + else + this._pubBytes = parseBytes(params.pub); +} + +KeyPair.fromPublic = function fromPublic(eddsa, pub) { + if (pub instanceof KeyPair) + return pub; + return new KeyPair(eddsa, { pub: pub }); +}; + +KeyPair.fromSecret = function fromSecret(eddsa, secret) { + if (secret instanceof KeyPair) + return secret; + return new KeyPair(eddsa, { secret: secret }); +}; + +KeyPair.prototype.secret = function secret() { + return this._secret; +}; + +cachedProperty(KeyPair, 'pubBytes', function pubBytes() { + return this.eddsa.encodePoint(this.pub()); +}); + +cachedProperty(KeyPair, 'pub', function pub() { + if (this._pubBytes) + return this.eddsa.decodePoint(this._pubBytes); + return this.eddsa.g.mul(this.priv()); +}); + +cachedProperty(KeyPair, 'privBytes', function privBytes() { + var eddsa = this.eddsa; + var hash = this.hash(); + var lastIx = eddsa.encodingLength - 1; + + var a = hash.slice(0, eddsa.encodingLength); + a[0] &= 248; + a[lastIx] &= 127; + a[lastIx] |= 64; + + return a; +}); + +cachedProperty(KeyPair, 'priv', function priv() { + return this.eddsa.decodeInt(this.privBytes()); +}); + +cachedProperty(KeyPair, 'hash', function hash() { + return this.eddsa.hash().update(this.secret()).digest(); +}); + +cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() { + return this.hash().slice(this.eddsa.encodingLength); +}); + +KeyPair.prototype.sign = function sign(message) { + assert(this._secret, 'KeyPair can only verify'); + return this.eddsa.sign(message, this); +}; + +KeyPair.prototype.verify = function verify(message, sig) { + return this.eddsa.verify(message, sig, this); +}; + +KeyPair.prototype.getSecret = function getSecret(enc) { + assert(this._secret, 'KeyPair is public only'); + return utils.encode(this.secret(), enc); +}; + +KeyPair.prototype.getPublic = function getPublic(enc) { + return utils.encode(this.pubBytes(), enc); +}; + +module.exports = KeyPair; + +},{"../../elliptic":548}],560:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; +var assert = utils.assert; +var cachedProperty = utils.cachedProperty; +var parseBytes = utils.parseBytes; + +/** +* @param {EDDSA} eddsa - eddsa instance +* @param {Array|Object} sig - +* @param {Array|Point} [sig.R] - R point as Point or bytes +* @param {Array|bn} [sig.S] - S scalar as bn or bytes +* @param {Array} [sig.Rencoded] - R point encoded +* @param {Array} [sig.Sencoded] - S scalar encoded +*/ +function Signature(eddsa, sig) { + this.eddsa = eddsa; + + if (typeof sig !== 'object') + sig = parseBytes(sig); + + if (Array.isArray(sig)) { + sig = { + R: sig.slice(0, eddsa.encodingLength), + S: sig.slice(eddsa.encodingLength) + }; + } + + assert(sig.R && sig.S, 'Signature without R or S'); + + if (eddsa.isPoint(sig.R)) + this._R = sig.R; + if (sig.S instanceof BN) + this._S = sig.S; + + this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded; + this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded; +} + +cachedProperty(Signature, 'S', function S() { + return this.eddsa.decodeInt(this.Sencoded()); +}); + +cachedProperty(Signature, 'R', function R() { + return this.eddsa.decodePoint(this.Rencoded()); +}); + +cachedProperty(Signature, 'Rencoded', function Rencoded() { + return this.eddsa.encodePoint(this.R()); +}); + +cachedProperty(Signature, 'Sencoded', function Sencoded() { + return this.eddsa.encodeInt(this.S()); +}); + +Signature.prototype.toBytes = function toBytes() { + return this.Rencoded().concat(this.Sencoded()); +}; + +Signature.prototype.toHex = function toHex() { + return utils.encode(this.toBytes(), 'hex').toUpperCase(); +}; + +module.exports = Signature; + +},{"../../elliptic":548,"bn.js":66}],561:[function(require,module,exports){ +module.exports = { + doubles: { + step: 4, + points: [ + [ + 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a', + 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821' + ], + [ + '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508', + '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf' + ], + [ + '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739', + 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695' + ], + [ + '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640', + '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9' + ], + [ + '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c', + '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36' + ], + [ + '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda', + '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f' + ], + [ + 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa', + '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999' + ], + [ + '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0', + 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09' + ], + [ + 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d', + '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d' + ], + [ + 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d', + 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088' + ], + [ + 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1', + '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d' + ], + [ + '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0', + '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8' + ], + [ + '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047', + '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a' + ], + [ + '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862', + '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453' + ], + [ + '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7', + '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160' + ], + [ + '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd', + '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0' + ], + [ + '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83', + '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6' + ], + [ + '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a', + '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589' + ], + [ + '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8', + 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17' + ], + [ + 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d', + '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda' + ], + [ + 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725', + '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd' + ], + [ + '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754', + '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2' + ], + [ + '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c', + '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6' + ], + [ + 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6', + '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f' + ], + [ + '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39', + 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01' + ], + [ + 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891', + '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3' + ], + [ + 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b', + 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f' + ], + [ + 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03', + '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7' + ], + [ + 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d', + 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78' + ], + [ + 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070', + '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1' + ], + [ + '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4', + 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150' + ], + [ + '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da', + '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82' + ], + [ + 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11', + '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc' + ], + [ + '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e', + 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b' + ], + [ + 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41', + '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51' + ], + [ + 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef', + '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45' + ], + [ + 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8', + 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120' + ], + [ + '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d', + '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84' + ], + [ + '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96', + '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d' + ], + [ + '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd', + 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d' + ], + [ + '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5', + '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8' + ], + [ + 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266', + '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8' + ], + [ + '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71', + '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac' + ], + [ + '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac', + 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f' + ], + [ + '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751', + '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962' + ], + [ + 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e', + '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907' + ], + [ + '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241', + 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec' + ], + [ + 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3', + 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d' + ], + [ + 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f', + '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414' + ], + [ + '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19', + 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd' + ], + [ + '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be', + 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0' + ], + [ + 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9', + '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811' + ], + [ + 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2', + '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1' + ], + [ + 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13', + '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c' + ], + [ + '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c', + 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73' + ], + [ + '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba', + '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd' + ], + [ + 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151', + 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405' + ], + [ + '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073', + 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589' + ], + [ + '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458', + '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e' + ], + [ + '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b', + '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27' + ], + [ + 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366', + 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1' + ], + [ + '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa', + '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482' + ], + [ + '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0', + '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945' + ], + [ + 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787', + '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573' + ], + [ + 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e', + 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82' + ] + ] + }, + naf: { + wnd: 7, + points: [ + [ + 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9', + '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672' + ], + [ + '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4', + 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6' + ], + [ + '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc', + '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da' + ], + [ + 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe', + 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37' + ], + [ + '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb', + 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b' + ], + [ + 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8', + 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81' + ], + [ + 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e', + '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58' + ], + [ + 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34', + '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77' + ], + [ + '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c', + '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a' + ], + [ + '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5', + '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c' + ], + [ + '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f', + '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67' + ], + [ + '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714', + '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402' + ], + [ + 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729', + 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55' + ], + [ + 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db', + '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482' + ], + [ + '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4', + 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82' + ], + [ + '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5', + 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396' + ], + [ + '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479', + '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49' + ], + [ + '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d', + '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf' + ], + [ + '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f', + '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a' + ], + [ + '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb', + 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7' + ], + [ + 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9', + 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933' + ], + [ + '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963', + '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a' + ], + [ + '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74', + '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6' + ], + [ + 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530', + 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37' + ], + [ + '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b', + '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e' + ], + [ + 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247', + 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6' + ], + [ + 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1', + 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476' + ], + [ + '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120', + '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40' + ], + [ + '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435', + '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61' + ], + [ + '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18', + '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683' + ], + [ + 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8', + '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5' + ], + [ + '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb', + '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b' + ], + [ + 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f', + '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417' + ], + [ + '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143', + 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868' + ], + [ + '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba', + 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a' + ], + [ + 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45', + 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6' + ], + [ + '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a', + '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996' + ], + [ + '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e', + 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e' + ], + [ + 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8', + 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d' + ], + [ + '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c', + '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2' + ], + [ + '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519', + 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e' + ], + [ + '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab', + '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437' + ], + [ + '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca', + 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311' + ], + [ + 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf', + '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4' + ], + [ + '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610', + '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575' + ], + [ + '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4', + 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d' + ], + [ + '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c', + 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d' + ], + [ + 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940', + 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629' + ], + [ + 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980', + 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06' + ], + [ + '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3', + '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374' + ], + [ + '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf', + '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee' + ], + [ + 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63', + '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1' + ], + [ + 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448', + 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b' + ], + [ + '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf', + '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661' + ], + [ + '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5', + '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6' + ], + [ + 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6', + '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e' + ], + [ + '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5', + '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d' + ], + [ + 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99', + 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc' + ], + [ + '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51', + 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4' + ], + [ + '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5', + '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c' + ], + [ + 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5', + '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b' + ], + [ + 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997', + '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913' + ], + [ + '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881', + '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154' + ], + [ + '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5', + '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865' + ], + [ + '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66', + 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc' + ], + [ + '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726', + 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224' + ], + [ + '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede', + '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e' + ], + [ + '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94', + '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6' + ], + [ + '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31', + '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511' + ], + [ + '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51', + 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b' + ], + [ + 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252', + 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2' + ], + [ + '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5', + 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c' + ], + [ + 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b', + '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3' + ], + [ + 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4', + '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d' + ], + [ + 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f', + '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700' + ], + [ + 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889', + '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4' + ], + [ + '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246', + 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196' + ], + [ + '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984', + '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4' + ], + [ + '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a', + 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257' + ], + [ + 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030', + 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13' + ], + [ + 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197', + '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096' + ], + [ + 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593', + 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38' + ], + [ + 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef', + '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f' + ], + [ + '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38', + '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448' + ], + [ + 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a', + '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a' + ], + [ + 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111', + '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4' + ], + [ + '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502', + '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437' + ], + [ + '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea', + 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7' + ], + [ + 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26', + '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d' + ], + [ + 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986', + '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a' + ], + [ + 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e', + '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54' + ], + [ + '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4', + '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77' + ], + [ + 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda', + 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517' + ], + [ + '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859', + 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10' + ], + [ + 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f', + 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125' + ], + [ + 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c', + '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e' + ], + [ + '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942', + 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1' + ], + [ + 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a', + '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2' + ], + [ + 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80', + '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423' + ], + [ + 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d', + '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8' + ], + [ + '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1', + 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758' + ], + [ + '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63', + 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375' + ], + [ + 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352', + '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d' + ], + [ + '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193', + 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec' + ], + [ + '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00', + '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0' + ], + [ + '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58', + 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c' + ], + [ + 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7', + 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4' + ], + [ + '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8', + 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f' + ], + [ + '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e', + '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649' + ], + [ + '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d', + 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826' + ], + [ + '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b', + '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5' + ], + [ + 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f', + 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87' + ], + [ + '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6', + '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b' + ], + [ + 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297', + '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc' + ], + [ + '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a', + '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c' + ], + [ + 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c', + 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f' + ], + [ + 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52', + '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a' + ], + [ + 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb', + 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46' + ], + [ + '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065', + 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f' + ], + [ + '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917', + '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03' + ], + [ + '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9', + 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08' + ], + [ + '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3', + '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8' + ], + [ + '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57', + '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373' + ], + [ + '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66', + 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3' + ], + [ + '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8', + '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8' + ], + [ + '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721', + '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1' + ], + [ + '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180', + '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9' + ] + ] + } +}; + +},{}],562:[function(require,module,exports){ +'use strict'; + +var utils = exports; +var BN = require('bn.js'); +var minAssert = require('minimalistic-assert'); +var minUtils = require('minimalistic-crypto-utils'); + +utils.assert = minAssert; +utils.toArray = minUtils.toArray; +utils.zero2 = minUtils.zero2; +utils.toHex = minUtils.toHex; +utils.encode = minUtils.encode; + +// Represent num in a w-NAF form +function getNAF(num, w) { + var naf = []; + var ws = 1 << (w + 1); + var k = num.clone(); + while (k.cmpn(1) >= 0) { + var z; + if (k.isOdd()) { + var mod = k.andln(ws - 1); + if (mod > (ws >> 1) - 1) + z = (ws >> 1) - mod; + else + z = mod; + k.isubn(z); + } else { + z = 0; + } + naf.push(z); + + // Optimization, shift by word if possible + var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1; + for (var i = 1; i < shift; i++) + naf.push(0); + k.iushrn(shift); + } + + return naf; +} +utils.getNAF = getNAF; + +// Represent k1, k2 in a Joint Sparse Form +function getJSF(k1, k2) { + var jsf = [ + [], + [] + ]; + + k1 = k1.clone(); + k2 = k2.clone(); + var d1 = 0; + var d2 = 0; + while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) { + + // First phase + var m14 = (k1.andln(3) + d1) & 3; + var m24 = (k2.andln(3) + d2) & 3; + if (m14 === 3) + m14 = -1; + if (m24 === 3) + m24 = -1; + var u1; + if ((m14 & 1) === 0) { + u1 = 0; + } else { + var m8 = (k1.andln(7) + d1) & 7; + if ((m8 === 3 || m8 === 5) && m24 === 2) + u1 = -m14; + else + u1 = m14; + } + jsf[0].push(u1); + + var u2; + if ((m24 & 1) === 0) { + u2 = 0; + } else { + var m8 = (k2.andln(7) + d2) & 7; + if ((m8 === 3 || m8 === 5) && m14 === 2) + u2 = -m24; + else + u2 = m24; + } + jsf[1].push(u2); + + // Second phase + if (2 * d1 === u1 + 1) + d1 = 1 - d1; + if (2 * d2 === u2 + 1) + d2 = 1 - d2; + k1.iushrn(1); + k2.iushrn(1); + } + + return jsf; +} +utils.getJSF = getJSF; + +function cachedProperty(obj, name, computer) { + var key = '_' + name; + obj.prototype[name] = function cachedProperty() { + return this[key] !== undefined ? this[key] : + this[key] = computer.call(this); + }; +} +utils.cachedProperty = cachedProperty; + +function parseBytes(bytes) { + return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') : + bytes; +} +utils.parseBytes = parseBytes; + +function intFromLE(bytes) { + return new BN(bytes, 'hex', 'le'); +} +utils.intFromLE = intFromLE; + + +},{"bn.js":66,"minimalistic-assert":960,"minimalistic-crypto-utils":961}],563:[function(require,module,exports){ +module.exports={ + "_args": [ + [ + "elliptic@6.4.1", + "/home/yann/Remix/remix-ide" + ] + ], + "_development": true, + "_from": "elliptic@6.4.1", + "_id": "elliptic@6.4.1", + "_inBundle": false, + "_integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "_location": "/elliptic", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "elliptic@6.4.1", + "name": "elliptic", + "escapedName": "elliptic", + "rawSpec": "6.4.1", + "saveSpec": null, + "fetchSpec": "6.4.1" + }, + "_requiredBy": [ + "/browserify-sign", + "/create-ecdh", + "/eth-lib", + "/secp256k1", + "/web3-eth-accounts/eth-lib" + ], + "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", + "_spec": "6.4.1", + "_where": "/home/yann/Remix/remix-ide", + "author": { + "name": "Fedor Indutny", + "email": "fedor@indutny.com" + }, + "bugs": { + "url": "https://github.com/indutny/elliptic/issues" + }, + "dependencies": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + }, + "description": "EC cryptography", + "devDependencies": { + "brfs": "^1.4.3", + "coveralls": "^2.11.3", + "grunt": "^0.4.5", + "grunt-browserify": "^5.0.0", + "grunt-cli": "^1.2.0", + "grunt-contrib-connect": "^1.0.0", + "grunt-contrib-copy": "^1.0.0", + "grunt-contrib-uglify": "^1.0.1", + "grunt-mocha-istanbul": "^3.0.1", + "grunt-saucelabs": "^8.6.2", + "istanbul": "^0.4.2", + "jscs": "^2.9.0", + "jshint": "^2.6.0", + "mocha": "^2.1.0" + }, + "files": [ + "lib" + ], + "homepage": "https://github.com/indutny/elliptic", + "keywords": [ + "EC", + "Elliptic", + "curve", + "Cryptography" + ], + "license": "MIT", + "main": "lib/elliptic.js", + "name": "elliptic", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/indutny/elliptic.git" + }, + "scripts": { + "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js", + "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js", + "lint": "npm run jscs && npm run jshint", + "test": "npm run lint && npm run unit", + "unit": "istanbul test _mocha --reporter=spec test/index.js", + "version": "grunt dist && git add dist/" + }, + "version": "6.4.1" +} + +},{}],564:[function(require,module,exports){ +var punycode = require('punycode'); +var revEntities = require('./reversed.json'); + +module.exports = encode; + +function encode (str, opts) { + if (typeof str !== 'string') { + throw new TypeError('Expected a String'); + } + if (!opts) opts = {}; + + var numeric = true; + if (opts.named) numeric = false; + if (opts.numeric !== undefined) numeric = opts.numeric; + + var special = opts.special || { + '"': true, "'": true, + '<': true, '>': true, + '&': true + }; + + var codePoints = punycode.ucs2.decode(str); + var chars = []; + for (var i = 0; i < codePoints.length; i++) { + var cc = codePoints[i]; + var c = punycode.ucs2.encode([ cc ]); + var e = revEntities[cc]; + if (e && (cc >= 127 || special[c]) && !numeric) { + chars.push('&' + (/;$/.test(e) ? e : e + ';')); + } + else if (cc < 32 || cc >= 127 || special[c]) { + chars.push('&#' + cc + ';'); + } + else { + chars.push(c); + } + } + return chars.join(''); +} + +},{"./reversed.json":565,"punycode":110}],565:[function(require,module,exports){ +module.exports={ + "9": "Tab;", + "10": "NewLine;", + "33": "excl;", + "34": "quot;", + "35": "num;", + "36": "dollar;", + "37": "percnt;", + "38": "amp;", + "39": "apos;", + "40": "lpar;", + "41": "rpar;", + "42": "midast;", + "43": "plus;", + "44": "comma;", + "46": "period;", + "47": "sol;", + "58": "colon;", + "59": "semi;", + "60": "lt;", + "61": "equals;", + "62": "gt;", + "63": "quest;", + "64": "commat;", + "91": "lsqb;", + "92": "bsol;", + "93": "rsqb;", + "94": "Hat;", + "95": "UnderBar;", + "96": "grave;", + "123": "lcub;", + "124": "VerticalLine;", + "125": "rcub;", + "160": "NonBreakingSpace;", + "161": "iexcl;", + "162": "cent;", + "163": "pound;", + "164": "curren;", + "165": "yen;", + "166": "brvbar;", + "167": "sect;", + "168": "uml;", + "169": "copy;", + "170": "ordf;", + "171": "laquo;", + "172": "not;", + "173": "shy;", + "174": "reg;", + "175": "strns;", + "176": "deg;", + "177": "pm;", + "178": "sup2;", + "179": "sup3;", + "180": "DiacriticalAcute;", + "181": "micro;", + "182": "para;", + "183": "middot;", + "184": "Cedilla;", + "185": "sup1;", + "186": "ordm;", + "187": "raquo;", + "188": "frac14;", + "189": "half;", + "190": "frac34;", + "191": "iquest;", + "192": "Agrave;", + "193": "Aacute;", + "194": "Acirc;", + "195": "Atilde;", + "196": "Auml;", + "197": "Aring;", + "198": "AElig;", + "199": "Ccedil;", + "200": "Egrave;", + "201": "Eacute;", + "202": "Ecirc;", + "203": "Euml;", + "204": "Igrave;", + "205": "Iacute;", + "206": "Icirc;", + "207": "Iuml;", + "208": "ETH;", + "209": "Ntilde;", + "210": "Ograve;", + "211": "Oacute;", + "212": "Ocirc;", + "213": "Otilde;", + "214": "Ouml;", + "215": "times;", + "216": "Oslash;", + "217": "Ugrave;", + "218": "Uacute;", + "219": "Ucirc;", + "220": "Uuml;", + "221": "Yacute;", + "222": "THORN;", + "223": "szlig;", + "224": "agrave;", + "225": "aacute;", + "226": "acirc;", + "227": "atilde;", + "228": "auml;", + "229": "aring;", + "230": "aelig;", + "231": "ccedil;", + "232": "egrave;", + "233": "eacute;", + "234": "ecirc;", + "235": "euml;", + "236": "igrave;", + "237": "iacute;", + "238": "icirc;", + "239": "iuml;", + "240": "eth;", + "241": "ntilde;", + "242": "ograve;", + "243": "oacute;", + "244": "ocirc;", + "245": "otilde;", + "246": "ouml;", + "247": "divide;", + "248": "oslash;", + "249": "ugrave;", + "250": "uacute;", + "251": "ucirc;", + "252": "uuml;", + "253": "yacute;", + "254": "thorn;", + "255": "yuml;", + "256": "Amacr;", + "257": "amacr;", + "258": "Abreve;", + "259": "abreve;", + "260": "Aogon;", + "261": "aogon;", + "262": "Cacute;", + "263": "cacute;", + "264": "Ccirc;", + "265": "ccirc;", + "266": "Cdot;", + "267": "cdot;", + "268": "Ccaron;", + "269": "ccaron;", + "270": "Dcaron;", + "271": "dcaron;", + "272": "Dstrok;", + "273": "dstrok;", + "274": "Emacr;", + "275": "emacr;", + "278": "Edot;", + "279": "edot;", + "280": "Eogon;", + "281": "eogon;", + "282": "Ecaron;", + "283": "ecaron;", + "284": "Gcirc;", + "285": "gcirc;", + "286": "Gbreve;", + "287": "gbreve;", + "288": "Gdot;", + "289": "gdot;", + "290": "Gcedil;", + "292": "Hcirc;", + "293": "hcirc;", + "294": "Hstrok;", + "295": "hstrok;", + "296": "Itilde;", + "297": "itilde;", + "298": "Imacr;", + "299": "imacr;", + "302": "Iogon;", + "303": "iogon;", + "304": "Idot;", + "305": "inodot;", + "306": "IJlig;", + "307": "ijlig;", + "308": "Jcirc;", + "309": "jcirc;", + "310": "Kcedil;", + "311": "kcedil;", + "312": "kgreen;", + "313": "Lacute;", + "314": "lacute;", + "315": "Lcedil;", + "316": "lcedil;", + "317": "Lcaron;", + "318": "lcaron;", + "319": "Lmidot;", + "320": "lmidot;", + "321": "Lstrok;", + "322": "lstrok;", + "323": "Nacute;", + "324": "nacute;", + "325": "Ncedil;", + "326": "ncedil;", + "327": "Ncaron;", + "328": "ncaron;", + "329": "napos;", + "330": "ENG;", + "331": "eng;", + "332": "Omacr;", + "333": "omacr;", + "336": "Odblac;", + "337": "odblac;", + "338": "OElig;", + "339": "oelig;", + "340": "Racute;", + "341": "racute;", + "342": "Rcedil;", + "343": "rcedil;", + "344": "Rcaron;", + "345": "rcaron;", + "346": "Sacute;", + "347": "sacute;", + "348": "Scirc;", + "349": "scirc;", + "350": "Scedil;", + "351": "scedil;", + "352": "Scaron;", + "353": "scaron;", + "354": "Tcedil;", + "355": "tcedil;", + "356": "Tcaron;", + "357": "tcaron;", + "358": "Tstrok;", + "359": "tstrok;", + "360": "Utilde;", + "361": "utilde;", + "362": "Umacr;", + "363": "umacr;", + "364": "Ubreve;", + "365": "ubreve;", + "366": "Uring;", + "367": "uring;", + "368": "Udblac;", + "369": "udblac;", + "370": "Uogon;", + "371": "uogon;", + "372": "Wcirc;", + "373": "wcirc;", + "374": "Ycirc;", + "375": "ycirc;", + "376": "Yuml;", + "377": "Zacute;", + "378": "zacute;", + "379": "Zdot;", + "380": "zdot;", + "381": "Zcaron;", + "382": "zcaron;", + "402": "fnof;", + "437": "imped;", + "501": "gacute;", + "567": "jmath;", + "710": "circ;", + "711": "Hacek;", + "728": "breve;", + "729": "dot;", + "730": "ring;", + "731": "ogon;", + "732": "tilde;", + "733": "DiacriticalDoubleAcute;", + "785": "DownBreve;", + "913": "Alpha;", + "914": "Beta;", + "915": "Gamma;", + "916": "Delta;", + "917": "Epsilon;", + "918": "Zeta;", + "919": "Eta;", + "920": "Theta;", + "921": "Iota;", + "922": "Kappa;", + "923": "Lambda;", + "924": "Mu;", + "925": "Nu;", + "926": "Xi;", + "927": "Omicron;", + "928": "Pi;", + "929": "Rho;", + "931": "Sigma;", + "932": "Tau;", + "933": "Upsilon;", + "934": "Phi;", + "935": "Chi;", + "936": "Psi;", + "937": "Omega;", + "945": "alpha;", + "946": "beta;", + "947": "gamma;", + "948": "delta;", + "949": "epsilon;", + "950": "zeta;", + "951": "eta;", + "952": "theta;", + "953": "iota;", + "954": "kappa;", + "955": "lambda;", + "956": "mu;", + "957": "nu;", + "958": "xi;", + "959": "omicron;", + "960": "pi;", + "961": "rho;", + "962": "varsigma;", + "963": "sigma;", + "964": "tau;", + "965": "upsilon;", + "966": "phi;", + "967": "chi;", + "968": "psi;", + "969": "omega;", + "977": "vartheta;", + "978": "upsih;", + "981": "varphi;", + "982": "varpi;", + "988": "Gammad;", + "989": "gammad;", + "1008": "varkappa;", + "1009": "varrho;", + "1013": "varepsilon;", + "1014": "bepsi;", + "1025": "IOcy;", + "1026": "DJcy;", + "1027": "GJcy;", + "1028": "Jukcy;", + "1029": "DScy;", + "1030": "Iukcy;", + "1031": "YIcy;", + "1032": "Jsercy;", + "1033": "LJcy;", + "1034": "NJcy;", + "1035": "TSHcy;", + "1036": "KJcy;", + "1038": "Ubrcy;", + "1039": "DZcy;", + "1040": "Acy;", + "1041": "Bcy;", + "1042": "Vcy;", + "1043": "Gcy;", + "1044": "Dcy;", + "1045": "IEcy;", + "1046": "ZHcy;", + "1047": "Zcy;", + "1048": "Icy;", + "1049": "Jcy;", + "1050": "Kcy;", + "1051": "Lcy;", + "1052": "Mcy;", + "1053": "Ncy;", + "1054": "Ocy;", + "1055": "Pcy;", + "1056": "Rcy;", + "1057": "Scy;", + "1058": "Tcy;", + "1059": "Ucy;", + "1060": "Fcy;", + "1061": "KHcy;", + "1062": "TScy;", + "1063": "CHcy;", + "1064": "SHcy;", + "1065": "SHCHcy;", + "1066": "HARDcy;", + "1067": "Ycy;", + "1068": "SOFTcy;", + "1069": "Ecy;", + "1070": "YUcy;", + "1071": "YAcy;", + "1072": "acy;", + "1073": "bcy;", + "1074": "vcy;", + "1075": "gcy;", + "1076": "dcy;", + "1077": "iecy;", + "1078": "zhcy;", + "1079": "zcy;", + "1080": "icy;", + "1081": "jcy;", + "1082": "kcy;", + "1083": "lcy;", + "1084": "mcy;", + "1085": "ncy;", + "1086": "ocy;", + "1087": "pcy;", + "1088": "rcy;", + "1089": "scy;", + "1090": "tcy;", + "1091": "ucy;", + "1092": "fcy;", + "1093": "khcy;", + "1094": "tscy;", + "1095": "chcy;", + "1096": "shcy;", + "1097": "shchcy;", + "1098": "hardcy;", + "1099": "ycy;", + "1100": "softcy;", + "1101": "ecy;", + "1102": "yucy;", + "1103": "yacy;", + "1105": "iocy;", + "1106": "djcy;", + "1107": "gjcy;", + "1108": "jukcy;", + "1109": "dscy;", + "1110": "iukcy;", + "1111": "yicy;", + "1112": "jsercy;", + "1113": "ljcy;", + "1114": "njcy;", + "1115": "tshcy;", + "1116": "kjcy;", + "1118": "ubrcy;", + "1119": "dzcy;", + "8194": "ensp;", + "8195": "emsp;", + "8196": "emsp13;", + "8197": "emsp14;", + "8199": "numsp;", + "8200": "puncsp;", + "8201": "ThinSpace;", + "8202": "VeryThinSpace;", + "8203": "ZeroWidthSpace;", + "8204": "zwnj;", + "8205": "zwj;", + "8206": "lrm;", + "8207": "rlm;", + "8208": "hyphen;", + "8211": "ndash;", + "8212": "mdash;", + "8213": "horbar;", + "8214": "Vert;", + "8216": "OpenCurlyQuote;", + "8217": "rsquor;", + "8218": "sbquo;", + "8220": "OpenCurlyDoubleQuote;", + "8221": "rdquor;", + "8222": "ldquor;", + "8224": "dagger;", + "8225": "ddagger;", + "8226": "bullet;", + "8229": "nldr;", + "8230": "mldr;", + "8240": "permil;", + "8241": "pertenk;", + "8242": "prime;", + "8243": "Prime;", + "8244": "tprime;", + "8245": "bprime;", + "8249": "lsaquo;", + "8250": "rsaquo;", + "8254": "OverBar;", + "8257": "caret;", + "8259": "hybull;", + "8260": "frasl;", + "8271": "bsemi;", + "8279": "qprime;", + "8287": "MediumSpace;", + "8288": "NoBreak;", + "8289": "ApplyFunction;", + "8290": "it;", + "8291": "InvisibleComma;", + "8364": "euro;", + "8411": "TripleDot;", + "8412": "DotDot;", + "8450": "Copf;", + "8453": "incare;", + "8458": "gscr;", + "8459": "Hscr;", + "8460": "Poincareplane;", + "8461": "quaternions;", + "8462": "planckh;", + "8463": "plankv;", + "8464": "Iscr;", + "8465": "imagpart;", + "8466": "Lscr;", + "8467": "ell;", + "8469": "Nopf;", + "8470": "numero;", + "8471": "copysr;", + "8472": "wp;", + "8473": "primes;", + "8474": "rationals;", + "8475": "Rscr;", + "8476": "Rfr;", + "8477": "Ropf;", + "8478": "rx;", + "8482": "trade;", + "8484": "Zopf;", + "8487": "mho;", + "8488": "Zfr;", + "8489": "iiota;", + "8492": "Bscr;", + "8493": "Cfr;", + "8495": "escr;", + "8496": "expectation;", + "8497": "Fscr;", + "8499": "phmmat;", + "8500": "oscr;", + "8501": "aleph;", + "8502": "beth;", + "8503": "gimel;", + "8504": "daleth;", + "8517": "DD;", + "8518": "DifferentialD;", + "8519": "exponentiale;", + "8520": "ImaginaryI;", + "8531": "frac13;", + "8532": "frac23;", + "8533": "frac15;", + "8534": "frac25;", + "8535": "frac35;", + "8536": "frac45;", + "8537": "frac16;", + "8538": "frac56;", + "8539": "frac18;", + "8540": "frac38;", + "8541": "frac58;", + "8542": "frac78;", + "8592": "slarr;", + "8593": "uparrow;", + "8594": "srarr;", + "8595": "ShortDownArrow;", + "8596": "leftrightarrow;", + "8597": "varr;", + "8598": "UpperLeftArrow;", + "8599": "UpperRightArrow;", + "8600": "searrow;", + "8601": "swarrow;", + "8602": "nleftarrow;", + "8603": "nrightarrow;", + "8605": "rightsquigarrow;", + "8606": "twoheadleftarrow;", + "8607": "Uarr;", + "8608": "twoheadrightarrow;", + "8609": "Darr;", + "8610": "leftarrowtail;", + "8611": "rightarrowtail;", + "8612": "mapstoleft;", + "8613": "UpTeeArrow;", + "8614": "RightTeeArrow;", + "8615": "mapstodown;", + "8617": "larrhk;", + "8618": "rarrhk;", + "8619": "looparrowleft;", + "8620": "rarrlp;", + "8621": "leftrightsquigarrow;", + "8622": "nleftrightarrow;", + "8624": "lsh;", + "8625": "rsh;", + "8626": "ldsh;", + "8627": "rdsh;", + "8629": "crarr;", + "8630": "curvearrowleft;", + "8631": "curvearrowright;", + "8634": "olarr;", + "8635": "orarr;", + "8636": "lharu;", + "8637": "lhard;", + "8638": "upharpoonright;", + "8639": "upharpoonleft;", + "8640": "RightVector;", + "8641": "rightharpoondown;", + "8642": "RightDownVector;", + "8643": "LeftDownVector;", + "8644": "rlarr;", + "8645": "UpArrowDownArrow;", + "8646": "lrarr;", + "8647": "llarr;", + "8648": "uuarr;", + "8649": "rrarr;", + "8650": "downdownarrows;", + "8651": "ReverseEquilibrium;", + "8652": "rlhar;", + "8653": "nLeftarrow;", + "8654": "nLeftrightarrow;", + "8655": "nRightarrow;", + "8656": "Leftarrow;", + "8657": "Uparrow;", + "8658": "Rightarrow;", + "8659": "Downarrow;", + "8660": "Leftrightarrow;", + "8661": "vArr;", + "8662": "nwArr;", + "8663": "neArr;", + "8664": "seArr;", + "8665": "swArr;", + "8666": "Lleftarrow;", + "8667": "Rrightarrow;", + "8669": "zigrarr;", + "8676": "LeftArrowBar;", + "8677": "RightArrowBar;", + "8693": "duarr;", + "8701": "loarr;", + "8702": "roarr;", + "8703": "hoarr;", + "8704": "forall;", + "8705": "complement;", + "8706": "PartialD;", + "8707": "Exists;", + "8708": "NotExists;", + "8709": "varnothing;", + "8711": "nabla;", + "8712": "isinv;", + "8713": "notinva;", + "8715": "SuchThat;", + "8716": "NotReverseElement;", + "8719": "Product;", + "8720": "Coproduct;", + "8721": "sum;", + "8722": "minus;", + "8723": "mp;", + "8724": "plusdo;", + "8726": "ssetmn;", + "8727": "lowast;", + "8728": "SmallCircle;", + "8730": "Sqrt;", + "8733": "vprop;", + "8734": "infin;", + "8735": "angrt;", + "8736": "angle;", + "8737": "measuredangle;", + "8738": "angsph;", + "8739": "VerticalBar;", + "8740": "nsmid;", + "8741": "spar;", + "8742": "nspar;", + "8743": "wedge;", + "8744": "vee;", + "8745": "cap;", + "8746": "cup;", + "8747": "Integral;", + "8748": "Int;", + "8749": "tint;", + "8750": "oint;", + "8751": "DoubleContourIntegral;", + "8752": "Cconint;", + "8753": "cwint;", + "8754": "cwconint;", + "8755": "CounterClockwiseContourIntegral;", + "8756": "therefore;", + "8757": "because;", + "8758": "ratio;", + "8759": "Proportion;", + "8760": "minusd;", + "8762": "mDDot;", + "8763": "homtht;", + "8764": "Tilde;", + "8765": "bsim;", + "8766": "mstpos;", + "8767": "acd;", + "8768": "wreath;", + "8769": "nsim;", + "8770": "esim;", + "8771": "TildeEqual;", + "8772": "nsimeq;", + "8773": "TildeFullEqual;", + "8774": "simne;", + "8775": "NotTildeFullEqual;", + "8776": "TildeTilde;", + "8777": "NotTildeTilde;", + "8778": "approxeq;", + "8779": "apid;", + "8780": "bcong;", + "8781": "CupCap;", + "8782": "HumpDownHump;", + "8783": "HumpEqual;", + "8784": "esdot;", + "8785": "eDot;", + "8786": "fallingdotseq;", + "8787": "risingdotseq;", + "8788": "coloneq;", + "8789": "eqcolon;", + "8790": "eqcirc;", + "8791": "cire;", + "8793": "wedgeq;", + "8794": "veeeq;", + "8796": "trie;", + "8799": "questeq;", + "8800": "NotEqual;", + "8801": "equiv;", + "8802": "NotCongruent;", + "8804": "leq;", + "8805": "GreaterEqual;", + "8806": "LessFullEqual;", + "8807": "GreaterFullEqual;", + "8808": "lneqq;", + "8809": "gneqq;", + "8810": "NestedLessLess;", + "8811": "NestedGreaterGreater;", + "8812": "twixt;", + "8813": "NotCupCap;", + "8814": "NotLess;", + "8815": "NotGreater;", + "8816": "NotLessEqual;", + "8817": "NotGreaterEqual;", + "8818": "lsim;", + "8819": "gtrsim;", + "8820": "NotLessTilde;", + "8821": "NotGreaterTilde;", + "8822": "lg;", + "8823": "gtrless;", + "8824": "ntlg;", + "8825": "ntgl;", + "8826": "Precedes;", + "8827": "Succeeds;", + "8828": "PrecedesSlantEqual;", + "8829": "SucceedsSlantEqual;", + "8830": "prsim;", + "8831": "succsim;", + "8832": "nprec;", + "8833": "nsucc;", + "8834": "subset;", + "8835": "supset;", + "8836": "nsub;", + "8837": "nsup;", + "8838": "SubsetEqual;", + "8839": "supseteq;", + "8840": "nsubseteq;", + "8841": "nsupseteq;", + "8842": "subsetneq;", + "8843": "supsetneq;", + "8845": "cupdot;", + "8846": "uplus;", + "8847": "SquareSubset;", + "8848": "SquareSuperset;", + "8849": "SquareSubsetEqual;", + "8850": "SquareSupersetEqual;", + "8851": "SquareIntersection;", + "8852": "SquareUnion;", + "8853": "oplus;", + "8854": "ominus;", + "8855": "otimes;", + "8856": "osol;", + "8857": "odot;", + "8858": "ocir;", + "8859": "oast;", + "8861": "odash;", + "8862": "plusb;", + "8863": "minusb;", + "8864": "timesb;", + "8865": "sdotb;", + "8866": "vdash;", + "8867": "LeftTee;", + "8868": "top;", + "8869": "UpTee;", + "8871": "models;", + "8872": "vDash;", + "8873": "Vdash;", + "8874": "Vvdash;", + "8875": "VDash;", + "8876": "nvdash;", + "8877": "nvDash;", + "8878": "nVdash;", + "8879": "nVDash;", + "8880": "prurel;", + "8882": "vltri;", + "8883": "vrtri;", + "8884": "trianglelefteq;", + "8885": "trianglerighteq;", + "8886": "origof;", + "8887": "imof;", + "8888": "mumap;", + "8889": "hercon;", + "8890": "intercal;", + "8891": "veebar;", + "8893": "barvee;", + "8894": "angrtvb;", + "8895": "lrtri;", + "8896": "xwedge;", + "8897": "xvee;", + "8898": "xcap;", + "8899": "xcup;", + "8900": "diamond;", + "8901": "sdot;", + "8902": "Star;", + "8903": "divonx;", + "8904": "bowtie;", + "8905": "ltimes;", + "8906": "rtimes;", + "8907": "lthree;", + "8908": "rthree;", + "8909": "bsime;", + "8910": "cuvee;", + "8911": "cuwed;", + "8912": "Subset;", + "8913": "Supset;", + "8914": "Cap;", + "8915": "Cup;", + "8916": "pitchfork;", + "8917": "epar;", + "8918": "ltdot;", + "8919": "gtrdot;", + "8920": "Ll;", + "8921": "ggg;", + "8922": "LessEqualGreater;", + "8923": "gtreqless;", + "8926": "curlyeqprec;", + "8927": "curlyeqsucc;", + "8928": "nprcue;", + "8929": "nsccue;", + "8930": "nsqsube;", + "8931": "nsqsupe;", + "8934": "lnsim;", + "8935": "gnsim;", + "8936": "prnsim;", + "8937": "succnsim;", + "8938": "ntriangleleft;", + "8939": "ntriangleright;", + "8940": "ntrianglelefteq;", + "8941": "ntrianglerighteq;", + "8942": "vellip;", + "8943": "ctdot;", + "8944": "utdot;", + "8945": "dtdot;", + "8946": "disin;", + "8947": "isinsv;", + "8948": "isins;", + "8949": "isindot;", + "8950": "notinvc;", + "8951": "notinvb;", + "8953": "isinE;", + "8954": "nisd;", + "8955": "xnis;", + "8956": "nis;", + "8957": "notnivc;", + "8958": "notnivb;", + "8965": "barwedge;", + "8966": "doublebarwedge;", + "8968": "LeftCeiling;", + "8969": "RightCeiling;", + "8970": "lfloor;", + "8971": "RightFloor;", + "8972": "drcrop;", + "8973": "dlcrop;", + "8974": "urcrop;", + "8975": "ulcrop;", + "8976": "bnot;", + "8978": "profline;", + "8979": "profsurf;", + "8981": "telrec;", + "8982": "target;", + "8988": "ulcorner;", + "8989": "urcorner;", + "8990": "llcorner;", + "8991": "lrcorner;", + "8994": "sfrown;", + "8995": "ssmile;", + "9005": "cylcty;", + "9006": "profalar;", + "9014": "topbot;", + "9021": "ovbar;", + "9023": "solbar;", + "9084": "angzarr;", + "9136": "lmoustache;", + "9137": "rmoustache;", + "9140": "tbrk;", + "9141": "UnderBracket;", + "9142": "bbrktbrk;", + "9180": "OverParenthesis;", + "9181": "UnderParenthesis;", + "9182": "OverBrace;", + "9183": "UnderBrace;", + "9186": "trpezium;", + "9191": "elinters;", + "9251": "blank;", + "9416": "oS;", + "9472": "HorizontalLine;", + "9474": "boxv;", + "9484": "boxdr;", + "9488": "boxdl;", + "9492": "boxur;", + "9496": "boxul;", + "9500": "boxvr;", + "9508": "boxvl;", + "9516": "boxhd;", + "9524": "boxhu;", + "9532": "boxvh;", + "9552": "boxH;", + "9553": "boxV;", + "9554": "boxdR;", + "9555": "boxDr;", + "9556": "boxDR;", + "9557": "boxdL;", + "9558": "boxDl;", + "9559": "boxDL;", + "9560": "boxuR;", + "9561": "boxUr;", + "9562": "boxUR;", + "9563": "boxuL;", + "9564": "boxUl;", + "9565": "boxUL;", + "9566": "boxvR;", + "9567": "boxVr;", + "9568": "boxVR;", + "9569": "boxvL;", + "9570": "boxVl;", + "9571": "boxVL;", + "9572": "boxHd;", + "9573": "boxhD;", + "9574": "boxHD;", + "9575": "boxHu;", + "9576": "boxhU;", + "9577": "boxHU;", + "9578": "boxvH;", + "9579": "boxVh;", + "9580": "boxVH;", + "9600": "uhblk;", + "9604": "lhblk;", + "9608": "block;", + "9617": "blk14;", + "9618": "blk12;", + "9619": "blk34;", + "9633": "square;", + "9642": "squf;", + "9643": "EmptyVerySmallSquare;", + "9645": "rect;", + "9646": "marker;", + "9649": "fltns;", + "9651": "xutri;", + "9652": "utrif;", + "9653": "utri;", + "9656": "rtrif;", + "9657": "triangleright;", + "9661": "xdtri;", + "9662": "dtrif;", + "9663": "triangledown;", + "9666": "ltrif;", + "9667": "triangleleft;", + "9674": "lozenge;", + "9675": "cir;", + "9708": "tridot;", + "9711": "xcirc;", + "9720": "ultri;", + "9721": "urtri;", + "9722": "lltri;", + "9723": "EmptySmallSquare;", + "9724": "FilledSmallSquare;", + "9733": "starf;", + "9734": "star;", + "9742": "phone;", + "9792": "female;", + "9794": "male;", + "9824": "spadesuit;", + "9827": "clubsuit;", + "9829": "heartsuit;", + "9830": "diams;", + "9834": "sung;", + "9837": "flat;", + "9838": "natural;", + "9839": "sharp;", + "10003": "checkmark;", + "10007": "cross;", + "10016": "maltese;", + "10038": "sext;", + "10072": "VerticalSeparator;", + "10098": "lbbrk;", + "10099": "rbbrk;", + "10184": "bsolhsub;", + "10185": "suphsol;", + "10214": "lobrk;", + "10215": "robrk;", + "10216": "LeftAngleBracket;", + "10217": "RightAngleBracket;", + "10218": "Lang;", + "10219": "Rang;", + "10220": "loang;", + "10221": "roang;", + "10229": "xlarr;", + "10230": "xrarr;", + "10231": "xharr;", + "10232": "xlArr;", + "10233": "xrArr;", + "10234": "xhArr;", + "10236": "xmap;", + "10239": "dzigrarr;", + "10498": "nvlArr;", + "10499": "nvrArr;", + "10500": "nvHarr;", + "10501": "Map;", + "10508": "lbarr;", + "10509": "rbarr;", + "10510": "lBarr;", + "10511": "rBarr;", + "10512": "RBarr;", + "10513": "DDotrahd;", + "10514": "UpArrowBar;", + "10515": "DownArrowBar;", + "10518": "Rarrtl;", + "10521": "latail;", + "10522": "ratail;", + "10523": "lAtail;", + "10524": "rAtail;", + "10525": "larrfs;", + "10526": "rarrfs;", + "10527": "larrbfs;", + "10528": "rarrbfs;", + "10531": "nwarhk;", + "10532": "nearhk;", + "10533": "searhk;", + "10534": "swarhk;", + "10535": "nwnear;", + "10536": "toea;", + "10537": "tosa;", + "10538": "swnwar;", + "10547": "rarrc;", + "10549": "cudarrr;", + "10550": "ldca;", + "10551": "rdca;", + "10552": "cudarrl;", + "10553": "larrpl;", + "10556": "curarrm;", + "10557": "cularrp;", + "10565": "rarrpl;", + "10568": "harrcir;", + "10569": "Uarrocir;", + "10570": "lurdshar;", + "10571": "ldrushar;", + "10574": "LeftRightVector;", + "10575": "RightUpDownVector;", + "10576": "DownLeftRightVector;", + "10577": "LeftUpDownVector;", + "10578": "LeftVectorBar;", + "10579": "RightVectorBar;", + "10580": "RightUpVectorBar;", + "10581": "RightDownVectorBar;", + "10582": "DownLeftVectorBar;", + "10583": "DownRightVectorBar;", + "10584": "LeftUpVectorBar;", + "10585": "LeftDownVectorBar;", + "10586": "LeftTeeVector;", + "10587": "RightTeeVector;", + "10588": "RightUpTeeVector;", + "10589": "RightDownTeeVector;", + "10590": "DownLeftTeeVector;", + "10591": "DownRightTeeVector;", + "10592": "LeftUpTeeVector;", + "10593": "LeftDownTeeVector;", + "10594": "lHar;", + "10595": "uHar;", + "10596": "rHar;", + "10597": "dHar;", + "10598": "luruhar;", + "10599": "ldrdhar;", + "10600": "ruluhar;", + "10601": "rdldhar;", + "10602": "lharul;", + "10603": "llhard;", + "10604": "rharul;", + "10605": "lrhard;", + "10606": "UpEquilibrium;", + "10607": "ReverseUpEquilibrium;", + "10608": "RoundImplies;", + "10609": "erarr;", + "10610": "simrarr;", + "10611": "larrsim;", + "10612": "rarrsim;", + "10613": "rarrap;", + "10614": "ltlarr;", + "10616": "gtrarr;", + "10617": "subrarr;", + "10619": "suplarr;", + "10620": "lfisht;", + "10621": "rfisht;", + "10622": "ufisht;", + "10623": "dfisht;", + "10629": "lopar;", + "10630": "ropar;", + "10635": "lbrke;", + "10636": "rbrke;", + "10637": "lbrkslu;", + "10638": "rbrksld;", + "10639": "lbrksld;", + "10640": "rbrkslu;", + "10641": "langd;", + "10642": "rangd;", + "10643": "lparlt;", + "10644": "rpargt;", + "10645": "gtlPar;", + "10646": "ltrPar;", + "10650": "vzigzag;", + "10652": "vangrt;", + "10653": "angrtvbd;", + "10660": "ange;", + "10661": "range;", + "10662": "dwangle;", + "10663": "uwangle;", + "10664": "angmsdaa;", + "10665": "angmsdab;", + "10666": "angmsdac;", + "10667": "angmsdad;", + "10668": "angmsdae;", + "10669": "angmsdaf;", + "10670": "angmsdag;", + "10671": "angmsdah;", + "10672": "bemptyv;", + "10673": "demptyv;", + "10674": "cemptyv;", + "10675": "raemptyv;", + "10676": "laemptyv;", + "10677": "ohbar;", + "10678": "omid;", + "10679": "opar;", + "10681": "operp;", + "10683": "olcross;", + "10684": "odsold;", + "10686": "olcir;", + "10687": "ofcir;", + "10688": "olt;", + "10689": "ogt;", + "10690": "cirscir;", + "10691": "cirE;", + "10692": "solb;", + "10693": "bsolb;", + "10697": "boxbox;", + "10701": "trisb;", + "10702": "rtriltri;", + "10703": "LeftTriangleBar;", + "10704": "RightTriangleBar;", + "10716": "iinfin;", + "10717": "infintie;", + "10718": "nvinfin;", + "10723": "eparsl;", + "10724": "smeparsl;", + "10725": "eqvparsl;", + "10731": "lozf;", + "10740": "RuleDelayed;", + "10742": "dsol;", + "10752": "xodot;", + "10753": "xoplus;", + "10754": "xotime;", + "10756": "xuplus;", + "10758": "xsqcup;", + "10764": "qint;", + "10765": "fpartint;", + "10768": "cirfnint;", + "10769": "awint;", + "10770": "rppolint;", + "10771": "scpolint;", + "10772": "npolint;", + "10773": "pointint;", + "10774": "quatint;", + "10775": "intlarhk;", + "10786": "pluscir;", + "10787": "plusacir;", + "10788": "simplus;", + "10789": "plusdu;", + "10790": "plussim;", + "10791": "plustwo;", + "10793": "mcomma;", + "10794": "minusdu;", + "10797": "loplus;", + "10798": "roplus;", + "10799": "Cross;", + "10800": "timesd;", + "10801": "timesbar;", + "10803": "smashp;", + "10804": "lotimes;", + "10805": "rotimes;", + "10806": "otimesas;", + "10807": "Otimes;", + "10808": "odiv;", + "10809": "triplus;", + "10810": "triminus;", + "10811": "tritime;", + "10812": "iprod;", + "10815": "amalg;", + "10816": "capdot;", + "10818": "ncup;", + "10819": "ncap;", + "10820": "capand;", + "10821": "cupor;", + "10822": "cupcap;", + "10823": "capcup;", + "10824": "cupbrcap;", + "10825": "capbrcup;", + "10826": "cupcup;", + "10827": "capcap;", + "10828": "ccups;", + "10829": "ccaps;", + "10832": "ccupssm;", + "10835": "And;", + "10836": "Or;", + "10837": "andand;", + "10838": "oror;", + "10839": "orslope;", + "10840": "andslope;", + "10842": "andv;", + "10843": "orv;", + "10844": "andd;", + "10845": "ord;", + "10847": "wedbar;", + "10854": "sdote;", + "10858": "simdot;", + "10861": "congdot;", + "10862": "easter;", + "10863": "apacir;", + "10864": "apE;", + "10865": "eplus;", + "10866": "pluse;", + "10867": "Esim;", + "10868": "Colone;", + "10869": "Equal;", + "10871": "eDDot;", + "10872": "equivDD;", + "10873": "ltcir;", + "10874": "gtcir;", + "10875": "ltquest;", + "10876": "gtquest;", + "10877": "LessSlantEqual;", + "10878": "GreaterSlantEqual;", + "10879": "lesdot;", + "10880": "gesdot;", + "10881": "lesdoto;", + "10882": "gesdoto;", + "10883": "lesdotor;", + "10884": "gesdotol;", + "10885": "lessapprox;", + "10886": "gtrapprox;", + "10887": "lneq;", + "10888": "gneq;", + "10889": "lnapprox;", + "10890": "gnapprox;", + "10891": "lesseqqgtr;", + "10892": "gtreqqless;", + "10893": "lsime;", + "10894": "gsime;", + "10895": "lsimg;", + "10896": "gsiml;", + "10897": "lgE;", + "10898": "glE;", + "10899": "lesges;", + "10900": "gesles;", + "10901": "eqslantless;", + "10902": "eqslantgtr;", + "10903": "elsdot;", + "10904": "egsdot;", + "10905": "el;", + "10906": "eg;", + "10909": "siml;", + "10910": "simg;", + "10911": "simlE;", + "10912": "simgE;", + "10913": "LessLess;", + "10914": "GreaterGreater;", + "10916": "glj;", + "10917": "gla;", + "10918": "ltcc;", + "10919": "gtcc;", + "10920": "lescc;", + "10921": "gescc;", + "10922": "smt;", + "10923": "lat;", + "10924": "smte;", + "10925": "late;", + "10926": "bumpE;", + "10927": "preceq;", + "10928": "succeq;", + "10931": "prE;", + "10932": "scE;", + "10933": "prnE;", + "10934": "succneqq;", + "10935": "precapprox;", + "10936": "succapprox;", + "10937": "prnap;", + "10938": "succnapprox;", + "10939": "Pr;", + "10940": "Sc;", + "10941": "subdot;", + "10942": "supdot;", + "10943": "subplus;", + "10944": "supplus;", + "10945": "submult;", + "10946": "supmult;", + "10947": "subedot;", + "10948": "supedot;", + "10949": "subseteqq;", + "10950": "supseteqq;", + "10951": "subsim;", + "10952": "supsim;", + "10955": "subsetneqq;", + "10956": "supsetneqq;", + "10959": "csub;", + "10960": "csup;", + "10961": "csube;", + "10962": "csupe;", + "10963": "subsup;", + "10964": "supsub;", + "10965": "subsub;", + "10966": "supsup;", + "10967": "suphsub;", + "10968": "supdsub;", + "10969": "forkv;", + "10970": "topfork;", + "10971": "mlcp;", + "10980": "DoubleLeftTee;", + "10982": "Vdashl;", + "10983": "Barv;", + "10984": "vBar;", + "10985": "vBarv;", + "10987": "Vbar;", + "10988": "Not;", + "10989": "bNot;", + "10990": "rnmid;", + "10991": "cirmid;", + "10992": "midcir;", + "10993": "topcir;", + "10994": "nhpar;", + "10995": "parsim;", + "11005": "parsl;", + "64256": "fflig;", + "64257": "filig;", + "64258": "fllig;", + "64259": "ffilig;", + "64260": "ffllig;" +} +},{}],566:[function(require,module,exports){ +var prr = require('prr') + +function init (type, message, cause) { + if (!!message && typeof message != 'string') { + message = message.message || message.name + } + prr(this, { + type : type + , name : type + // can be passed just a 'cause' + , cause : typeof message != 'string' ? message : cause + , message : message + }, 'ewr') +} + +// generic prototype, not intended to be actually used - helpful for `instanceof` +function CustomError (message, cause) { + Error.call(this) + if (Error.captureStackTrace) + Error.captureStackTrace(this, this.constructor) + init.call(this, 'CustomError', message, cause) +} + +CustomError.prototype = new Error() + +function createError (errno, type, proto) { + var err = function (message, cause) { + init.call(this, type, message, cause) + //TODO: the specificity here is stupid, errno should be available everywhere + if (type == 'FilesystemError') { + this.code = this.cause.code + this.path = this.cause.path + this.errno = this.cause.errno + this.message = + (errno.errno[this.cause.errno] + ? errno.errno[this.cause.errno].description + : this.cause.message) + + (this.cause.path ? ' [' + this.cause.path + ']' : '') + } + Error.call(this) + if (Error.captureStackTrace) + Error.captureStackTrace(this, err) + } + err.prototype = !!proto ? new proto() : new CustomError() + return err +} + +module.exports = function (errno) { + var ce = function (type, proto) { + return createError(errno, type, proto) + } + return { + CustomError : CustomError + , FilesystemError : ce('FilesystemError') + , createError : ce + } +} + +},{"prr":1023}],567:[function(require,module,exports){ +var all = module.exports.all = [ + { + errno: -2, + code: 'ENOENT', + description: 'no such file or directory' + }, + { + errno: -1, + code: 'UNKNOWN', + description: 'unknown error' + }, + { + errno: 0, + code: 'OK', + description: 'success' + }, + { + errno: 1, + code: 'EOF', + description: 'end of file' + }, + { + errno: 2, + code: 'EADDRINFO', + description: 'getaddrinfo error' + }, + { + errno: 3, + code: 'EACCES', + description: 'permission denied' + }, + { + errno: 4, + code: 'EAGAIN', + description: 'resource temporarily unavailable' + }, + { + errno: 5, + code: 'EADDRINUSE', + description: 'address already in use' + }, + { + errno: 6, + code: 'EADDRNOTAVAIL', + description: 'address not available' + }, + { + errno: 7, + code: 'EAFNOSUPPORT', + description: 'address family not supported' + }, + { + errno: 8, + code: 'EALREADY', + description: 'connection already in progress' + }, + { + errno: 9, + code: 'EBADF', + description: 'bad file descriptor' + }, + { + errno: 10, + code: 'EBUSY', + description: 'resource busy or locked' + }, + { + errno: 11, + code: 'ECONNABORTED', + description: 'software caused connection abort' + }, + { + errno: 12, + code: 'ECONNREFUSED', + description: 'connection refused' + }, + { + errno: 13, + code: 'ECONNRESET', + description: 'connection reset by peer' + }, + { + errno: 14, + code: 'EDESTADDRREQ', + description: 'destination address required' + }, + { + errno: 15, + code: 'EFAULT', + description: 'bad address in system call argument' + }, + { + errno: 16, + code: 'EHOSTUNREACH', + description: 'host is unreachable' + }, + { + errno: 17, + code: 'EINTR', + description: 'interrupted system call' + }, + { + errno: 18, + code: 'EINVAL', + description: 'invalid argument' + }, + { + errno: 19, + code: 'EISCONN', + description: 'socket is already connected' + }, + { + errno: 20, + code: 'EMFILE', + description: 'too many open files' + }, + { + errno: 21, + code: 'EMSGSIZE', + description: 'message too long' + }, + { + errno: 22, + code: 'ENETDOWN', + description: 'network is down' + }, + { + errno: 23, + code: 'ENETUNREACH', + description: 'network is unreachable' + }, + { + errno: 24, + code: 'ENFILE', + description: 'file table overflow' + }, + { + errno: 25, + code: 'ENOBUFS', + description: 'no buffer space available' + }, + { + errno: 26, + code: 'ENOMEM', + description: 'not enough memory' + }, + { + errno: 27, + code: 'ENOTDIR', + description: 'not a directory' + }, + { + errno: 28, + code: 'EISDIR', + description: 'illegal operation on a directory' + }, + { + errno: 29, + code: 'ENONET', + description: 'machine is not on the network' + }, + { + errno: 31, + code: 'ENOTCONN', + description: 'socket is not connected' + }, + { + errno: 32, + code: 'ENOTSOCK', + description: 'socket operation on non-socket' + }, + { + errno: 33, + code: 'ENOTSUP', + description: 'operation not supported on socket' + }, + { + errno: 34, + code: 'ENOENT', + description: 'no such file or directory' + }, + { + errno: 35, + code: 'ENOSYS', + description: 'function not implemented' + }, + { + errno: 36, + code: 'EPIPE', + description: 'broken pipe' + }, + { + errno: 37, + code: 'EPROTO', + description: 'protocol error' + }, + { + errno: 38, + code: 'EPROTONOSUPPORT', + description: 'protocol not supported' + }, + { + errno: 39, + code: 'EPROTOTYPE', + description: 'protocol wrong type for socket' + }, + { + errno: 40, + code: 'ETIMEDOUT', + description: 'connection timed out' + }, + { + errno: 41, + code: 'ECHARSET', + description: 'invalid Unicode character' + }, + { + errno: 42, + code: 'EAIFAMNOSUPPORT', + description: 'address family for hostname not supported' + }, + { + errno: 44, + code: 'EAISERVICE', + description: 'servname not supported for ai_socktype' + }, + { + errno: 45, + code: 'EAISOCKTYPE', + description: 'ai_socktype not supported' + }, + { + errno: 46, + code: 'ESHUTDOWN', + description: 'cannot send after transport endpoint shutdown' + }, + { + errno: 47, + code: 'EEXIST', + description: 'file already exists' + }, + { + errno: 48, + code: 'ESRCH', + description: 'no such process' + }, + { + errno: 49, + code: 'ENAMETOOLONG', + description: 'name too long' + }, + { + errno: 50, + code: 'EPERM', + description: 'operation not permitted' + }, + { + errno: 51, + code: 'ELOOP', + description: 'too many symbolic links encountered' + }, + { + errno: 52, + code: 'EXDEV', + description: 'cross-device link not permitted' + }, + { + errno: 53, + code: 'ENOTEMPTY', + description: 'directory not empty' + }, + { + errno: 54, + code: 'ENOSPC', + description: 'no space left on device' + }, + { + errno: 55, + code: 'EIO', + description: 'i/o error' + }, + { + errno: 56, + code: 'EROFS', + description: 'read-only file system' + }, + { + errno: 57, + code: 'ENODEV', + description: 'no such device' + }, + { + errno: 58, + code: 'ESPIPE', + description: 'invalid seek' + }, + { + errno: 59, + code: 'ECANCELED', + description: 'operation canceled' + } +] + +module.exports.errno = {} +module.exports.code = {} + +all.forEach(function (error) { + module.exports.errno[error.errno] = error + module.exports.code[error.code] = error +}) + +module.exports.custom = require('./custom')(module.exports) +module.exports.create = module.exports.custom.createError + +},{"./custom":566}],568:[function(require,module,exports){ +'use strict'; + +var util = require('util'); +var isArrayish = require('is-arrayish'); + +var errorEx = function errorEx(name, properties) { + if (!name || name.constructor !== String) { + properties = name || {}; + name = Error.name; + } + + var errorExError = function ErrorEXError(message) { + if (!this) { + return new ErrorEXError(message); + } + + message = message instanceof Error + ? message.message + : (message || this.message); + + Error.call(this, message); + Error.captureStackTrace(this, errorExError); + + this.name = name; + + Object.defineProperty(this, 'message', { + configurable: true, + enumerable: false, + get: function () { + var newMessage = message.split(/\r?\n/g); + + for (var key in properties) { + if (!properties.hasOwnProperty(key)) { + continue; + } + + var modifier = properties[key]; + + if ('message' in modifier) { + newMessage = modifier.message(this[key], newMessage) || newMessage; + if (!isArrayish(newMessage)) { + newMessage = [newMessage]; + } + } + } + + return newMessage.join('\n'); + }, + set: function (v) { + message = v; + } + }); + + var overwrittenStack = null; + + var stackDescriptor = Object.getOwnPropertyDescriptor(this, 'stack'); + var stackGetter = stackDescriptor.get; + var stackValue = stackDescriptor.value; + delete stackDescriptor.value; + delete stackDescriptor.writable; + + stackDescriptor.set = function (newstack) { + overwrittenStack = newstack; + }; + + stackDescriptor.get = function () { + var stack = (overwrittenStack || ((stackGetter) + ? stackGetter.call(this) + : stackValue)).split(/\r?\n+/g); + + // starting in Node 7, the stack builder caches the message. + // just replace it. + if (!overwrittenStack) { + stack[0] = this.name + ': ' + this.message; + } + + var lineCount = 1; + for (var key in properties) { + if (!properties.hasOwnProperty(key)) { + continue; + } + + var modifier = properties[key]; + + if ('line' in modifier) { + var line = modifier.line(this[key]); + if (line) { + stack.splice(lineCount++, 0, ' ' + line); + } + } + + if ('stack' in modifier) { + modifier.stack(this[key], stack); + } + } + + return stack.join('\n'); + }; + + Object.defineProperty(this, 'stack', stackDescriptor); + }; + + if (Object.setPrototypeOf) { + Object.setPrototypeOf(errorExError.prototype, Error.prototype); + Object.setPrototypeOf(errorExError, Error); + } else { + util.inherits(errorExError, Error); + } + + return errorExError; +}; + +errorEx.append = function (str, def) { + return { + message: function (v, message) { + v = v || def; + + if (v) { + message[0] += ' ' + str.replace('%s', v.toString()); + } + + return message; + } + }; +}; + +errorEx.line = function (str, def) { + return { + line: function (v) { + v = v || def; + + if (v) { + return str.replace('%s', v.toString()); + } + + return null; + } + }; +}; + +module.exports = errorEx; + +},{"is-arrayish":838,"util":1439}],569:[function(require,module,exports){ +'use strict'; + +/* globals + Set, + Map, + WeakSet, + WeakMap, + + Promise, + + Symbol, + Proxy, + + Atomics, + SharedArrayBuffer, + + ArrayBuffer, + DataView, + Uint8Array, + Float32Array, + Float64Array, + Int8Array, + Int16Array, + Int32Array, + Uint8ClampedArray, + Uint16Array, + Uint32Array, +*/ + +var undefined; // eslint-disable-line no-shadow-restricted-names + +var ThrowTypeError = Object.getOwnPropertyDescriptor + ? (function () { return Object.getOwnPropertyDescriptor(arguments, 'callee').get; }()) + : function () { throw new TypeError(); }; + +var hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol'; + +var getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto + +var generator; // = function * () {}; +var generatorFunction = generator ? getProto(generator) : undefined; +var asyncFn; // async function() {}; +var asyncFunction = asyncFn ? asyncFn.constructor : undefined; +var asyncGen; // async function * () {}; +var asyncGenFunction = asyncGen ? getProto(asyncGen) : undefined; +var asyncGenIterator = asyncGen ? asyncGen() : undefined; + +var TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array); + +var INTRINSICS = { + '$ %Array%': Array, + '$ %ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer, + '$ %ArrayBufferPrototype%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer.prototype, + '$ %ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined, + '$ %ArrayPrototype%': Array.prototype, + '$ %ArrayProto_entries%': Array.prototype.entries, + '$ %ArrayProto_forEach%': Array.prototype.forEach, + '$ %ArrayProto_keys%': Array.prototype.keys, + '$ %ArrayProto_values%': Array.prototype.values, + '$ %AsyncFromSyncIteratorPrototype%': undefined, + '$ %AsyncFunction%': asyncFunction, + '$ %AsyncFunctionPrototype%': asyncFunction ? asyncFunction.prototype : undefined, + '$ %AsyncGenerator%': asyncGen ? getProto(asyncGenIterator) : undefined, + '$ %AsyncGeneratorFunction%': asyncGenFunction, + '$ %AsyncGeneratorPrototype%': asyncGenFunction ? asyncGenFunction.prototype : undefined, + '$ %AsyncIteratorPrototype%': asyncGenIterator && hasSymbols && Symbol.asyncIterator ? asyncGenIterator[Symbol.asyncIterator]() : undefined, + '$ %Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics, + '$ %Boolean%': Boolean, + '$ %BooleanPrototype%': Boolean.prototype, + '$ %DataView%': typeof DataView === 'undefined' ? undefined : DataView, + '$ %DataViewPrototype%': typeof DataView === 'undefined' ? undefined : DataView.prototype, + '$ %Date%': Date, + '$ %DatePrototype%': Date.prototype, + '$ %decodeURI%': decodeURI, + '$ %decodeURIComponent%': decodeURIComponent, + '$ %encodeURI%': encodeURI, + '$ %encodeURIComponent%': encodeURIComponent, + '$ %Error%': Error, + '$ %ErrorPrototype%': Error.prototype, + '$ %eval%': eval, // eslint-disable-line no-eval + '$ %EvalError%': EvalError, + '$ %EvalErrorPrototype%': EvalError.prototype, + '$ %Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array, + '$ %Float32ArrayPrototype%': typeof Float32Array === 'undefined' ? undefined : Float32Array.prototype, + '$ %Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array, + '$ %Float64ArrayPrototype%': typeof Float64Array === 'undefined' ? undefined : Float64Array.prototype, + '$ %Function%': Function, + '$ %FunctionPrototype%': Function.prototype, + '$ %Generator%': generator ? getProto(generator()) : undefined, + '$ %GeneratorFunction%': generatorFunction, + '$ %GeneratorPrototype%': generatorFunction ? generatorFunction.prototype : undefined, + '$ %Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array, + '$ %Int8ArrayPrototype%': typeof Int8Array === 'undefined' ? undefined : Int8Array.prototype, + '$ %Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array, + '$ %Int16ArrayPrototype%': typeof Int16Array === 'undefined' ? undefined : Int8Array.prototype, + '$ %Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array, + '$ %Int32ArrayPrototype%': typeof Int32Array === 'undefined' ? undefined : Int32Array.prototype, + '$ %isFinite%': isFinite, + '$ %isNaN%': isNaN, + '$ %IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined, + '$ %JSON%': JSON, + '$ %JSONParse%': JSON.parse, + '$ %Map%': typeof Map === 'undefined' ? undefined : Map, + '$ %MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()), + '$ %MapPrototype%': typeof Map === 'undefined' ? undefined : Map.prototype, + '$ %Math%': Math, + '$ %Number%': Number, + '$ %NumberPrototype%': Number.prototype, + '$ %Object%': Object, + '$ %ObjectPrototype%': Object.prototype, + '$ %ObjProto_toString%': Object.prototype.toString, + '$ %ObjProto_valueOf%': Object.prototype.valueOf, + '$ %parseFloat%': parseFloat, + '$ %parseInt%': parseInt, + '$ %Promise%': typeof Promise === 'undefined' ? undefined : Promise, + '$ %PromisePrototype%': typeof Promise === 'undefined' ? undefined : Promise.prototype, + '$ %PromiseProto_then%': typeof Promise === 'undefined' ? undefined : Promise.prototype.then, + '$ %Promise_all%': typeof Promise === 'undefined' ? undefined : Promise.all, + '$ %Promise_reject%': typeof Promise === 'undefined' ? undefined : Promise.reject, + '$ %Promise_resolve%': typeof Promise === 'undefined' ? undefined : Promise.resolve, + '$ %Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy, + '$ %RangeError%': RangeError, + '$ %RangeErrorPrototype%': RangeError.prototype, + '$ %ReferenceError%': ReferenceError, + '$ %ReferenceErrorPrototype%': ReferenceError.prototype, + '$ %Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect, + '$ %RegExp%': RegExp, + '$ %RegExpPrototype%': RegExp.prototype, + '$ %Set%': typeof Set === 'undefined' ? undefined : Set, + '$ %SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()), + '$ %SetPrototype%': typeof Set === 'undefined' ? undefined : Set.prototype, + '$ %SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer, + '$ %SharedArrayBufferPrototype%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer.prototype, + '$ %String%': String, + '$ %StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined, + '$ %StringPrototype%': String.prototype, + '$ %Symbol%': hasSymbols ? Symbol : undefined, + '$ %SymbolPrototype%': hasSymbols ? Symbol.prototype : undefined, + '$ %SyntaxError%': SyntaxError, + '$ %SyntaxErrorPrototype%': SyntaxError.prototype, + '$ %ThrowTypeError%': ThrowTypeError, + '$ %TypedArray%': TypedArray, + '$ %TypedArrayPrototype%': TypedArray ? TypedArray.prototype : undefined, + '$ %TypeError%': TypeError, + '$ %TypeErrorPrototype%': TypeError.prototype, + '$ %Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array, + '$ %Uint8ArrayPrototype%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array.prototype, + '$ %Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray, + '$ %Uint8ClampedArrayPrototype%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray.prototype, + '$ %Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array, + '$ %Uint16ArrayPrototype%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array.prototype, + '$ %Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array, + '$ %Uint32ArrayPrototype%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array.prototype, + '$ %URIError%': URIError, + '$ %URIErrorPrototype%': URIError.prototype, + '$ %WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap, + '$ %WeakMapPrototype%': typeof WeakMap === 'undefined' ? undefined : WeakMap.prototype, + '$ %WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet, + '$ %WeakSetPrototype%': typeof WeakSet === 'undefined' ? undefined : WeakSet.prototype +}; + +module.exports = function GetIntrinsic(name, allowMissing) { + if (arguments.length > 1 && typeof allowMissing !== 'boolean') { + throw new TypeError('"allowMissing" argument must be a boolean'); + } + + var key = '$ ' + name; + if (!(key in INTRINSICS)) { + throw new SyntaxError('intrinsic ' + name + ' does not exist!'); + } + + // istanbul ignore if // hopefully this is impossible to test :-) + if (typeof INTRINSICS[key] === 'undefined' && !allowMissing) { + throw new TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!'); + } + return INTRINSICS[key]; +}; + +},{}],570:[function(require,module,exports){ +'use strict'; + +var GetIntrinsic = require('./GetIntrinsic'); + +var $Object = GetIntrinsic('%Object%'); +var $TypeError = GetIntrinsic('%TypeError%'); +var $String = GetIntrinsic('%String%'); + +var assertRecord = require('./helpers/assertRecord'); +var $isNaN = require('./helpers/isNaN'); +var $isFinite = require('./helpers/isFinite'); + +var sign = require('./helpers/sign'); +var mod = require('./helpers/mod'); + +var IsCallable = require('is-callable'); +var toPrimitive = require('es-to-primitive/es5'); + +var has = require('has'); + +// https://es5.github.io/#x9 +var ES5 = { + ToPrimitive: toPrimitive, + + ToBoolean: function ToBoolean(value) { + return !!value; + }, + ToNumber: function ToNumber(value) { + return +value; // eslint-disable-line no-implicit-coercion + }, + ToInteger: function ToInteger(value) { + var number = this.ToNumber(value); + if ($isNaN(number)) { return 0; } + if (number === 0 || !$isFinite(number)) { return number; } + return sign(number) * Math.floor(Math.abs(number)); + }, + ToInt32: function ToInt32(x) { + return this.ToNumber(x) >> 0; + }, + ToUint32: function ToUint32(x) { + return this.ToNumber(x) >>> 0; + }, + ToUint16: function ToUint16(value) { + var number = this.ToNumber(value); + if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; } + var posInt = sign(number) * Math.floor(Math.abs(number)); + return mod(posInt, 0x10000); + }, + ToString: function ToString(value) { + return $String(value); + }, + ToObject: function ToObject(value) { + this.CheckObjectCoercible(value); + return $Object(value); + }, + CheckObjectCoercible: function CheckObjectCoercible(value, optMessage) { + /* jshint eqnull:true */ + if (value == null) { + throw new $TypeError(optMessage || 'Cannot call method on ' + value); + } + return value; + }, + IsCallable: IsCallable, + SameValue: function SameValue(x, y) { + if (x === y) { // 0 === -0, but they are not identical. + if (x === 0) { return 1 / x === 1 / y; } + return true; + } + return $isNaN(x) && $isNaN(y); + }, + + // https://www.ecma-international.org/ecma-262/5.1/#sec-8 + Type: function Type(x) { + if (x === null) { + return 'Null'; + } + if (typeof x === 'undefined') { + return 'Undefined'; + } + if (typeof x === 'function' || typeof x === 'object') { + return 'Object'; + } + if (typeof x === 'number') { + return 'Number'; + } + if (typeof x === 'boolean') { + return 'Boolean'; + } + if (typeof x === 'string') { + return 'String'; + } + }, + + // https://ecma-international.org/ecma-262/6.0/#sec-property-descriptor-specification-type + IsPropertyDescriptor: function IsPropertyDescriptor(Desc) { + if (this.Type(Desc) !== 'Object') { + return false; + } + var allowed = { + '[[Configurable]]': true, + '[[Enumerable]]': true, + '[[Get]]': true, + '[[Set]]': true, + '[[Value]]': true, + '[[Writable]]': true + }; + + for (var key in Desc) { // eslint-disable-line + if (has(Desc, key) && !allowed[key]) { + return false; + } + } + + var isData = has(Desc, '[[Value]]'); + var IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]'); + if (isData && IsAccessor) { + throw new $TypeError('Property Descriptors may not be both accessor and data descriptors'); + } + return true; + }, + + // https://ecma-international.org/ecma-262/5.1/#sec-8.10.1 + IsAccessorDescriptor: function IsAccessorDescriptor(Desc) { + if (typeof Desc === 'undefined') { + return false; + } + + assertRecord(this, 'Property Descriptor', 'Desc', Desc); + + if (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) { + return false; + } + + return true; + }, + + // https://ecma-international.org/ecma-262/5.1/#sec-8.10.2 + IsDataDescriptor: function IsDataDescriptor(Desc) { + if (typeof Desc === 'undefined') { + return false; + } + + assertRecord(this, 'Property Descriptor', 'Desc', Desc); + + if (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) { + return false; + } + + return true; + }, + + // https://ecma-international.org/ecma-262/5.1/#sec-8.10.3 + IsGenericDescriptor: function IsGenericDescriptor(Desc) { + if (typeof Desc === 'undefined') { + return false; + } + + assertRecord(this, 'Property Descriptor', 'Desc', Desc); + + if (!this.IsAccessorDescriptor(Desc) && !this.IsDataDescriptor(Desc)) { + return true; + } + + return false; + }, + + // https://ecma-international.org/ecma-262/5.1/#sec-8.10.4 + FromPropertyDescriptor: function FromPropertyDescriptor(Desc) { + if (typeof Desc === 'undefined') { + return Desc; + } + + assertRecord(this, 'Property Descriptor', 'Desc', Desc); + + if (this.IsDataDescriptor(Desc)) { + return { + value: Desc['[[Value]]'], + writable: !!Desc['[[Writable]]'], + enumerable: !!Desc['[[Enumerable]]'], + configurable: !!Desc['[[Configurable]]'] + }; + } else if (this.IsAccessorDescriptor(Desc)) { + return { + get: Desc['[[Get]]'], + set: Desc['[[Set]]'], + enumerable: !!Desc['[[Enumerable]]'], + configurable: !!Desc['[[Configurable]]'] + }; + } else { + throw new $TypeError('FromPropertyDescriptor must be called with a fully populated Property Descriptor'); + } + }, + + // https://ecma-international.org/ecma-262/5.1/#sec-8.10.5 + ToPropertyDescriptor: function ToPropertyDescriptor(Obj) { + if (this.Type(Obj) !== 'Object') { + throw new $TypeError('ToPropertyDescriptor requires an object'); + } + + var desc = {}; + if (has(Obj, 'enumerable')) { + desc['[[Enumerable]]'] = this.ToBoolean(Obj.enumerable); + } + if (has(Obj, 'configurable')) { + desc['[[Configurable]]'] = this.ToBoolean(Obj.configurable); + } + if (has(Obj, 'value')) { + desc['[[Value]]'] = Obj.value; + } + if (has(Obj, 'writable')) { + desc['[[Writable]]'] = this.ToBoolean(Obj.writable); + } + if (has(Obj, 'get')) { + var getter = Obj.get; + if (typeof getter !== 'undefined' && !this.IsCallable(getter)) { + throw new TypeError('getter must be a function'); + } + desc['[[Get]]'] = getter; + } + if (has(Obj, 'set')) { + var setter = Obj.set; + if (typeof setter !== 'undefined' && !this.IsCallable(setter)) { + throw new $TypeError('setter must be a function'); + } + desc['[[Set]]'] = setter; + } + + if ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) { + throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute'); + } + return desc; + } +}; + +module.exports = ES5; + +},{"./GetIntrinsic":569,"./helpers/assertRecord":571,"./helpers/isFinite":572,"./helpers/isNaN":573,"./helpers/mod":574,"./helpers/sign":575,"es-to-primitive/es5":576,"has":801,"is-callable":840}],571:[function(require,module,exports){ +'use strict'; + +var GetIntrinsic = require('../GetIntrinsic'); + +var $TypeError = GetIntrinsic('%TypeError%'); +var $SyntaxError = GetIntrinsic('%SyntaxError%'); + +var has = require('has'); + +var predicates = { + // https://ecma-international.org/ecma-262/6.0/#sec-property-descriptor-specification-type + 'Property Descriptor': function isPropertyDescriptor(ES, Desc) { + if (ES.Type(Desc) !== 'Object') { + return false; + } + var allowed = { + '[[Configurable]]': true, + '[[Enumerable]]': true, + '[[Get]]': true, + '[[Set]]': true, + '[[Value]]': true, + '[[Writable]]': true + }; + + for (var key in Desc) { // eslint-disable-line + if (has(Desc, key) && !allowed[key]) { + return false; + } + } + + var isData = has(Desc, '[[Value]]'); + var IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]'); + if (isData && IsAccessor) { + throw new $TypeError('Property Descriptors may not be both accessor and data descriptors'); + } + return true; + } +}; + +module.exports = function assertRecord(ES, recordType, argumentName, value) { + var predicate = predicates[recordType]; + if (typeof predicate !== 'function') { + throw new $SyntaxError('unknown record type: ' + recordType); + } + if (!predicate(ES, value)) { + throw new $TypeError(argumentName + ' must be a ' + recordType); + } + console.log(predicate(ES, value), value); +}; + +},{"../GetIntrinsic":569,"has":801}],572:[function(require,module,exports){ +var $isNaN = Number.isNaN || function (a) { return a !== a; }; + +module.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; }; + +},{}],573:[function(require,module,exports){ +module.exports = Number.isNaN || function isNaN(a) { + return a !== a; +}; + +},{}],574:[function(require,module,exports){ +module.exports = function mod(number, modulo) { + var remain = number % modulo; + return Math.floor(remain >= 0 ? remain : remain + modulo); +}; + +},{}],575:[function(require,module,exports){ +module.exports = function sign(number) { + return number >= 0 ? 1 : -1; +}; + +},{}],576:[function(require,module,exports){ +'use strict'; + +var toStr = Object.prototype.toString; + +var isPrimitive = require('./helpers/isPrimitive'); + +var isCallable = require('is-callable'); + +// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8 +var ES5internalSlots = { + '[[DefaultValue]]': function (O) { + var actualHint; + if (arguments.length > 1) { + actualHint = arguments[1]; + } else { + actualHint = toStr.call(O) === '[object Date]' ? String : Number; + } + + if (actualHint === String || actualHint === Number) { + var methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString']; + var value, i; + for (i = 0; i < methods.length; ++i) { + if (isCallable(O[methods[i]])) { + value = O[methods[i]](); + if (isPrimitive(value)) { + return value; + } + } + } + throw new TypeError('No default value'); + } + throw new TypeError('invalid [[DefaultValue]] hint supplied'); + } +}; + +// http://ecma-international.org/ecma-262/5.1/#sec-9.1 +module.exports = function ToPrimitive(input) { + if (isPrimitive(input)) { + return input; + } + if (arguments.length > 1) { + return ES5internalSlots['[[DefaultValue]]'](input, arguments[1]); + } + return ES5internalSlots['[[DefaultValue]]'](input); +}; + +},{"./helpers/isPrimitive":577,"is-callable":840}],577:[function(require,module,exports){ +module.exports = function isPrimitive(value) { + return value === null || (typeof value !== 'function' && typeof value !== 'object'); +}; + +},{}],578:[function(require,module,exports){ +'use strict'; + +var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g; + +module.exports = function (str) { + if (typeof str !== 'string') { + throw new TypeError('Expected a string'); + } + + return str.replace(matchOperatorsRe, '\\$&'); +}; + +},{}],579:[function(require,module,exports){ +(function (Buffer){ +var sha3 = require('js-sha3').keccak_256 +var uts46 = require('idna-uts46-hx') + +function namehash (inputName) { + // Reject empty names: + var node = '' + for (var i = 0; i < 32; i++) { + node += '00' + } + + name = normalize(inputName) + + if (name) { + var labels = name.split('.') + + for(var i = labels.length - 1; i >= 0; i--) { + var labelSha = sha3(labels[i]) + node = sha3(new Buffer(node + labelSha, 'hex')) + } + } + + return '0x' + node +} + +function normalize(name) { + return name ? uts46.toUnicode(name, {useStd3ASCII: true, transitional: false}) : name +} + +exports.hash = namehash +exports.normalize = normalize + +}).call(this,require("buffer").Buffer) +},{"buffer":113,"idna-uts46-hx":826,"js-sha3":580}],580:[function(require,module,exports){ +(function (process,global){ +/** + * [js-sha3]{@link https://github.com/emn178/js-sha3} + * + * @version 0.5.7 + * @author Chen, Yi-Cyuan [emn178@gmail.com] + * @copyright Chen, Yi-Cyuan 2015-2016 + * @license MIT + */ +/*jslint bitwise: true */ +(function () { + 'use strict'; + + var root = typeof window === 'object' ? window : {}; + var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node; + if (NODE_JS) { + root = global; + } + var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports; + var HEX_CHARS = '0123456789abcdef'.split(''); + var SHAKE_PADDING = [31, 7936, 2031616, 520093696]; + var KECCAK_PADDING = [1, 256, 65536, 16777216]; + var PADDING = [6, 1536, 393216, 100663296]; + var SHIFT = [0, 8, 16, 24]; + var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, + 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, + 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, + 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, + 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648]; + var BITS = [224, 256, 384, 512]; + var SHAKE_BITS = [128, 256]; + var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array']; + + var createOutputMethod = function (bits, padding, outputType) { + return function (message) { + return new Keccak(bits, padding, bits).update(message)[outputType](); + }; + }; + + var createShakeOutputMethod = function (bits, padding, outputType) { + return function (message, outputBits) { + return new Keccak(bits, padding, outputBits).update(message)[outputType](); + }; + }; + + var createMethod = function (bits, padding) { + var method = createOutputMethod(bits, padding, 'hex'); + method.create = function () { + return new Keccak(bits, padding, bits); + }; + method.update = function (message) { + return method.create().update(message); + }; + for (var i = 0; i < OUTPUT_TYPES.length; ++i) { + var type = OUTPUT_TYPES[i]; + method[type] = createOutputMethod(bits, padding, type); + } + return method; + }; + + var createShakeMethod = function (bits, padding) { + var method = createShakeOutputMethod(bits, padding, 'hex'); + method.create = function (outputBits) { + return new Keccak(bits, padding, outputBits); + }; + method.update = function (message, outputBits) { + return method.create(outputBits).update(message); + }; + for (var i = 0; i < OUTPUT_TYPES.length; ++i) { + var type = OUTPUT_TYPES[i]; + method[type] = createShakeOutputMethod(bits, padding, type); + } + return method; + }; + + var algorithms = [ + {name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod}, + {name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod}, + {name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod} + ]; + + var methods = {}, methodNames = []; + + for (var i = 0; i < algorithms.length; ++i) { + var algorithm = algorithms[i]; + var bits = algorithm.bits; + for (var j = 0; j < bits.length; ++j) { + var methodName = algorithm.name +'_' + bits[j]; + methodNames.push(methodName); + methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding); + } + } + + function Keccak(bits, padding, outputBits) { + this.blocks = []; + this.s = []; + this.padding = padding; + this.outputBits = outputBits; + this.reset = true; + this.block = 0; + this.start = 0; + this.blockCount = (1600 - (bits << 1)) >> 5; + this.byteCount = this.blockCount << 2; + this.outputBlocks = outputBits >> 5; + this.extraBytes = (outputBits & 31) >> 3; + + for (var i = 0; i < 50; ++i) { + this.s[i] = 0; + } + } + + Keccak.prototype.update = function (message) { + var notString = typeof message !== 'string'; + if (notString && message.constructor === ArrayBuffer) { + message = new Uint8Array(message); + } + var length = message.length, blocks = this.blocks, byteCount = this.byteCount, + blockCount = this.blockCount, index = 0, s = this.s, i, code; + + while (index < length) { + if (this.reset) { + this.reset = false; + blocks[0] = this.block; + for (i = 1; i < blockCount + 1; ++i) { + blocks[i] = 0; + } + } + if (notString) { + for (i = this.start; index < length && i < byteCount; ++index) { + blocks[i >> 2] |= message[index] << SHIFT[i++ & 3]; + } + } else { + for (i = this.start; index < length && i < byteCount; ++index) { + code = message.charCodeAt(index); + if (code < 0x80) { + blocks[i >> 2] |= code << SHIFT[i++ & 3]; + } else if (code < 0x800) { + blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; + } else if (code < 0xd800 || code >= 0xe000) { + blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; + } else { + code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff)); + blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; + } + } + } + this.lastByteIndex = i; + if (i >= byteCount) { + this.start = i - byteCount; + this.block = blocks[blockCount]; + for (i = 0; i < blockCount; ++i) { + s[i] ^= blocks[i]; + } + f(s); + this.reset = true; + } else { + this.start = i; + } + } + return this; + }; + + Keccak.prototype.finalize = function () { + var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s; + blocks[i >> 2] |= this.padding[i & 3]; + if (this.lastByteIndex === this.byteCount) { + blocks[0] = blocks[blockCount]; + for (i = 1; i < blockCount + 1; ++i) { + blocks[i] = 0; + } + } + blocks[blockCount - 1] |= 0x80000000; + for (i = 0; i < blockCount; ++i) { + s[i] ^= blocks[i]; + } + f(s); + }; + + Keccak.prototype.toString = Keccak.prototype.hex = function () { + this.finalize(); + + var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks, + extraBytes = this.extraBytes, i = 0, j = 0; + var hex = '', block; + while (j < outputBlocks) { + for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) { + block = s[i]; + hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] + + HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] + + HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] + + HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F]; + } + if (j % blockCount === 0) { + f(s); + i = 0; + } + } + if (extraBytes) { + block = s[i]; + if (extraBytes > 0) { + hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F]; + } + if (extraBytes > 1) { + hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F]; + } + if (extraBytes > 2) { + hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F]; + } + } + return hex; + }; + + Keccak.prototype.arrayBuffer = function () { + this.finalize(); + + var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks, + extraBytes = this.extraBytes, i = 0, j = 0; + var bytes = this.outputBits >> 3; + var buffer; + if (extraBytes) { + buffer = new ArrayBuffer((outputBlocks + 1) << 2); + } else { + buffer = new ArrayBuffer(bytes); + } + var array = new Uint32Array(buffer); + while (j < outputBlocks) { + for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) { + array[j] = s[i]; + } + if (j % blockCount === 0) { + f(s); + } + } + if (extraBytes) { + array[i] = s[i]; + buffer = buffer.slice(0, bytes); + } + return buffer; + }; + + Keccak.prototype.buffer = Keccak.prototype.arrayBuffer; + + Keccak.prototype.digest = Keccak.prototype.array = function () { + this.finalize(); + + var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks, + extraBytes = this.extraBytes, i = 0, j = 0; + var array = [], offset, block; + while (j < outputBlocks) { + for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) { + offset = j << 2; + block = s[i]; + array[offset] = block & 0xFF; + array[offset + 1] = (block >> 8) & 0xFF; + array[offset + 2] = (block >> 16) & 0xFF; + array[offset + 3] = (block >> 24) & 0xFF; + } + if (j % blockCount === 0) { + f(s); + } + } + if (extraBytes) { + offset = j << 2; + block = s[i]; + if (extraBytes > 0) { + array[offset] = block & 0xFF; + } + if (extraBytes > 1) { + array[offset + 1] = (block >> 8) & 0xFF; + } + if (extraBytes > 2) { + array[offset + 2] = (block >> 16) & 0xFF; + } + } + return array; + }; + + var f = function (s) { + var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, + b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, + b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, + b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49; + for (n = 0; n < 48; n += 2) { + c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]; + c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]; + c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]; + c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]; + c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]; + c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]; + c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]; + c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]; + c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]; + c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]; + + h = c8 ^ ((c2 << 1) | (c3 >>> 31)); + l = c9 ^ ((c3 << 1) | (c2 >>> 31)); + s[0] ^= h; + s[1] ^= l; + s[10] ^= h; + s[11] ^= l; + s[20] ^= h; + s[21] ^= l; + s[30] ^= h; + s[31] ^= l; + s[40] ^= h; + s[41] ^= l; + h = c0 ^ ((c4 << 1) | (c5 >>> 31)); + l = c1 ^ ((c5 << 1) | (c4 >>> 31)); + s[2] ^= h; + s[3] ^= l; + s[12] ^= h; + s[13] ^= l; + s[22] ^= h; + s[23] ^= l; + s[32] ^= h; + s[33] ^= l; + s[42] ^= h; + s[43] ^= l; + h = c2 ^ ((c6 << 1) | (c7 >>> 31)); + l = c3 ^ ((c7 << 1) | (c6 >>> 31)); + s[4] ^= h; + s[5] ^= l; + s[14] ^= h; + s[15] ^= l; + s[24] ^= h; + s[25] ^= l; + s[34] ^= h; + s[35] ^= l; + s[44] ^= h; + s[45] ^= l; + h = c4 ^ ((c8 << 1) | (c9 >>> 31)); + l = c5 ^ ((c9 << 1) | (c8 >>> 31)); + s[6] ^= h; + s[7] ^= l; + s[16] ^= h; + s[17] ^= l; + s[26] ^= h; + s[27] ^= l; + s[36] ^= h; + s[37] ^= l; + s[46] ^= h; + s[47] ^= l; + h = c6 ^ ((c0 << 1) | (c1 >>> 31)); + l = c7 ^ ((c1 << 1) | (c0 >>> 31)); + s[8] ^= h; + s[9] ^= l; + s[18] ^= h; + s[19] ^= l; + s[28] ^= h; + s[29] ^= l; + s[38] ^= h; + s[39] ^= l; + s[48] ^= h; + s[49] ^= l; + + b0 = s[0]; + b1 = s[1]; + b32 = (s[11] << 4) | (s[10] >>> 28); + b33 = (s[10] << 4) | (s[11] >>> 28); + b14 = (s[20] << 3) | (s[21] >>> 29); + b15 = (s[21] << 3) | (s[20] >>> 29); + b46 = (s[31] << 9) | (s[30] >>> 23); + b47 = (s[30] << 9) | (s[31] >>> 23); + b28 = (s[40] << 18) | (s[41] >>> 14); + b29 = (s[41] << 18) | (s[40] >>> 14); + b20 = (s[2] << 1) | (s[3] >>> 31); + b21 = (s[3] << 1) | (s[2] >>> 31); + b2 = (s[13] << 12) | (s[12] >>> 20); + b3 = (s[12] << 12) | (s[13] >>> 20); + b34 = (s[22] << 10) | (s[23] >>> 22); + b35 = (s[23] << 10) | (s[22] >>> 22); + b16 = (s[33] << 13) | (s[32] >>> 19); + b17 = (s[32] << 13) | (s[33] >>> 19); + b48 = (s[42] << 2) | (s[43] >>> 30); + b49 = (s[43] << 2) | (s[42] >>> 30); + b40 = (s[5] << 30) | (s[4] >>> 2); + b41 = (s[4] << 30) | (s[5] >>> 2); + b22 = (s[14] << 6) | (s[15] >>> 26); + b23 = (s[15] << 6) | (s[14] >>> 26); + b4 = (s[25] << 11) | (s[24] >>> 21); + b5 = (s[24] << 11) | (s[25] >>> 21); + b36 = (s[34] << 15) | (s[35] >>> 17); + b37 = (s[35] << 15) | (s[34] >>> 17); + b18 = (s[45] << 29) | (s[44] >>> 3); + b19 = (s[44] << 29) | (s[45] >>> 3); + b10 = (s[6] << 28) | (s[7] >>> 4); + b11 = (s[7] << 28) | (s[6] >>> 4); + b42 = (s[17] << 23) | (s[16] >>> 9); + b43 = (s[16] << 23) | (s[17] >>> 9); + b24 = (s[26] << 25) | (s[27] >>> 7); + b25 = (s[27] << 25) | (s[26] >>> 7); + b6 = (s[36] << 21) | (s[37] >>> 11); + b7 = (s[37] << 21) | (s[36] >>> 11); + b38 = (s[47] << 24) | (s[46] >>> 8); + b39 = (s[46] << 24) | (s[47] >>> 8); + b30 = (s[8] << 27) | (s[9] >>> 5); + b31 = (s[9] << 27) | (s[8] >>> 5); + b12 = (s[18] << 20) | (s[19] >>> 12); + b13 = (s[19] << 20) | (s[18] >>> 12); + b44 = (s[29] << 7) | (s[28] >>> 25); + b45 = (s[28] << 7) | (s[29] >>> 25); + b26 = (s[38] << 8) | (s[39] >>> 24); + b27 = (s[39] << 8) | (s[38] >>> 24); + b8 = (s[48] << 14) | (s[49] >>> 18); + b9 = (s[49] << 14) | (s[48] >>> 18); + + s[0] = b0 ^ (~b2 & b4); + s[1] = b1 ^ (~b3 & b5); + s[10] = b10 ^ (~b12 & b14); + s[11] = b11 ^ (~b13 & b15); + s[20] = b20 ^ (~b22 & b24); + s[21] = b21 ^ (~b23 & b25); + s[30] = b30 ^ (~b32 & b34); + s[31] = b31 ^ (~b33 & b35); + s[40] = b40 ^ (~b42 & b44); + s[41] = b41 ^ (~b43 & b45); + s[2] = b2 ^ (~b4 & b6); + s[3] = b3 ^ (~b5 & b7); + s[12] = b12 ^ (~b14 & b16); + s[13] = b13 ^ (~b15 & b17); + s[22] = b22 ^ (~b24 & b26); + s[23] = b23 ^ (~b25 & b27); + s[32] = b32 ^ (~b34 & b36); + s[33] = b33 ^ (~b35 & b37); + s[42] = b42 ^ (~b44 & b46); + s[43] = b43 ^ (~b45 & b47); + s[4] = b4 ^ (~b6 & b8); + s[5] = b5 ^ (~b7 & b9); + s[14] = b14 ^ (~b16 & b18); + s[15] = b15 ^ (~b17 & b19); + s[24] = b24 ^ (~b26 & b28); + s[25] = b25 ^ (~b27 & b29); + s[34] = b34 ^ (~b36 & b38); + s[35] = b35 ^ (~b37 & b39); + s[44] = b44 ^ (~b46 & b48); + s[45] = b45 ^ (~b47 & b49); + s[6] = b6 ^ (~b8 & b0); + s[7] = b7 ^ (~b9 & b1); + s[16] = b16 ^ (~b18 & b10); + s[17] = b17 ^ (~b19 & b11); + s[26] = b26 ^ (~b28 & b20); + s[27] = b27 ^ (~b29 & b21); + s[36] = b36 ^ (~b38 & b30); + s[37] = b37 ^ (~b39 & b31); + s[46] = b46 ^ (~b48 & b40); + s[47] = b47 ^ (~b49 & b41); + s[8] = b8 ^ (~b0 & b2); + s[9] = b9 ^ (~b1 & b3); + s[18] = b18 ^ (~b10 & b12); + s[19] = b19 ^ (~b11 & b13); + s[28] = b28 ^ (~b20 & b22); + s[29] = b29 ^ (~b21 & b23); + s[38] = b38 ^ (~b30 & b32); + s[39] = b39 ^ (~b31 & b33); + s[48] = b48 ^ (~b40 & b42); + s[49] = b49 ^ (~b41 & b43); + + s[0] ^= RC[n]; + s[1] ^= RC[n + 1]; + } + }; + + if (COMMON_JS) { + module.exports = methods; + } else { + for (var i = 0; i < methodNames.length; ++i) { + root[methodNames[i]] = methods[methodNames[i]]; + } + } +})(); + +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"_process":109}],581:[function(require,module,exports){ +var generate = function generate(num, fn) { + var a = []; + for (var i = 0; i < num; ++i) { + a.push(fn(i)); + }return a; +}; + +var replicate = function replicate(num, val) { + return generate(num, function () { + return val; + }); +}; + +var concat = function concat(a, b) { + return a.concat(b); +}; + +var flatten = function flatten(a) { + var r = []; + for (var j = 0, J = a.length; j < J; ++j) { + for (var i = 0, I = a[j].length; i < I; ++i) { + r.push(a[j][i]); + } + }return r; +}; + +var chunksOf = function chunksOf(n, a) { + var b = []; + for (var i = 0, l = a.length; i < l; i += n) { + b.push(a.slice(i, i + n)); + }return b; +}; + +module.exports = { + generate: generate, + replicate: replicate, + concat: concat, + flatten: flatten, + chunksOf: chunksOf +}; +},{}],582:[function(require,module,exports){ +var A = require("./array.js"); + +var at = function at(bytes, index) { + return parseInt(bytes.slice(index * 2 + 2, index * 2 + 4), 16); +}; + +var random = function random(bytes) { + var rnd = void 0; + if (typeof window !== "undefined" && window.crypto && window.crypto.getRandomValues) rnd = window.crypto.getRandomValues(new Uint8Array(bytes));else if (typeof require !== "undefined") rnd = require("c" + "rypto").randomBytes(bytes);else throw "Safe random numbers not available."; + var hex = "0x"; + for (var i = 0; i < bytes; ++i) { + hex += ("00" + rnd[i].toString(16)).slice(-2); + }return hex; +}; + +var length = function length(a) { + return (a.length - 2) / 2; +}; + +var flatten = function flatten(a) { + return "0x" + a.reduce(function (r, s) { + return r + s.slice(2); + }, ""); +}; + +var slice = function slice(i, j, bs) { + return "0x" + bs.slice(i * 2 + 2, j * 2 + 2); +}; + +var reverse = function reverse(hex) { + var rev = "0x"; + for (var i = 0, l = length(hex); i < l; ++i) { + rev += hex.slice((l - i) * 2, (l - i + 1) * 2); + } + return rev; +}; + +var pad = function pad(l, hex) { + return hex.length === l * 2 + 2 ? hex : pad(l, "0x" + "0" + hex.slice(2)); +}; + +var padRight = function padRight(l, hex) { + return hex.length === l * 2 + 2 ? hex : padRight(l, hex + "0"); +}; + +var toArray = function toArray(hex) { + var arr = []; + for (var i = 2, l = hex.length; i < l; i += 2) { + arr.push(parseInt(hex.slice(i, i + 2), 16)); + }return arr; +}; + +var fromArray = function fromArray(arr) { + var hex = "0x"; + for (var i = 0, l = arr.length; i < l; ++i) { + var b = arr[i]; + hex += (b < 16 ? "0" : "") + b.toString(16); + } + return hex; +}; + +var toUint8Array = function toUint8Array(hex) { + return new Uint8Array(toArray(hex)); +}; + +var fromUint8Array = function fromUint8Array(arr) { + return fromArray([].slice.call(arr, 0)); +}; + +var fromNumber = function fromNumber(num) { + var hex = num.toString(16); + return hex.length % 2 === 0 ? "0x" + hex : "0x0" + hex; +}; + +var toNumber = function toNumber(hex) { + return parseInt(hex.slice(2), 16); +}; + +var concat = function concat(a, b) { + return a.concat(b.slice(2)); +}; + +var fromNat = function fromNat(bn) { + return bn === "0x0" ? "0x" : bn.length % 2 === 0 ? bn : "0x0" + bn.slice(2); +}; + +var toNat = function toNat(bn) { + return bn[2] === "0" ? "0x" + bn.slice(3) : bn; +}; + +var fromAscii = function fromAscii(ascii) { + var hex = "0x"; + for (var i = 0; i < ascii.length; ++i) { + hex += ("00" + ascii.charCodeAt(i).toString(16)).slice(-2); + }return hex; +}; + +var toAscii = function toAscii(hex) { + var ascii = ""; + for (var i = 2; i < hex.length; i += 2) { + ascii += String.fromCharCode(parseInt(hex.slice(i, i + 2), 16)); + }return ascii; +}; + +// From https://gist.github.com/pascaldekloe/62546103a1576803dade9269ccf76330 +var fromString = function fromString(s) { + var makeByte = function makeByte(uint8) { + var b = uint8.toString(16); + return b.length < 2 ? "0" + b : b; + }; + var bytes = "0x"; + for (var ci = 0; ci != s.length; ci++) { + var c = s.charCodeAt(ci); + if (c < 128) { + bytes += makeByte(c); + continue; + } + if (c < 2048) { + bytes += makeByte(c >> 6 | 192); + } else { + if (c > 0xd7ff && c < 0xdc00) { + if (++ci == s.length) return null; + var c2 = s.charCodeAt(ci); + if (c2 < 0xdc00 || c2 > 0xdfff) return null; + c = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff); + bytes += makeByte(c >> 18 | 240); + bytes += makeByte(c >> 12 & 63 | 128); + } else { + // c <= 0xffff + bytes += makeByte(c >> 12 | 224); + } + bytes += makeByte(c >> 6 & 63 | 128); + } + bytes += makeByte(c & 63 | 128); + } + return bytes; +}; + +var toString = function toString(bytes) { + var s = ''; + var i = 0; + var l = length(bytes); + while (i < l) { + var c = at(bytes, i++); + if (c > 127) { + if (c > 191 && c < 224) { + if (i >= l) return null; + c = (c & 31) << 6 | at(bytes, i) & 63; + } else if (c > 223 && c < 240) { + if (i + 1 >= l) return null; + c = (c & 15) << 12 | (at(bytes, i) & 63) << 6 | at(bytes, ++i) & 63; + } else if (c > 239 && c < 248) { + if (i + 2 >= l) return null; + c = (c & 7) << 18 | (at(bytes, i) & 63) << 12 | (at(bytes, ++i) & 63) << 6 | at(bytes, ++i) & 63; + } else return null; + ++i; + } + if (c <= 0xffff) s += String.fromCharCode(c);else if (c <= 0x10ffff) { + c -= 0x10000; + s += String.fromCharCode(c >> 10 | 0xd800); + s += String.fromCharCode(c & 0x3FF | 0xdc00); + } else return null; + } + return s; +}; + +module.exports = { + random: random, + length: length, + concat: concat, + flatten: flatten, + slice: slice, + reverse: reverse, + pad: pad, + padRight: padRight, + fromAscii: fromAscii, + toAscii: toAscii, + fromString: fromString, + toString: toString, + fromNumber: fromNumber, + toNumber: toNumber, + fromNat: fromNat, + toNat: toNat, + fromArray: fromArray, + toArray: toArray, + fromUint8Array: fromUint8Array, + toUint8Array: toUint8Array +}; +},{"./array.js":581}],583:[function(require,module,exports){ +// This was ported from https://github.com/emn178/js-sha3, with some minor +// modifications and pruning. It is licensed under MIT: +// +// Copyright 2015-2016 Chen, Yi-Cyuan +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +var HEX_CHARS = '0123456789abcdef'.split(''); +var KECCAK_PADDING = [1, 256, 65536, 16777216]; +var SHIFT = [0, 8, 16, 24]; +var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648]; + +var Keccak = function Keccak(bits) { + return { + blocks: [], + reset: true, + block: 0, + start: 0, + blockCount: 1600 - (bits << 1) >> 5, + outputBlocks: bits >> 5, + s: function (s) { + return [].concat(s, s, s, s, s); + }([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) + }; +}; + +var update = function update(state, message) { + var length = message.length, + blocks = state.blocks, + byteCount = state.blockCount << 2, + blockCount = state.blockCount, + outputBlocks = state.outputBlocks, + s = state.s, + index = 0, + i, + code; + + // update + while (index < length) { + if (state.reset) { + state.reset = false; + blocks[0] = state.block; + for (i = 1; i < blockCount + 1; ++i) { + blocks[i] = 0; + } + } + if (typeof message !== "string") { + for (i = state.start; index < length && i < byteCount; ++index) { + blocks[i >> 2] |= message[index] << SHIFT[i++ & 3]; + } + } else { + for (i = state.start; index < length && i < byteCount; ++index) { + code = message.charCodeAt(index); + if (code < 0x80) { + blocks[i >> 2] |= code << SHIFT[i++ & 3]; + } else if (code < 0x800) { + blocks[i >> 2] |= (0xc0 | code >> 6) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3]; + } else if (code < 0xd800 || code >= 0xe000) { + blocks[i >> 2] |= (0xe0 | code >> 12) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3]; + } else { + code = 0x10000 + ((code & 0x3ff) << 10 | message.charCodeAt(++index) & 0x3ff); + blocks[i >> 2] |= (0xf0 | code >> 18) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | code >> 12 & 0x3f) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3]; + } + } + } + state.lastByteIndex = i; + if (i >= byteCount) { + state.start = i - byteCount; + state.block = blocks[blockCount]; + for (i = 0; i < blockCount; ++i) { + s[i] ^= blocks[i]; + } + f(s); + state.reset = true; + } else { + state.start = i; + } + } + + // finalize + i = state.lastByteIndex; + blocks[i >> 2] |= KECCAK_PADDING[i & 3]; + if (state.lastByteIndex === byteCount) { + blocks[0] = blocks[blockCount]; + for (i = 1; i < blockCount + 1; ++i) { + blocks[i] = 0; + } + } + blocks[blockCount - 1] |= 0x80000000; + for (i = 0; i < blockCount; ++i) { + s[i] ^= blocks[i]; + } + f(s); + + // toString + var hex = '', + i = 0, + j = 0, + block; + while (j < outputBlocks) { + for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) { + block = s[i]; + hex += HEX_CHARS[block >> 4 & 0x0F] + HEX_CHARS[block & 0x0F] + HEX_CHARS[block >> 12 & 0x0F] + HEX_CHARS[block >> 8 & 0x0F] + HEX_CHARS[block >> 20 & 0x0F] + HEX_CHARS[block >> 16 & 0x0F] + HEX_CHARS[block >> 28 & 0x0F] + HEX_CHARS[block >> 24 & 0x0F]; + } + if (j % blockCount === 0) { + f(s); + i = 0; + } + } + return "0x" + hex; +}; + +var f = function f(s) { + var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49; + + for (n = 0; n < 48; n += 2) { + c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]; + c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]; + c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]; + c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]; + c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]; + c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]; + c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]; + c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]; + c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]; + c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]; + + h = c8 ^ (c2 << 1 | c3 >>> 31); + l = c9 ^ (c3 << 1 | c2 >>> 31); + s[0] ^= h; + s[1] ^= l; + s[10] ^= h; + s[11] ^= l; + s[20] ^= h; + s[21] ^= l; + s[30] ^= h; + s[31] ^= l; + s[40] ^= h; + s[41] ^= l; + h = c0 ^ (c4 << 1 | c5 >>> 31); + l = c1 ^ (c5 << 1 | c4 >>> 31); + s[2] ^= h; + s[3] ^= l; + s[12] ^= h; + s[13] ^= l; + s[22] ^= h; + s[23] ^= l; + s[32] ^= h; + s[33] ^= l; + s[42] ^= h; + s[43] ^= l; + h = c2 ^ (c6 << 1 | c7 >>> 31); + l = c3 ^ (c7 << 1 | c6 >>> 31); + s[4] ^= h; + s[5] ^= l; + s[14] ^= h; + s[15] ^= l; + s[24] ^= h; + s[25] ^= l; + s[34] ^= h; + s[35] ^= l; + s[44] ^= h; + s[45] ^= l; + h = c4 ^ (c8 << 1 | c9 >>> 31); + l = c5 ^ (c9 << 1 | c8 >>> 31); + s[6] ^= h; + s[7] ^= l; + s[16] ^= h; + s[17] ^= l; + s[26] ^= h; + s[27] ^= l; + s[36] ^= h; + s[37] ^= l; + s[46] ^= h; + s[47] ^= l; + h = c6 ^ (c0 << 1 | c1 >>> 31); + l = c7 ^ (c1 << 1 | c0 >>> 31); + s[8] ^= h; + s[9] ^= l; + s[18] ^= h; + s[19] ^= l; + s[28] ^= h; + s[29] ^= l; + s[38] ^= h; + s[39] ^= l; + s[48] ^= h; + s[49] ^= l; + + b0 = s[0]; + b1 = s[1]; + b32 = s[11] << 4 | s[10] >>> 28; + b33 = s[10] << 4 | s[11] >>> 28; + b14 = s[20] << 3 | s[21] >>> 29; + b15 = s[21] << 3 | s[20] >>> 29; + b46 = s[31] << 9 | s[30] >>> 23; + b47 = s[30] << 9 | s[31] >>> 23; + b28 = s[40] << 18 | s[41] >>> 14; + b29 = s[41] << 18 | s[40] >>> 14; + b20 = s[2] << 1 | s[3] >>> 31; + b21 = s[3] << 1 | s[2] >>> 31; + b2 = s[13] << 12 | s[12] >>> 20; + b3 = s[12] << 12 | s[13] >>> 20; + b34 = s[22] << 10 | s[23] >>> 22; + b35 = s[23] << 10 | s[22] >>> 22; + b16 = s[33] << 13 | s[32] >>> 19; + b17 = s[32] << 13 | s[33] >>> 19; + b48 = s[42] << 2 | s[43] >>> 30; + b49 = s[43] << 2 | s[42] >>> 30; + b40 = s[5] << 30 | s[4] >>> 2; + b41 = s[4] << 30 | s[5] >>> 2; + b22 = s[14] << 6 | s[15] >>> 26; + b23 = s[15] << 6 | s[14] >>> 26; + b4 = s[25] << 11 | s[24] >>> 21; + b5 = s[24] << 11 | s[25] >>> 21; + b36 = s[34] << 15 | s[35] >>> 17; + b37 = s[35] << 15 | s[34] >>> 17; + b18 = s[45] << 29 | s[44] >>> 3; + b19 = s[44] << 29 | s[45] >>> 3; + b10 = s[6] << 28 | s[7] >>> 4; + b11 = s[7] << 28 | s[6] >>> 4; + b42 = s[17] << 23 | s[16] >>> 9; + b43 = s[16] << 23 | s[17] >>> 9; + b24 = s[26] << 25 | s[27] >>> 7; + b25 = s[27] << 25 | s[26] >>> 7; + b6 = s[36] << 21 | s[37] >>> 11; + b7 = s[37] << 21 | s[36] >>> 11; + b38 = s[47] << 24 | s[46] >>> 8; + b39 = s[46] << 24 | s[47] >>> 8; + b30 = s[8] << 27 | s[9] >>> 5; + b31 = s[9] << 27 | s[8] >>> 5; + b12 = s[18] << 20 | s[19] >>> 12; + b13 = s[19] << 20 | s[18] >>> 12; + b44 = s[29] << 7 | s[28] >>> 25; + b45 = s[28] << 7 | s[29] >>> 25; + b26 = s[38] << 8 | s[39] >>> 24; + b27 = s[39] << 8 | s[38] >>> 24; + b8 = s[48] << 14 | s[49] >>> 18; + b9 = s[49] << 14 | s[48] >>> 18; + + s[0] = b0 ^ ~b2 & b4; + s[1] = b1 ^ ~b3 & b5; + s[10] = b10 ^ ~b12 & b14; + s[11] = b11 ^ ~b13 & b15; + s[20] = b20 ^ ~b22 & b24; + s[21] = b21 ^ ~b23 & b25; + s[30] = b30 ^ ~b32 & b34; + s[31] = b31 ^ ~b33 & b35; + s[40] = b40 ^ ~b42 & b44; + s[41] = b41 ^ ~b43 & b45; + s[2] = b2 ^ ~b4 & b6; + s[3] = b3 ^ ~b5 & b7; + s[12] = b12 ^ ~b14 & b16; + s[13] = b13 ^ ~b15 & b17; + s[22] = b22 ^ ~b24 & b26; + s[23] = b23 ^ ~b25 & b27; + s[32] = b32 ^ ~b34 & b36; + s[33] = b33 ^ ~b35 & b37; + s[42] = b42 ^ ~b44 & b46; + s[43] = b43 ^ ~b45 & b47; + s[4] = b4 ^ ~b6 & b8; + s[5] = b5 ^ ~b7 & b9; + s[14] = b14 ^ ~b16 & b18; + s[15] = b15 ^ ~b17 & b19; + s[24] = b24 ^ ~b26 & b28; + s[25] = b25 ^ ~b27 & b29; + s[34] = b34 ^ ~b36 & b38; + s[35] = b35 ^ ~b37 & b39; + s[44] = b44 ^ ~b46 & b48; + s[45] = b45 ^ ~b47 & b49; + s[6] = b6 ^ ~b8 & b0; + s[7] = b7 ^ ~b9 & b1; + s[16] = b16 ^ ~b18 & b10; + s[17] = b17 ^ ~b19 & b11; + s[26] = b26 ^ ~b28 & b20; + s[27] = b27 ^ ~b29 & b21; + s[36] = b36 ^ ~b38 & b30; + s[37] = b37 ^ ~b39 & b31; + s[46] = b46 ^ ~b48 & b40; + s[47] = b47 ^ ~b49 & b41; + s[8] = b8 ^ ~b0 & b2; + s[9] = b9 ^ ~b1 & b3; + s[18] = b18 ^ ~b10 & b12; + s[19] = b19 ^ ~b11 & b13; + s[28] = b28 ^ ~b20 & b22; + s[29] = b29 ^ ~b21 & b23; + s[38] = b38 ^ ~b30 & b32; + s[39] = b39 ^ ~b31 & b33; + s[48] = b48 ^ ~b40 & b42; + s[49] = b49 ^ ~b41 & b43; + + s[0] ^= RC[n]; + s[1] ^= RC[n + 1]; + } +}; + +var keccak = function keccak(bits) { + return function (str) { + var msg; + if (str.slice(0, 2) === "0x") { + msg = []; + for (var i = 2, l = str.length; i < l; i += 2) { + msg.push(parseInt(str.slice(i, i + 2), 16)); + } + } else { + msg = str; + } + return update(Keccak(bits, bits), msg); + }; +}; + +module.exports = { + keccak256: keccak(256), + keccak512: keccak(512), + keccak256s: keccak(256), + keccak512s: keccak(512) +}; +},{}],584:[function(require,module,exports){ +module.exports={ + "genesisGasLimit": { + "v": 5000, + "d": "Gas limit of the Genesis block." + }, + "genesisDifficulty": { + "v": 17179869184, + "d": "Difficulty of the Genesis block." + }, + "genesisNonce": { + "v": "0x0000000000000042", + "d": "the geneis nonce" + }, + "genesisExtraData": { + "v": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "d": "extra data " + }, + "genesisHash": { + "v": "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3", + "d": "genesis hash" + }, + "genesisStateRoot": { + "v": "0xd7f8974fb5ac78d9ac099b9ad5018bedc2ce0a72dad1827a1709da30580f0544", + "d": "the genesis state root" + }, + "minGasLimit": { + "v": 5000, + "d": "Minimum the gas limit may ever be." + }, + "gasLimitBoundDivisor": { + "v": 1024, + "d": "The bound divisor of the gas limit, used in update calculations." + }, + "minimumDifficulty": { + "v": 131072, + "d": "The minimum that the difficulty may ever be." + }, + "difficultyBoundDivisor": { + "v": 2048, + "d": "The bound divisor of the difficulty, used in the update calculations." + }, + "durationLimit": { + "v": 13, + "d": "The decision boundary on the blocktime duration used to determine whether difficulty should go up or not." + }, + "maximumExtraDataSize": { + "v": 32, + "d": "Maximum size extra data may be after Genesis." + }, + "epochDuration": { + "v": 30000, + "d": "Duration between proof-of-work epochs." + }, + "stackLimit": { + "v": 1024, + "d": "Maximum size of VM stack allowed." + }, + "callCreateDepth": { + "v": 1024, + "d": "Maximum depth of call/create stack." + }, + + "tierStepGas": { + "v": [0, 2, 3, 5, 8, 10, 20], + "d": "Once per operation, for a selection of them." + }, + "expGas": { + "v": 10, + "d": "Once per EXP instuction." + }, + "expByteGas": { + "v": 50, + "d": "Times ceil(log256(exponent)) for the EXP instruction." + }, + + "sha3Gas": { + "v": 30, + "d": "Once per SHA3 operation." + }, + "sha3WordGas": { + "v": 6, + "d": "Once per word of the SHA3 operation's data." + }, + "sloadGas": { + "v": 50, + "d": "Once per SLOAD operation." + }, + "sstoreSetGas": { + "v": 20000, + "d": "Once per SSTORE operation if the zeroness changes from zero." + }, + "sstoreResetGas": { + "v": 5000, + "d": "Once per SSTORE operation if the zeroness does not change from zero." + }, + "sstoreRefundGas": { + "v": 15000, + "d": "Once per SSTORE operation if the zeroness changes to zero." + }, + "jumpdestGas": { + "v": 1, + "d": "Refunded gas, once per SSTORE operation if the zeroness changes to zero." + }, + + "logGas": { + "v": 375, + "d": "Per LOG* operation." + }, + "logDataGas": { + "v": 8, + "d": "Per byte in a LOG* operation's data." + }, + "logTopicGas": { + "v": 375, + "d": "Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas." + }, + + "createGas": { + "v": 32000, + "d": "Once per CREATE operation & contract-creation transaction." + }, + + "callGas": { + "v": 40, + "d": "Once per CALL operation & message call transaction." + }, + "callStipend": { + "v": 2300, + "d": "Free gas given at beginning of call." + }, + "callValueTransferGas": { + "v": 9000, + "d": "Paid for CALL when the value transfor is non-zero." + }, + "callNewAccountGas": { + "v": 25000, + "d": "Paid for CALL when the destination address didn't exist prior." + }, + + "suicideRefundGas": { + "v": 24000, + "d": "Refunded following a suicide operation." + }, + + "memoryGas": { + "v": 3, + "d": "Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL." + }, + "quadCoeffDiv": { + "v": 512, + "d": "Divisor for the quadratic particle of the memory cost equation." + }, + + "createDataGas": { + "v": 200, + "d": "" + }, + "txGas": { + "v": 21000, + "d": "Per transaction. NOTE: Not payable on data of calls between transactions." + }, + "txCreation": { + "v": 32000, + "d": "the cost of creating a contract via tx" + }, + "txDataZeroGas": { + "v": 4, + "d": "Per byte of data attached to a transaction that equals zero. NOTE: Not payable on data of calls between transactions." + }, + "txDataNonZeroGas": { + "v": 68, + "d": "Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions." + }, + + "copyGas": { + "v": 3, + "d": "Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added." + }, + + "ecrecoverGas": { + "v": 3000, + "d": "" + }, + "sha256Gas": { + "v": 60, + "d": "" + }, + "sha256WordGas": { + "v": 12, + "d": "" + }, + "ripemd160Gas": { + "v": 600, + "d": "" + }, + "ripemd160WordGas": { + "v": 120, + "d": "" + }, + "identityGas": { + "v": 15, + "d": "" + }, + "identityWordGas": { + "v": 3, + "d": "" + }, + "modexpGquaddivisor": { + "v": 20, + "d": "Gquaddivisor from modexp precompile for gas calculation." + }, + "ecAddGas": { + "v": 500, + "d": "Gas costs for curve addition precompile." + }, + "ecMulGas": { + "v": 40000, + "d": "Gas costs for curve multiplication precompile." + }, + "ecPairingGas": { + "v": 100000, + "d": "Base gas costs for curve pairing precompile." + }, + "ecPairingWordGas": { + "v": 80000, + "d": "Gas costs regarding curve pairing precompile input length." + }, + "minerReward": { + "v": "3000000000000000000", + "d": "the amount a miner get rewarded for mining a block" + }, + "homeSteadForkNumber": { + "v": 1150000, + "d": "the block that the Homestead fork started at" + }, + "homesteadRepriceForkNumber": { + "v": 2463000, + "d": "the block that the Homestead Reprice (EIP150) fork started at" + }, + "timebombPeriod": { + "v": 100000, + "d": "Exponential difficulty timebomb period" + }, + "freeBlockPeriod": { + "v": 2 + } +} + +},{}],585:[function(require,module,exports){ +const ethUtil = require('ethereumjs-util') +const rlp = require('rlp') +const Buffer = require('safe-buffer').Buffer + +var Account = module.exports = function (data) { + // Define Properties + var fields = [{ + name: 'nonce', + default: Buffer.alloc(0) + }, { + name: 'balance', + default: Buffer.alloc(0) + }, { + name: 'stateRoot', + length: 32, + default: ethUtil.SHA3_RLP + }, { + name: 'codeHash', + length: 32, + default: ethUtil.SHA3_NULL + }] + + ethUtil.defineProperties(this, fields, data) +} + +Account.prototype.serialize = function () { + return rlp.encode(this.raw) +} + +Account.prototype.isContract = function () { + return this.codeHash.toString('hex') !== ethUtil.SHA3_NULL_S +} + +Account.prototype.getCode = function (state, cb) { + if (!this.isContract()) { + cb(null, Buffer.alloc(0)) + return + } + + state.getRaw(this.codeHash, cb) +} + +Account.prototype.setCode = function (trie, code, cb) { + var self = this + + this.codeHash = ethUtil.sha3(code) + + if (this.codeHash.toString('hex') === ethUtil.SHA3_NULL_S) { + cb(null, Buffer.alloc(0)) + return + } + + trie.putRaw(this.codeHash, code, function (err) { + cb(err, self.codeHash) + }) +} + +Account.prototype.getStorage = function (trie, key, cb) { + var t = trie.copy() + t.root = this.stateRoot + t.get(key, cb) +} + +Account.prototype.setStorage = function (trie, key, val, cb) { + var self = this + var t = trie.copy() + t.root = self.stateRoot + t.put(key, val, function (err) { + if (err) return cb() + self.stateRoot = t.root + cb() + }) +} + +Account.prototype.isEmpty = function () { + return this.balance.toString('hex') === '' && + this.nonce.toString('hex') === '' && + this.stateRoot.toString('hex') === ethUtil.SHA3_RLP_S && + this.codeHash.toString('hex') === ethUtil.SHA3_NULL_S +} + +},{"ethereumjs-util":612,"rlp":1331,"safe-buffer":1334}],586:[function(require,module,exports){ +(function (Buffer){ +const utils = require('ethereumjs-util') +const params = require('ethereum-common/params.json') +const BN = utils.BN + /** + * An object that repersents the block header + * @constructor + * @param {Array} data raw data, deserialized + * @prop {Buffer} parentHash the blocks' parent's hash + * @prop {Buffer} uncleHash sha3(rlp_encode(uncle_list)) + * @prop {Buffer} coinbase the miner address + * @prop {Buffer} stateRoot The root of a Merkle Patricia tree + * @prop {Buffer} transactionTrie the root of a Trie containing the transactions + * @prop {Buffer} receiptTrie the root of a Trie containing the transaction Reciept + * @prop {Buffer} bloom + * @prop {Buffer} difficulty + * @prop {Buffer} number the block's height + * @prop {Buffer} gasLimit + * @prop {Buffer} gasUsed + * @prop {Buffer} timestamp + * @prop {Buffer} extraData + * @prop {Array.} raw an array of buffers containing the raw blocks. + */ +var BlockHeader = module.exports = function (data) { + var fields = [{ + name: 'parentHash', + length: 32, + default: utils.zeros(32) + }, { + name: 'uncleHash', + default: utils.SHA3_RLP_ARRAY + }, { + name: 'coinbase', + length: 20, + default: utils.zeros(20) + }, { + name: 'stateRoot', + length: 32, + default: utils.zeros(32) + }, { + name: 'transactionsTrie', + length: 32, + default: utils.SHA3_RLP + }, { + name: 'receiptTrie', + length: 32, + default: utils.SHA3_RLP + }, { + name: 'bloom', + default: utils.zeros(256) + }, { + name: 'difficulty', + default: new Buffer([]) + }, { + name: 'number', + default: utils.intToBuffer(params.homeSteadForkNumber.v) + }, { + name: 'gasLimit', + default: new Buffer('ffffffffffffff', 'hex') + }, { + name: 'gasUsed', + empty: true, + default: new Buffer([]) + }, { + name: 'timestamp', + default: new Buffer([]) + }, { + name: 'extraData', + allowZero: true, + empty: true, + default: new Buffer([]) + }, { + name: 'mixHash', + default: utils.zeros(32) + // length: 32 + }, { + name: 'nonce', + default: new Buffer([]) // sha3(42) + }] + utils.defineProperties(this, fields, data) +} + +/** + * Returns the canoncical difficulty of the block + * @method canonicalDifficulty + * @param {Block} parentBlock the parent `Block` of the this header + * @return {BN} + */ +BlockHeader.prototype.canonicalDifficulty = function (parentBlock) { + const blockTs = new BN(this.timestamp) + const parentTs = new BN(parentBlock.header.timestamp) + const parentDif = new BN(parentBlock.header.difficulty) + const minimumDifficulty = new BN(params.minimumDifficulty.v) + var offset = parentDif.div(new BN(params.difficultyBoundDivisor.v)) + var dif + + // Byzantium + // max((2 if len(parent.uncles) else 1) - ((timestamp - parent.timestamp) // 9), -99) + var uncleAddend = parentBlock.header.uncleHash.equals(utils.SHA3_RLP_ARRAY) ? 1 : 2 + var a = blockTs.sub(parentTs).idivn(9).ineg().iaddn(uncleAddend) + var cutoff = new BN(-99) + // MAX(cutoff, a) + if (cutoff.cmp(a) === 1) { + a = cutoff + } + dif = parentDif.add(offset.mul(a)) + + // Byzantium difficulty bomb delay + var num = new BN(this.number).isubn(3000000) + if (num.ltn(0)) { + num = new BN(0) + } + + var exp = num.idivn(100000).isubn(2) + if (!exp.isNeg()) { + dif.iadd(new BN(2).pow(exp)) + } + + if (dif.cmp(minimumDifficulty) === -1) { + dif = minimumDifficulty + } + + return dif +} + +/** + * checks that the block's `difficuly` matches the canonical difficulty + * @method validateDifficulty + * @param {Block} parentBlock this block's parent + * @return {Boolean} + */ +BlockHeader.prototype.validateDifficulty = function (parentBlock) { + const dif = this.canonicalDifficulty(parentBlock) + return dif.cmp(new BN(this.difficulty)) === 0 +} + +/** + * Validates the gasLimit + * @method validateGasLimit + * @param {Block} parentBlock this block's parent + * @returns {Boolean} + */ +BlockHeader.prototype.validateGasLimit = function (parentBlock) { + const pGasLimit = new BN(parentBlock.header.gasLimit) + const gasLimit = new BN(this.gasLimit) + const a = pGasLimit.div(new BN(params.gasLimitBoundDivisor.v)) + const maxGasLimit = pGasLimit.add(a) + const minGasLimit = pGasLimit.sub(a) + + return gasLimit.lt(maxGasLimit) && gasLimit.gt(minGasLimit) && gasLimit.gte(params.minGasLimit.v) +} + +/** + * Validates the entire block header + * @method validate + * @param {Blockchain} blockChain the blockchain that this block is validating against + * @param {Bignum} [height] if this is an uncle header, this is the height of the block that is including it + * @param {Function} cb the callback function. The callback is given an `error` if the block is invalid + */ +BlockHeader.prototype.validate = function (blockchain, height, cb) { + var self = this + if (arguments.length === 2) { + cb = height + height = false + } + + if (this.isGenesis()) { + return cb() + } + + // find the blocks parent + blockchain.getBlock(self.parentHash, function (err, parentBlock) { + if (err) { + return cb('could not find parent block') + } + + self.parentBlock = parentBlock + + var number = new BN(self.number) + if (number.cmp(new BN(parentBlock.header.number).iaddn(1)) !== 0) { + return cb('invalid number') + } + + if (height) { + var dif = height.sub(new BN(parentBlock.header.number)) + if (!(dif.cmpn(8) === -1 && dif.cmpn(1) === 1)) { + return cb('uncle block has a parent that is too old or to young') + } + } + + if (!self.validateDifficulty(parentBlock)) { + return cb('invalid Difficulty') + } + + if (!self.validateGasLimit(parentBlock)) { + return cb('invalid gas limit') + } + + if (utils.bufferToInt(parentBlock.header.number) + 1 !== utils.bufferToInt(self.number)) { + return cb('invalid heigth') + } + + if (utils.bufferToInt(self.timestamp) <= utils.bufferToInt(parentBlock.header.timestamp)) { + return cb('invalid timestamp') + } + + if (self.extraData.length > params.maximumExtraDataSize.v) { + return cb('invalid amount of extra data') + } + + cb() + }) +} + +/** + * Returns the sha3 hash of the blockheader + * @method hash + * @return {Buffer} + */ +BlockHeader.prototype.hash = function () { + return utils.rlphash(this.raw) +} + +/** + * checks if the blockheader is a genesis header + * @method isGenesis + * @return {Boolean} + */ +BlockHeader.prototype.isGenesis = function () { + return this.number.toString('hex') === '' +} + + +}).call(this,require("buffer").Buffer) +},{"buffer":113,"ethereum-common/params.json":584,"ethereumjs-util":612}],587:[function(require,module,exports){ +(function (Buffer){ +const ethUtil = require('ethereumjs-util') +const Tx = require('ethereumjs-tx') +const Trie = require('merkle-patricia-tree') +const BN = ethUtil.BN +const rlp = ethUtil.rlp +const async = require('async') +const BlockHeader = require('./header') +const params = require('ethereum-common/params.json') + +/** + * Creates a new block object + * @constructor the raw serialized or the deserialized block. + * @param {Array|Buffer|Object} data + * @prop {Header} header the block's header + * @prop {Array.
} uncleList an array of uncle headers + * @prop {Array.} raw an array of buffers containing the raw blocks. + */ +var Block = module.exports = function (data) { + this.transactions = [] + this.uncleHeaders = [] + this._inBlockChain = false + this.txTrie = new Trie() + + Object.defineProperty(this, 'raw', { + get: function () { + return this.serialize(false) + } + }) + + var rawTransactions, rawUncleHeaders + + // defaults + if (!data) { + data = [[], [], []] + } + + if (Buffer.isBuffer(data)) { + data = rlp.decode(data) + } + + if (Array.isArray(data)) { + this.header = new BlockHeader(data[0]) + rawTransactions = data[1] + rawUncleHeaders = data[2] + } else { + this.header = new BlockHeader(data.header) + rawTransactions = data.transactions || [] + rawUncleHeaders = data.uncleHeaders || [] + } + + // parse uncle headers + for (var i = 0; i < rawUncleHeaders.length; i++) { + this.uncleHeaders.push(new BlockHeader(rawUncleHeaders[i])) + } + + // parse transactions + for (i = 0; i < rawTransactions.length; i++) { + var tx = new Tx(rawTransactions[i]) + tx._homestead = true + this.transactions.push(tx) + } +} + +Block.Header = BlockHeader + +/** + * Produces a hash the RLP of the block + * @method hash + */ +Block.prototype.hash = function () { + return this.header.hash() +} + +/** + * Determines if a given block is the genesis block + * @method isGenisis + * @return Boolean + */ +Block.prototype.isGenesis = function () { + return this.header.isGenesis() +} + +/** + * turns the block in to the canonical genesis block + * @method setGenesisParams + */ +Block.prototype.setGenesisParams = function () { + this.header.gasLimit = params.genesisGasLimit.v + this.header.difficulty = params.genesisDifficulty.v + this.header.extraData = params.genesisExtraData.v + this.header.nonce = params.genesisNonce.v + this.header.stateRoot = params.genesisStateRoot.v + this.header.number = new Buffer([]) +} + +/** + * Produces a serialization of the block. + * @method serialize + * @param {Boolean} rlpEncode whether to rlp encode the block or not + */ +Block.prototype.serialize = function (rlpEncode) { + var raw = [this.header.raw, [], + [] + ] + + // rlpEnode defaults to true + if (typeof rlpEncode === 'undefined') { + rlpEncode = true + } + + this.transactions.forEach(function (tx) { + raw[1].push(tx.raw) + }) + + this.uncleHeaders.forEach(function (uncle) { + raw[2].push(uncle.raw) + }) + + return rlpEncode ? rlp.encode(raw) : raw +} + +/** + * Generate transaction trie. The tx trie must be generated before the transaction trie can + * be validated with `validateTransactionTrie` + * @method genTxTrie + * @param {Function} cb the callback + */ +Block.prototype.genTxTrie = function (cb) { + var i = 0 + var self = this + + async.eachSeries(this.transactions, function (tx, done) { + self.txTrie.put(rlp.encode(i), tx.serialize(), done) + i++ + }, cb) +} + +/** + * Validates the transaction trie + * @method validateTransactionTrie + * @return {Boolean} + */ +Block.prototype.validateTransactionsTrie = function () { + var txT = this.header.transactionsTrie.toString('hex') + if (this.transactions.length) { + return txT === this.txTrie.root.toString('hex') + } else { + return txT === ethUtil.SHA3_RLP.toString('hex') + } +} + +/** + * Validates the transactions + * @method validateTransactions + * @param {Boolean} [stringError=false] whether to return a string with a dscription of why the validation failed or return a Bloolean + * @return {Boolean} + */ +Block.prototype.validateTransactions = function (stringError) { + var errors = [] + + this.transactions.forEach(function (tx, i) { + var error = tx.validate(true) + if (error) { + errors.push(error + ' at tx ' + i) + } + }) + + if (stringError === undefined || stringError === false) { + return errors.length === 0 + } else { + return arrayToString(errors) + } +} + +/** + * Validates the entire block. Returns a string to the callback if block is invalid + * @method validate + * @param {BlockChain} blockChain the blockchain that this block wants to be part of + * @param {Function} cb the callback which is given a `String` if the block is not valid + */ +Block.prototype.validate = function (blockChain, cb) { + var self = this + var errors = [] + + async.parallel([ + // validate uncles + self.validateUncles.bind(self, blockChain), + // validate block + self.header.validate.bind(self.header, blockChain), + // generate the transaction trie + self.genTxTrie.bind(self) + ], function (err) { + if (err) { + errors.push(err) + } + + if (!self.validateTransactionsTrie()) { + errors.push('invalid transaction true') + } + + var txErrors = self.validateTransactions(true) + if (txErrors !== '') { + errors.push(txErrors) + } + + if (!self.validateUnclesHash()) { + errors.push('invild uncle hash') + } + + cb(arrayToString(errors)) + }) +} + +/** + * Validates the uncle's hash + * @method validateUncleHash + * @return {Boolean} + */ +Block.prototype.validateUnclesHash = function () { + var raw = [] + this.uncleHeaders.forEach(function (uncle) { + raw.push(uncle.raw) + }) + + raw = rlp.encode(raw) + return ethUtil.sha3(raw).toString('hex') === this.header.uncleHash.toString('hex') +} + +/** + * Validates the uncles that are in the block if any. Returns a string to the callback if uncles are invalid + * @method validateUncles + * @param {Blockchain} blockChaina an instance of the Blockchain + * @param {Function} cb the callback + */ +Block.prototype.validateUncles = function (blockChain, cb) { + if (this.isGenesis()) { + return cb() + } + + var self = this + + if (self.uncleHeaders.length > 2) { + return cb('too many uncle headers') + } + + var uncleHashes = self.uncleHeaders.map(function (header) { + return header.hash().toString('hex') + }) + + if (!((new Set(uncleHashes)).size === uncleHashes.length)) { + return cb('dublicate unlces') + } + + async.each(self.uncleHeaders, function (uncle, cb2) { + var height = new BN(self.header.number) + async.parallel([ + uncle.validate.bind(uncle, blockChain, height), + // check to make sure the uncle is not already in the blockchain + function (cb3) { + blockChain.getDetails(uncle.hash(), function (err, blockInfo) { + // TODO: remove uncles from BC + if (blockInfo && blockInfo.isUncle) { + cb3(err || 'uncle already included') + } else { + cb3() + } + }) + } + ], cb2) + }, cb) +} + +/** + * Converts the block toJSON + * @method toJSON + * @param {Bool} labeled whether to create an labeled object or an array + * @return {Object} + */ +Block.prototype.toJSON = function (labeled) { + if (labeled) { + var obj = { + header: this.header.toJSON(true), + transactions: [], + uncleHeaders: [] + } + + this.transactions.forEach(function (tx) { + obj.transactions.push(tx.toJSON(labeled)) + }) + + this.uncleHeaders.forEach(function (uh) { + obj.uncleHeaders.push(uh.toJSON()) + }) + return obj + } else { + return ethUtil.baToJSON(this.raw) + } +} + +function arrayToString (array) { + try { + return array.reduce(function (str, err) { + if (str) { + str += ' ' + } + return str + err + }) + } catch (e) { + return '' + } +} + +}).call(this,require("buffer").Buffer) +},{"./header":586,"async":42,"buffer":113,"ethereum-common/params.json":584,"ethereumjs-tx":610,"ethereumjs-util":612,"merkle-patricia-tree":947}],588:[function(require,module,exports){ +module.exports={ + "name": "goerli", + "chainId": 5, + "networkId": 5, + "comment": "Cross-client PoA test network", + "url": "https://github.com/goerli/testnet", + "genesis": { + "hash": "0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a", + "timestamp": "0x5c51a607", + "gasLimit": 10485760, + "difficulty": 1, + "nonce": "0x0000000000000000", + "extraData": "0x22466c6578692069732061207468696e6722202d204166726900000000000000e0a2bd4258d2768837baa26a28fe71dc079f84c70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x5d6cded585e73c4e322c30c2f782a336316f17dd85a4863b9d838d2d4b8b3008" + }, + "hardforks": [ + { + "name": "chainstart", + "block": 0, + "consensus": "poa", + "finality": null + }, + { + "name": "homestead", + "block": 0, + "consensus": "poa", + "finality": null + }, + { + "name": "dao", + "block": 0, + "consensus": "poa", + "finality": null + }, + { + "name": "tangerineWhistle", + "block": 0, + "consensus": "poa", + "finality": null + }, + { + "name": "spuriousDragon", + "block": 0, + "consensus": "poa", + "finality": null + }, + { + "name": "byzantium", + "block": 0, + "consensus": "poa", + "finality": null + }, + { + "name": "constantinople", + "block": 0, + "consensus": "poa", + "finality": null + }, + { + "name": "petersburg", + "block": 0, + "consensus": "poa", + "finality": null + } + ], + "bootstrapNodes": [ + { + "ip": "51.141.78.53", + "port": 30303, + "id": "011f758e6552d105183b1761c5e2dea0111bc20fd5f6422bc7f91e0fabbec9a6595caf6239b37feb773dddd3f87240d99d859431891e4a642cf2a0a9e6cbb98a", + "location": "", + "comment": "Source: https://github.com/goerli/testnet/blob/master/bootnodes.txt" + }, + { + "ip": "13.93.54.137", + "port": 30303, + "id": "176b9417f511d05b6b2cf3e34b756cf0a7096b3094572a8f6ef4cdcb9d1f9d00683bf0f83347eebdf3b81c3521c2332086d9592802230bf528eaf606a1d9677b", + "location": "", + "comment": "Source: https://github.com/goerli/testnet/blob/master/bootnodes.txt" + }, + { + "ip": "94.237.54.114", + "port": 30313, + "id": "46add44b9f13965f7b9875ac6b85f016f341012d84f975377573800a863526f4da19ae2c620ec73d11591fa9510e992ecc03ad0751f53cc02f7c7ed6d55c7291", + "location": "", + "comment": "Source: https://github.com/goerli/testnet/blob/master/bootnodes.txt" + }, + { + "ip": "52.64.155.147", + "port": 30303, + "id": "c1f8b7c2ac4453271fa07d8e9ecf9a2e8285aa0bd0c07df0131f47153306b0736fd3db8924e7a9bf0bed6b1d8d4f87362a71b033dc7c64547728d953e43e59b2", + "location": "", + "comment": "Source: https://github.com/goerli/testnet/blob/master/bootnodes.txt" + }, + { + "ip": "213.186.16.82", + "port": 30303, + "id": "f4a9c6ee28586009fb5a96c8af13a58ed6d8315a9eee4772212c1d4d9cebe5a8b8a78ea4434f318726317d04a3f531a1ef0420cf9752605a562cfe858c46e263", + "location": "", + "comment": "Source: https://github.com/goerli/testnet/blob/master/bootnodes.txt" + } + ] +} + +},{}],589:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.chains = { + names: { + '1': 'mainnet', + '3': 'ropsten', + '4': 'rinkeby', + '42': 'kovan', + '6284': 'goerli', + }, + mainnet: require('./mainnet.json'), + ropsten: require('./ropsten.json'), + rinkeby: require('./rinkeby.json'), + kovan: require('./kovan.json'), + goerli: require('./goerli.json'), +}; + +},{"./goerli.json":588,"./kovan.json":590,"./mainnet.json":591,"./rinkeby.json":592,"./ropsten.json":593}],590:[function(require,module,exports){ +module.exports={ + "name": "kovan", + "chainId": 42, + "networkId": 42, + "comment": "Parity PoA test network", + "url": "https://kovan-testnet.github.io/website/", + "genesis": { + "hash": "0xa3c565fc15c7478862d50ccd6561e3c06b24cc509bf388941c25ea985ce32cb9", + "timestamp": null, + "gasLimit": 6000000, + "difficulty": 131072, + "nonce": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "extraData": "0x", + "stateRoot": "0x2480155b48a1cea17d67dbfdfaafe821c1d19cdd478c5358e8ec56dec24502b2" + }, + "hardforks": [], + "bootstrapNodes": [ + { + "ip": "40.71.221.215", + "port": 30303, + "id": "56abaf065581a5985b8c5f4f88bd202526482761ba10be9bfdcd14846dd01f652ec33fde0f8c0fd1db19b59a4c04465681fcef50e11380ca88d25996191c52de", + "location": "", + "comment": "Parity Bootnode" + }, + { + "ip": "52.166.117.77", + "port": 30303, + "id": "d07827483dc47b368eaf88454fb04b41b7452cf454e194e2bd4c14f98a3278fed5d819dbecd0d010407fc7688d941ee1e58d4f9c6354d3da3be92f55c17d7ce3", + "location": "", + "comment": "Parity Bootnode" + }, + { + "ip": "52.165.239.18", + "port": 30303, + "id": "8fa162563a8e5a05eef3e1cd5abc5828c71344f7277bb788a395cce4a0e30baf2b34b92fe0b2dbbba2313ee40236bae2aab3c9811941b9f5a7e8e90aaa27ecba", + "location": "", + "comment": "Parity Bootnode" + }, + { + "ip": "52.243.47.56", + "port": 30303, + "id": "7e2e7f00784f516939f94e22bdc6cf96153603ca2b5df1c7cc0f90a38e7a2f218ffb1c05b156835e8b49086d11fdd1b3e2965be16baa55204167aa9bf536a4d9", + "location": "", + "comment": "Parity Bootnode" + }, + { + "ip": "40.68.248.100", + "port": 30303, + "id": "0518a3d35d4a7b3e8c433e7ffd2355d84a1304ceb5ef349787b556197f0c87fad09daed760635b97d52179d645d3e6d16a37d2cc0a9945c2ddf585684beb39ac", + "location": "", + "comment": "Parity Bootnode" + } + ] +} + +},{}],591:[function(require,module,exports){ +module.exports={ + "name": "mainnet", + "chainId": 1, + "networkId": 1, + "comment": "The Ethereum main chain", + "url": "https://ethstats.net/", + "genesis": { + "hash": "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3", + "timestamp": null, + "gasLimit": 5000, + "difficulty": 17179869184, + "nonce": "0x0000000000000042", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "stateRoot": "0xd7f8974fb5ac78d9ac099b9ad5018bedc2ce0a72dad1827a1709da30580f0544" + }, + "hardforks": [ + { + "name": "chainstart", + "block": 0, + "consensus": "pow", + "finality": null + }, + { + "name": "homestead", + "block": 1150000, + "consensus": "pow", + "finality": null + }, + { + "name": "dao", + "block": 1920000, + "consensus": "pow", + "finality": null + }, + { + "name": "tangerineWhistle", + "block": 2463000, + "consensus": "pow", + "finality": null + }, + { + "name": "spuriousDragon", + "block": 2675000, + "consensus": "pow", + "finality": null + }, + { + "name": "byzantium", + "block": 4370000, + "consensus": "pow", + "finality": null + }, + { + "name": "constantinople", + "block": 7280000, + "consensus": "pow", + "finality": null + }, + { + "name": "petersburg", + "block": 7280000, + "consensus": "pow", + "finality": null + } + ], + "bootstrapNodes": [ + { + "ip": "13.93.211.84", + "port": 30303, + "id": "3f1d12044546b76342d59d4a05532c14b85aa669704bfe1f864fe079415aa2c02d743e03218e57a33fb94523adb54032871a6c51b2cc5514cb7c7e35b3ed0a99", + "location": "US-WEST", + "comment": "Go Bootnode" + }, + { + "ip": "191.235.84.50", + "port": 30303, + "id": "78de8a0916848093c73790ead81d1928bec737d565119932b98c6b100d944b7a95e94f847f689fc723399d2e31129d182f7ef3863f2b4c820abbf3ab2722344d", + "location": "BR", + "comment": "Go Bootnode" + }, + { + "ip": "13.75.154.138", + "port": 30303, + "id": "158f8aab45f6d19c6cbf4a089c2670541a8da11978a2f90dbf6a502a4a3bab80d288afdbeb7ec0ef6d92de563767f3b1ea9e8e334ca711e9f8e2df5a0385e8e6", + "location": "AU", + "comment": "Go Bootnode" + }, + { + "ip": "52.74.57.123", + "port": 30303, + "id": "1118980bf48b0a3640bdba04e0fe78b1add18e1cd99bf22d53daac1fd9972ad650df52176e7c7d89d1114cfef2bc23a2959aa54998a46afcf7d91809f0855082", + "location": "SG", + "comment": "Go Bootnode" + } + ] +} + +},{}],592:[function(require,module,exports){ +module.exports={ + "name": "rinkeby", + "chainId": 4, + "networkId": 4, + "comment": "PoA test network", + "url": "https://www.rinkeby.io", + "genesis": { + "hash": "0x6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177", + "timestamp": "0x58ee40ba", + "gasLimit": 4700000, + "difficulty": 1, + "nonce": "0x0000000000000000", + "extraData": "0x52657370656374206d7920617574686f7269746168207e452e436172746d616e42eb768f2244c8811c63729a21a3569731535f067ffc57839b00206d1ad20c69a1981b489f772031b279182d99e65703f0076e4812653aab85fca0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x53580584816f617295ea26c0e17641e0120cab2f0a8ffb53a866fd53aa8e8c2d" + }, + "hardforks": [ + { + "name": "chainstart", + "block": 0, + "consensus": "poa", + "finality": null + }, + { + "name": "homestead", + "block": 1, + "consensus": "poa", + "finality": null + }, + { + "name": "dao", + "block": null, + "consensus": "poa", + "finality": null + }, + { + "name": "tangerineWhistle", + "block": 2, + "consensus": "poa", + "finality": null + }, + { + "name": "spuriousDragon", + "block": 3, + "consensus": "poa", + "finality": null + }, + { + "name": "byzantium", + "block": 1035301, + "consensus": "poa", + "finality": null + }, + { + "name": "constantinople", + "block": null, + "consensus": "poa", + "finality": null + } + ], + "bootstrapNodes": [ + { + "ip": "52.169.42.101", + "port": 30303, + "id": "a24ac7c5484ef4ed0c5eb2d36620ba4e4aa13b8c84684e1b4aab0cebea2ae45cb4d375b77eab56516d34bfbd3c1a833fc51296ff084b770b94fb9028c4d25ccf", + "location": "IE", + "comment": "" + }, + { + "ip": "52.3.158.184", + "port": 30303, + "id": "343149e4feefa15d882d9fe4ac7d88f885bd05ebb735e547f12e12080a9fa07c8014ca6fd7f373123488102fe5e34111f8509cf0b7de3f5b44339c9f25e87cb8", + "location": "", + "comment": "INFURA" + } + ] +} + +},{}],593:[function(require,module,exports){ +module.exports={ + "name": "ropsten", + "chainId": 3, + "networkId": 3, + "comment": "PoW test network", + "url": "https://github.com/ethereum/ropsten", + "genesis": { + "hash": "0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d", + "timestamp": null, + "gasLimit": 16777216, + "difficulty": 1048576, + "nonce": "0x0000000000000042", + "extraData": "0x3535353535353535353535353535353535353535353535353535353535353535", + "stateRoot": "0x217b0bbcfb72e2d57e28f33cb361b9983513177755dc3f33ce3e7022ed62b77b" + }, + "hardforks": [ + { + "name": "chainstart", + "block": 0, + "consensus": "pow", + "finality": null + }, + { + "name": "homestead", + "block": 0, + "consensus": "pow", + "finality": null + }, + { + "name": "dao", + "block": null, + "consensus": "pow", + "finality": null + }, + { + "name": "tangerineWhistle", + "block": 0, + "consensus": "pow", + "finality": null + }, + { + "name": "spuriousDragon", + "block": 10, + "consensus": "pow", + "finality": null + }, + { + "name": "byzantium", + "block": 1700000, + "consensus": "pow", + "finality": null + }, + { + "name": "constantinople", + "block": 4230000, + "consensus": "pow", + "finality": null + }, + { + "name": "petersburg", + "block": 4939394, + "consensus": "pow", + "finality": null + } + ], + "bootstrapNodes": [ + { + "ip": "52.176.7.10", + "port": "30303", + "id": "30b7ab30a01c124a6cceca36863ece12c4f5fa68e3ba9b0b51407ccc002eeed3b3102d20a88f1c1d3c3154e2449317b8ef95090e77b312d5cc39354f86d5d606", + "network": "Ropsten", + "chainId": 3, + "location": "US", + "comment": "US-Azure geth" + }, + { + "ip": "52.176.100.77", + "port": "30303", + "id": "865a63255b3bb68023b6bffd5095118fcc13e79dcf014fe4e47e065c350c7cc72af2e53eff895f11ba1bbb6a2b33271c1116ee870f266618eadfc2e78aa7349c", + "network": "Ropsten", + "chainId": 3, + "location": "US", + "comment": "US-Azure parity" + }, + { + "ip": "52.232.243.152", + "port": "30303", + "id": "6332792c4a00e3e4ee0926ed89e0d27ef985424d97b6a45bf0f23e51f0dcb5e66b875777506458aea7af6f9e4ffb69f43f3778ee73c81ed9d34c51c4b16b0b0f", + "network": "Ropsten", + "chainId": 3, + "location": "US", + "comment": "Parity" + }, + { + "ip": "192.81.208.223", + "port": "30303", + "id": "94c15d1b9e2fe7ce56e458b9a3b672ef11894ddedd0c6f247e0f1d3487f52b66208fb4aeb8179fce6e3a749ea93ed147c37976d67af557508d199d9594c35f09", + "network": "Ropsten", + "chainId": 3, + "location": "US", + "comment": "@gpip" + } + ] +} + +},{}],594:[function(require,module,exports){ +module.exports={ + "0x0000000000000000000000000000000000000000": "0x1", + "0x0000000000000000000000000000000000000001": "0x1", + "0x0000000000000000000000000000000000000002": "0x1", + "0x0000000000000000000000000000000000000003": "0x1", + "0x0000000000000000000000000000000000000004": "0x1", + "0x0000000000000000000000000000000000000005": "0x1", + "0x0000000000000000000000000000000000000006": "0x1", + "0x0000000000000000000000000000000000000007": "0x1", + "0x0000000000000000000000000000000000000008": "0x1", + "0x0000000000000000000000000000000000000009": "0x1", + "0x000000000000000000000000000000000000000a": "0x1", + "0x000000000000000000000000000000000000000b": "0x1", + "0x000000000000000000000000000000000000000c": "0x1", + "0x000000000000000000000000000000000000000d": "0x1", + "0x000000000000000000000000000000000000000e": "0x1", + "0x000000000000000000000000000000000000000f": "0x1", + "0x0000000000000000000000000000000000000010": "0x1", + "0x0000000000000000000000000000000000000011": "0x1", + "0x0000000000000000000000000000000000000012": "0x1", + "0x0000000000000000000000000000000000000013": "0x1", + "0x0000000000000000000000000000000000000014": "0x1", + "0x0000000000000000000000000000000000000015": "0x1", + "0x0000000000000000000000000000000000000016": "0x1", + "0x0000000000000000000000000000000000000017": "0x1", + "0x0000000000000000000000000000000000000018": "0x1", + "0x0000000000000000000000000000000000000019": "0x1", + "0x000000000000000000000000000000000000001a": "0x1", + "0x000000000000000000000000000000000000001b": "0x1", + "0x000000000000000000000000000000000000001c": "0x1", + "0x000000000000000000000000000000000000001d": "0x1", + "0x000000000000000000000000000000000000001e": "0x1", + "0x000000000000000000000000000000000000001f": "0x1", + "0x0000000000000000000000000000000000000020": "0x1", + "0x0000000000000000000000000000000000000021": "0x1", + "0x0000000000000000000000000000000000000022": "0x1", + "0x0000000000000000000000000000000000000023": "0x1", + "0x0000000000000000000000000000000000000024": "0x1", + "0x0000000000000000000000000000000000000025": "0x1", + "0x0000000000000000000000000000000000000026": "0x1", + "0x0000000000000000000000000000000000000027": "0x1", + "0x0000000000000000000000000000000000000028": "0x1", + "0x0000000000000000000000000000000000000029": "0x1", + "0x000000000000000000000000000000000000002a": "0x1", + "0x000000000000000000000000000000000000002b": "0x1", + "0x000000000000000000000000000000000000002c": "0x1", + "0x000000000000000000000000000000000000002d": "0x1", + "0x000000000000000000000000000000000000002e": "0x1", + "0x000000000000000000000000000000000000002f": "0x1", + "0x0000000000000000000000000000000000000030": "0x1", + "0x0000000000000000000000000000000000000031": "0x1", + "0x0000000000000000000000000000000000000032": "0x1", + "0x0000000000000000000000000000000000000033": "0x1", + "0x0000000000000000000000000000000000000034": "0x1", + "0x0000000000000000000000000000000000000035": "0x1", + "0x0000000000000000000000000000000000000036": "0x1", + "0x0000000000000000000000000000000000000037": "0x1", + "0x0000000000000000000000000000000000000038": "0x1", + "0x0000000000000000000000000000000000000039": "0x1", + "0x000000000000000000000000000000000000003a": "0x1", + "0x000000000000000000000000000000000000003b": "0x1", + "0x000000000000000000000000000000000000003c": "0x1", + "0x000000000000000000000000000000000000003d": "0x1", + "0x000000000000000000000000000000000000003e": "0x1", + "0x000000000000000000000000000000000000003f": "0x1", + "0x0000000000000000000000000000000000000040": "0x1", + "0x0000000000000000000000000000000000000041": "0x1", + "0x0000000000000000000000000000000000000042": "0x1", + "0x0000000000000000000000000000000000000043": "0x1", + "0x0000000000000000000000000000000000000044": "0x1", + "0x0000000000000000000000000000000000000045": "0x1", + "0x0000000000000000000000000000000000000046": "0x1", + "0x0000000000000000000000000000000000000047": "0x1", + "0x0000000000000000000000000000000000000048": "0x1", + "0x0000000000000000000000000000000000000049": "0x1", + "0x000000000000000000000000000000000000004a": "0x1", + "0x000000000000000000000000000000000000004b": "0x1", + "0x000000000000000000000000000000000000004c": "0x1", + "0x000000000000000000000000000000000000004d": "0x1", + "0x000000000000000000000000000000000000004e": "0x1", + "0x000000000000000000000000000000000000004f": "0x1", + "0x0000000000000000000000000000000000000050": "0x1", + "0x0000000000000000000000000000000000000051": "0x1", + "0x0000000000000000000000000000000000000052": "0x1", + "0x0000000000000000000000000000000000000053": "0x1", + "0x0000000000000000000000000000000000000054": "0x1", + "0x0000000000000000000000000000000000000055": "0x1", + "0x0000000000000000000000000000000000000056": "0x1", + "0x0000000000000000000000000000000000000057": "0x1", + "0x0000000000000000000000000000000000000058": "0x1", + "0x0000000000000000000000000000000000000059": "0x1", + "0x000000000000000000000000000000000000005a": "0x1", + "0x000000000000000000000000000000000000005b": "0x1", + "0x000000000000000000000000000000000000005c": "0x1", + "0x000000000000000000000000000000000000005d": "0x1", + "0x000000000000000000000000000000000000005e": "0x1", + "0x000000000000000000000000000000000000005f": "0x1", + "0x0000000000000000000000000000000000000060": "0x1", + "0x0000000000000000000000000000000000000061": "0x1", + "0x0000000000000000000000000000000000000062": "0x1", + "0x0000000000000000000000000000000000000063": "0x1", + "0x0000000000000000000000000000000000000064": "0x1", + "0x0000000000000000000000000000000000000065": "0x1", + "0x0000000000000000000000000000000000000066": "0x1", + "0x0000000000000000000000000000000000000067": "0x1", + "0x0000000000000000000000000000000000000068": "0x1", + "0x0000000000000000000000000000000000000069": "0x1", + "0x000000000000000000000000000000000000006a": "0x1", + "0x000000000000000000000000000000000000006b": "0x1", + "0x000000000000000000000000000000000000006c": "0x1", + "0x000000000000000000000000000000000000006d": "0x1", + "0x000000000000000000000000000000000000006e": "0x1", + "0x000000000000000000000000000000000000006f": "0x1", + "0x0000000000000000000000000000000000000070": "0x1", + "0x0000000000000000000000000000000000000071": "0x1", + "0x0000000000000000000000000000000000000072": "0x1", + "0x0000000000000000000000000000000000000073": "0x1", + "0x0000000000000000000000000000000000000074": "0x1", + "0x0000000000000000000000000000000000000075": "0x1", + "0x0000000000000000000000000000000000000076": "0x1", + "0x0000000000000000000000000000000000000077": "0x1", + "0x0000000000000000000000000000000000000078": "0x1", + "0x0000000000000000000000000000000000000079": "0x1", + "0x000000000000000000000000000000000000007a": "0x1", + "0x000000000000000000000000000000000000007b": "0x1", + "0x000000000000000000000000000000000000007c": "0x1", + "0x000000000000000000000000000000000000007d": "0x1", + "0x000000000000000000000000000000000000007e": "0x1", + "0x000000000000000000000000000000000000007f": "0x1", + "0x0000000000000000000000000000000000000080": "0x1", + "0x0000000000000000000000000000000000000081": "0x1", + "0x0000000000000000000000000000000000000082": "0x1", + "0x0000000000000000000000000000000000000083": "0x1", + "0x0000000000000000000000000000000000000084": "0x1", + "0x0000000000000000000000000000000000000085": "0x1", + "0x0000000000000000000000000000000000000086": "0x1", + "0x0000000000000000000000000000000000000087": "0x1", + "0x0000000000000000000000000000000000000088": "0x1", + "0x0000000000000000000000000000000000000089": "0x1", + "0x000000000000000000000000000000000000008a": "0x1", + "0x000000000000000000000000000000000000008b": "0x1", + "0x000000000000000000000000000000000000008c": "0x1", + "0x000000000000000000000000000000000000008d": "0x1", + "0x000000000000000000000000000000000000008e": "0x1", + "0x000000000000000000000000000000000000008f": "0x1", + "0x0000000000000000000000000000000000000090": "0x1", + "0x0000000000000000000000000000000000000091": "0x1", + "0x0000000000000000000000000000000000000092": "0x1", + "0x0000000000000000000000000000000000000093": "0x1", + "0x0000000000000000000000000000000000000094": "0x1", + "0x0000000000000000000000000000000000000095": "0x1", + "0x0000000000000000000000000000000000000096": "0x1", + "0x0000000000000000000000000000000000000097": "0x1", + "0x0000000000000000000000000000000000000098": "0x1", + "0x0000000000000000000000000000000000000099": "0x1", + "0x000000000000000000000000000000000000009a": "0x1", + "0x000000000000000000000000000000000000009b": "0x1", + "0x000000000000000000000000000000000000009c": "0x1", + "0x000000000000000000000000000000000000009d": "0x1", + "0x000000000000000000000000000000000000009e": "0x1", + "0x000000000000000000000000000000000000009f": "0x1", + "0x00000000000000000000000000000000000000a0": "0x1", + "0x00000000000000000000000000000000000000a1": "0x1", + "0x00000000000000000000000000000000000000a2": "0x1", + "0x00000000000000000000000000000000000000a3": "0x1", + "0x00000000000000000000000000000000000000a4": "0x1", + "0x00000000000000000000000000000000000000a5": "0x1", + "0x00000000000000000000000000000000000000a6": "0x1", + "0x00000000000000000000000000000000000000a7": "0x1", + "0x00000000000000000000000000000000000000a8": "0x1", + "0x00000000000000000000000000000000000000a9": "0x1", + "0x00000000000000000000000000000000000000aa": "0x1", + "0x00000000000000000000000000000000000000ab": "0x1", + "0x00000000000000000000000000000000000000ac": "0x1", + "0x00000000000000000000000000000000000000ad": "0x1", + "0x00000000000000000000000000000000000000ae": "0x1", + "0x00000000000000000000000000000000000000af": "0x1", + "0x00000000000000000000000000000000000000b0": "0x1", + "0x00000000000000000000000000000000000000b1": "0x1", + "0x00000000000000000000000000000000000000b2": "0x1", + "0x00000000000000000000000000000000000000b3": "0x1", + "0x00000000000000000000000000000000000000b4": "0x1", + "0x00000000000000000000000000000000000000b5": "0x1", + "0x00000000000000000000000000000000000000b6": "0x1", + "0x00000000000000000000000000000000000000b7": "0x1", + "0x00000000000000000000000000000000000000b8": "0x1", + "0x00000000000000000000000000000000000000b9": "0x1", + "0x00000000000000000000000000000000000000ba": "0x1", + "0x00000000000000000000000000000000000000bb": "0x1", + "0x00000000000000000000000000000000000000bc": "0x1", + "0x00000000000000000000000000000000000000bd": "0x1", + "0x00000000000000000000000000000000000000be": "0x1", + "0x00000000000000000000000000000000000000bf": "0x1", + "0x00000000000000000000000000000000000000c0": "0x1", + "0x00000000000000000000000000000000000000c1": "0x1", + "0x00000000000000000000000000000000000000c2": "0x1", + "0x00000000000000000000000000000000000000c3": "0x1", + "0x00000000000000000000000000000000000000c4": "0x1", + "0x00000000000000000000000000000000000000c5": "0x1", + "0x00000000000000000000000000000000000000c6": "0x1", + "0x00000000000000000000000000000000000000c7": "0x1", + "0x00000000000000000000000000000000000000c8": "0x1", + "0x00000000000000000000000000000000000000c9": "0x1", + "0x00000000000000000000000000000000000000ca": "0x1", + "0x00000000000000000000000000000000000000cb": "0x1", + "0x00000000000000000000000000000000000000cc": "0x1", + "0x00000000000000000000000000000000000000cd": "0x1", + "0x00000000000000000000000000000000000000ce": "0x1", + "0x00000000000000000000000000000000000000cf": "0x1", + "0x00000000000000000000000000000000000000d0": "0x1", + "0x00000000000000000000000000000000000000d1": "0x1", + "0x00000000000000000000000000000000000000d2": "0x1", + "0x00000000000000000000000000000000000000d3": "0x1", + "0x00000000000000000000000000000000000000d4": "0x1", + "0x00000000000000000000000000000000000000d5": "0x1", + "0x00000000000000000000000000000000000000d6": "0x1", + "0x00000000000000000000000000000000000000d7": "0x1", + "0x00000000000000000000000000000000000000d8": "0x1", + "0x00000000000000000000000000000000000000d9": "0x1", + "0x00000000000000000000000000000000000000da": "0x1", + "0x00000000000000000000000000000000000000db": "0x1", + "0x00000000000000000000000000000000000000dc": "0x1", + "0x00000000000000000000000000000000000000dd": "0x1", + "0x00000000000000000000000000000000000000de": "0x1", + "0x00000000000000000000000000000000000000df": "0x1", + "0x00000000000000000000000000000000000000e0": "0x1", + "0x00000000000000000000000000000000000000e1": "0x1", + "0x00000000000000000000000000000000000000e2": "0x1", + "0x00000000000000000000000000000000000000e3": "0x1", + "0x00000000000000000000000000000000000000e4": "0x1", + "0x00000000000000000000000000000000000000e5": "0x1", + "0x00000000000000000000000000000000000000e6": "0x1", + "0x00000000000000000000000000000000000000e7": "0x1", + "0x00000000000000000000000000000000000000e8": "0x1", + "0x00000000000000000000000000000000000000e9": "0x1", + "0x00000000000000000000000000000000000000ea": "0x1", + "0x00000000000000000000000000000000000000eb": "0x1", + "0x00000000000000000000000000000000000000ec": "0x1", + "0x00000000000000000000000000000000000000ed": "0x1", + "0x00000000000000000000000000000000000000ee": "0x1", + "0x00000000000000000000000000000000000000ef": "0x1", + "0x00000000000000000000000000000000000000f0": "0x1", + "0x00000000000000000000000000000000000000f1": "0x1", + "0x00000000000000000000000000000000000000f2": "0x1", + "0x00000000000000000000000000000000000000f3": "0x1", + "0x00000000000000000000000000000000000000f4": "0x1", + "0x00000000000000000000000000000000000000f5": "0x1", + "0x00000000000000000000000000000000000000f6": "0x1", + "0x00000000000000000000000000000000000000f7": "0x1", + "0x00000000000000000000000000000000000000f8": "0x1", + "0x00000000000000000000000000000000000000f9": "0x1", + "0x00000000000000000000000000000000000000fa": "0x1", + "0x00000000000000000000000000000000000000fb": "0x1", + "0x00000000000000000000000000000000000000fc": "0x1", + "0x00000000000000000000000000000000000000fd": "0x1", + "0x00000000000000000000000000000000000000fe": "0x1", + "0x00000000000000000000000000000000000000ff": "0x1", + "0x4c2ae482593505f0163cdefc073e81c63cda4107": "0x152d02c7e14af6800000", + "0xa8e8f14732658e4b51e8711931053a8a69baf2b1": "0x152d02c7e14af6800000", + "0xd9a5179f091d85051d3c982785efd1455cec8699": "0x84595161401484a000000", + "0xe0a2bd4258d2768837baa26a28fe71dc079f84c7": "0x4a47e3c12448f4ad000000" +} + +},{}],595:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var genesisStates = { + names: { + '1': 'mainnet', + '3': 'ropsten', + '4': 'rinkeby', + '42': 'kovan', + '6284': 'goerli', + }, + mainnet: require('./mainnet.json'), + ropsten: require('./ropsten.json'), + rinkeby: require('./rinkeby.json'), + kovan: require('./kovan.json'), + goerli: require('./goerli.json'), +}; +/** + * Returns the genesis state by network ID + * @param id ID of the network (e.g. 1) + * @returns Dictionary with genesis accounts + */ +function genesisStateById(id) { + return genesisStates[genesisStates['names'][id]]; +} +exports.genesisStateById = genesisStateById; +/** + * Returns the genesis state by network name + * @param name Name of the network (e.g. 'mainnet') + * @returns Dictionary with genesis accounts + */ +function genesisStateByName(name) { + return genesisStates[name]; +} +exports.genesisStateByName = genesisStateByName; + +},{"./goerli.json":594,"./kovan.json":596,"./mainnet.json":597,"./rinkeby.json":598,"./ropsten.json":599}],596:[function(require,module,exports){ +module.exports={} + +},{}],597:[function(require,module,exports){ +module.exports={ + "0x3282791d6fd713f1e94f4bfd565eaa78b3a0599d": "1337000000000000000000", + "0x17961d633bcf20a7b029a7d94b7df4da2ec5427f": "229427000000000000000", + "0x493a67fe23decc63b10dda75f3287695a81bd5ab": "880000000000000000000", + "0x01fb8ec12425a04f813e46c54c05748ca6b29aa9": "259800000000000000000", + "0xd2a030ac8952325f9e1db378a71485a24e1b07b2": "2000000000000000000000", + "0x77a34907f305a54c85db09c363fde3c47e6ae21f": "985000000000000000000", + "0x391a77405c09a72b5e8436237aaaf95d68da1709": "49082000000000000000", + "0x00aada25ea2286709abb422d41923fd380cd04c7": "650100000000000000000", + "0xacc46a2a555c74ded4a2bd094e821b97843b40c0": "1940000000000000000000", + "0xde07fb5b7a464e3ba7fbe09e9acb271af5338c58": "50000000000000000000", + "0x4c696be99f3a690440c3436a59a7d7e937d6ba0d": "3460000000000000000000", + "0xfa33553285a973719a0d5f956ff861b2d89ed304": "20000000000000000000", + "0x67cfda6e70bf7657d39059b59790e5145afdbe61": "646000000000000000000", + "0xa321091d3018064279db399d2b2a88a6f440ae24": "3200000000000000000000", + "0xfb3fa1ac08aba9cc3bf0fe9d483820688f65b410": "30000000000000000000000", + "0x6715c14035fb57bb3d667f7b707498c41074b855": "700000000000000000000", + "0xd4344f7d5cad65d17e5c2d0e7323943d6f62fe92": "267400000000000000000", + "0xa3294626ec2984c43b43da4d5d8e4669b11d4b59": "1008000000000000000000", + "0x656018584130db83ab0591a8128d9381666a8d0e": "63960000000000000000", + "0x0fa010ce0c731d3b628e36b91f571300e49dbeab": "999800000000000000000", + "0x3098b65db93ecacaf7353c48808390a223d57684": "449965000000000000000", + "0xae635bf73831119d2d29c0d04ff8f8d8d0a57a46": "1337000000000000000000", + "0x0f7515ff0e808f695e0c20485ff96ed2f7b79310": "1000169000000000000000", + "0x8b30c04098d7a7e6420c357ea7bfa49bac9a8a18": "8000200000000000000000", + "0x64dba2d6615b8bd7571836dc75bc79d314f5ecee": "10000000000000000000000", + "0xe7912d4cf4562c573ddc5b71e37310e378ef86c9": "394000000000000000000", + "0xa4da34450d22ec0ffcede0004b02f7872ee0b73a": "93342000000000000000", + "0x34437d1465640b136cb5841c3f934f9ba0b7097d": "173000000000000000000", + "0xc652871d192422c6bc235fa063b44a7e1d43e385": "155000000000000000000", + "0xa8a708e84f82db86a35502193b4c6ee9a76ebe8f": "1015200000000000000000", + "0x5c3f567faff7bad1b5120022e8cbcaa82b4917b3": "2000000000000000000000", + "0xdbc1d0ee2bab531140de137722cd36bdb4e47194": "200000000000000000000", + "0xf59dab1bf8df11327e61f9b7a14b563a96ec3554": "6000000000000000000000", + "0x456f8d746682b224679349064d1b368c7c05b176": "3700000000000000000000", + "0x5f13154631466dcb1353c890932a7c97e0878e90": "6000000000000000000000", + "0xf4b1626e24f30bcad9273c527fcc714b5d007b8f": "200000000000000000000", + "0xa8db0b9b201453333c757f6ad9bcb555c02da93b": "2199970000000000000000", + "0xa0fc7e53c5ebd27a2abdac45261f84ab3b51aefb": "3008250000000000000000", + "0x1b636b7a496f044d7359596e353a104616436f6b": "360354000000000000000", + "0x74bce9ec38362d6c94ccac26d5c0e13a8b3b1d40": "999954000000000000000", + "0x9834682180b982d166badb9d9d1d9bbf016d87ee": "2000000000000000000000", + "0x1e6e0153fc161bc05e656bbb144c7187bf4fe84d": "2000000000000000000000", + "0x989c0ccff654da03aeb11af701054561d6297e1d": "4000000000000000000000", + "0x78a1e254409fb1b55a7cb4dd8eba3b30c8bad9ef": "100000000000000000000", + "0x9ef1896b007c32a15114fb89d73dbd47f9122b69": "4000000000000000000000", + "0x33320dd90f2baa110dd334872a998f148426453c": "999972000000000000000", + "0xe72e1d335cc29a96b9b1c02f003a16d971e90b9d": "1580000000000000000000", + "0x0921605f99164e3bcc28f31caece78973182561d": "793744000000000000000", + "0xfc00a420a36107dfd5f495128a5fe5abb2db0f34": "5960000000000000000000", + "0xdfcbdf09454e1a5e4a40d3eef7c5cf1cd3de9486": "4000000000000000000000", + "0x646e043d0597a664948fbb0dc15475a3a4f3a6ed": "20000000000000000000", + "0x79aeb34566b974c35a5881dec020927da7df5d25": "2000000000000000000000", + "0xdbadc61ed5f0460a7f18e51b2fb2614d9264a0e0": "40000000000000000000", + "0x97b91efe7350c2d57e7e406bab18f3617bcde14a": "9999980000000000000000", + "0x8398e07ebcb4f75ff2116de77c1c2a99f303a4cf": "500000000000000000000", + "0xf02796295101674288c1d93467053d042219b794": "740000000000000000000", + "0xf4ed848ec961739c2c7e352f435ba70a7cd5db38": "1970000000000000000000", + "0x82485728d0e281563758c75ab27ed9e882a0002d": "147000000000000000000", + "0x427ec668ac9404e895cc861511d1620a4912be98": "40000000000000000000000", + "0x1bbc199e586790be87afedc849c04726745c5d7b": "4000000000000000000000", + "0x10d945334ecde47beb9ca3816c173dfbbd0b5333": "1400000000000000000000", + "0x1dcebcb7656df5dcaa3368a055d22f9ed6cdd940": "499800000000000000000", + "0x2ac1f8d7bf721f3cfe74d20fea9b87a28aaa982c": "161000000000000000000", + "0x0a47ad9059a249fc936b2662353da6905f75c2b9": "2000000000000000000000", + "0x768498934e37e905f1d0e77b44b574bcf3ec4ae8": "20000000000000000000000", + "0xf46b6b9c7cb552829c1d3dfd8ffb11aabae782f6": "21000000000000000000", + "0x7aea25d42b2612286e99c53697c6bc4100e2dbbf": "2000000000000000000000", + "0xaf3615c789d0b1152ad4db25fe5dcf222804cf62": "1000000000000000000000", + "0x92e6581e1da1f9b846e09347333dc818e2d2ac66": "3640000000000000000000", + "0x240305727313d01e73542c775ff59d11cd35f819": "5931229000000000000000", + "0xb95cfda8465ba9c2661b249fc3ab661bdfa35ff0": "318949000000000000000", + "0x1b0d076817e8d68ee2df4e1da1c1142d198c4435": "1550000000000000000000", + "0x93c2e64e5de5589ed25006e843196ee9b1cf0b3e": "1670000000000000000000", + "0x0e2e504a2d1122b5a9feee5cb1451bf4c2ace87b": "3940000000000000000000", + "0x22b96ab2cad55db100b53001f9e4db378104c807": "10000000000000000000000", + "0xa927d48bb6cb814bc609cbcaa9151f5d459a27e1": "271600000000000000000", + "0x5cbd8daf27ddf704cdd0d909a789ba36ed4f37b2": "13400000000000000000", + "0x9adbd3bc7b0afc05d1d2eda49ff863939c48db46": "199955000000000000000", + "0xac7e03702723cb16ee27e22dd0b815dc2d5cae9f": "16000000000000000000000", + "0x1e210e7047886daa52aaf70f4b991dac68e3025e": "200000000000000000000", + "0xc98048687f2bfcc9bd90ed18736c57edd352b65d": "1000000000000000000000", + "0x81c18c2a238ddc4cba230a072dd7dc101e620273": "1337000000000000000000", + "0xcb3d766c983f192bcecac70f4ee03dd9ff714d51": "100000000000000000000", + "0x44a63d18424587b9b307bfc3c364ae10cd04c713": "20000000000000000000", + "0x4ab2d34f04834fbf7479649cab923d2c4725c553": "3520000000000000000000", + "0xb834acf3015322c58382eeb2b79638906e88b6de": "24000000000000000000000", + "0x7d551397f79a2988b064afd0efebee802c7721bc": "39400000000000000000000", + "0xb537d36a70eeb8d3e5c80de815225c1158cb92c4": "1500000000000000000000", + "0x805ce51297a0793b812067f017b3e7b2df9bb1f9": "100000000000000000000", + "0x085ba65febe23eefc2c802666ab1262382cfc494": "400000000000000000000", + "0xb1c0d08b36e184f9952a4037e3e53a667d070a4e": "1000000000000000000000", + "0x83fe5a1b328bae440711beaf6aad6026eda6d220": "20000000000000000000000", + "0x7fd679e5fb0da2a5d116194dcb508318edc580f3": "6560000000000000000000", + "0x41ad369f758fef38a19aa3149379832c818ef2a0": "1000060000000000000000", + "0x6d846dc12657e91af25008519c3e857f51707dd6": "4590000000000000000000", + "0xc02d6eadeacf1b78b3ca85035c637bb1ce01f490": "4000000000000000000000", + "0x826eb7cd7319b82dd07a1f3b409071d96e39677f": "1000000000000000000000", + "0x4ac9905a4cb6ab1cfd62546ee5917300b87c4fde": "1015200000000000000000", + "0xcf6e52e6b77480b1867efec6446d9fc3cc3577e8": "222010000000000000000", + "0x2476b2bb751ce748e1a4c4ff7b230be0c15d2245": "4000000000000000000000", + "0x1a505e62a74e87e577473e4f3afa16bedd3cfa52": "500000000000000000000", + "0x21d02705f3f64905d80ed9147913ea8c7307d695": "1363740000000000000000", + "0x7b1daf14891b8a1e1bd429d8b36b9a4aa1d9afbf": "500000000000000000000", + "0x5338ef70eac9dd9af5a0503b5efad1039e67e725": "2674000000000000000000", + "0x50ca86b5eb1d01874df8e5f34945d49c6c1ab848": "1000000000000000000000", + "0xf3cc8bcb559465f81bfe583bd7ab0a2306453b9e": "20000000000000000000000", + "0x5c323457e187761a8276e359b7b7af3f3b6e3df6": "10000000000000000000000", + "0x4d82d7700c123bb919419bbaf046799c6b0e2c66": "20000000000000000000000", + "0x8a66abbc2d30ce21a833b0db8e561d5105e0a72c": "699958000000000000000", + "0x2ae53866fc2d14d572ab73b4a065a1188267f527": "8000000000000000000000", + "0x9af5c9894c33e42c2c518e3ac670ea9505d1b53e": "18200000000000000000", + "0xcba25c7a503cc8e0d04971ca05c762f9b762b48b": "500000000000000000000", + "0xfda3042819af3e662900e1b92b4358eda6e92590": "118200000000000000000000", + "0x9bd7c38a4210304a4d653edeff1b3ce45fce7843": "282000000000000000000", + "0xedc22fb92c638e1e21ff5cf039daa6e734dafb29": "298000000000000000000", + "0xa1f193a0592f1feb9fdfc90aa813784eb80471c9": "1400000000000000000000", + "0xe97fde0b67716325cf0ecce8a191a3761b2c791d": "1004700000000000000000", + "0x110237cf9117e767922fc4a1b78d7964da82df20": "3940000000000000000000", + "0xe32f95766d57b5cd4b173289d6876f9e64558194": "100000000000000000000", + "0xf2d59c8923759073d6f415aaf8eb065ff2f3b685": "7880000000000000000000", + "0xc53d79f7cb9b70952fd30fce58d54b9f0b59f647": "5089200000000000000000", + "0x9eb281c32719c40fdb3e216db0f37fbc73a026b7": "20000000000000000000", + "0x2d6511fd7a3800b26854c7ec39c0dcb5f4c4e8e8": "399910000000000000000", + "0x61ba87c77e9b596de7ba0e326fddfeec2163ef66": "200000000000000000000", + "0xde1121829c9a08284087a43fbd2fc1142a3233b4": "1000000000000000000000", + "0x22a25812ab56dcc423175ed1d8adacce33cd1810": "1850000000000000000000", + "0x518cef27b10582b6d14f69483ddaa0dd3c87bb5c": "600000000000000000000", + "0x59161749fedcf1c721f2202d13ade2abcf460b3d": "2000000000000000000000", + "0x3e36c17253c11cf38974ed0db1b759160da63783": "7000000000000000000000", + "0xcbfa76db04ce38fb205d37b8d377cf1380da0317": "1430000000000000000000", + "0xa7e83772bc200f9006aa2a260dbaa8483dc52b30": "207730000000000000000", + "0xe87eac6d602b4109c9671bf57b950c2cfdb99d55": "49932000000000000000", + "0x9b06ad841dffbe4ccf46f1039fc386f3c321446e": "2000000000000000000000", + "0xe0f903c1e48ac421ab48528f3d4a2648080fe043": "1015200000000000000000", + "0x5d872b122e994ef27c71d7deb457bf65429eca6c": "7999973000000000000000", + "0xf34083ecea385017aa40bdd35ef7effb4ce7762d": "400000000000000000000", + "0x7f3709391f3fbeba3592d175c740e87a09541d02": "480000000000000000000", + "0x888e94917083d152202b53163939869d271175b4": "4000000000000000000000", + "0xbed4c8f006a27c1e5f7ce205de75f516bfb9f764": "16000000000000000000000", + "0xb3a6bd41f9d9c3201e050b87198fbda399342210": "3622615000000000000000", + "0x550aadae1221b07afea39fba2ed62e05e5b7b5f9": "20000000000000000000", + "0xbcedc4267ccb89b31bb764d7211171008d94d44d": "200000000000000000000", + "0x6229dcc203b1edccfdf06e87910c452a1f4d7a72": "32500000000000000000000", + "0x94be3ae54f62d663b0d4cc9e1ea8fe9556ea9ebf": "23280000000000000000", + "0x0e0c9d005ea016c295cd795cc9213e87febc33eb": "198000000000000000000", + "0x55d057bcc04bd0f4af9642513aa5090bb3ff93fe": "1106680000000000000000", + "0xed9e030ca75cb1d29ea01d0d4cdfdccd3844b6e4": "30895000000000000000", + "0x86c4ce06d9ac185bb148d96f7b7abe73f441006d": "10000000000000000000000", + "0x2c04115c3e52961b0dc0b0bf31fba4546f5966fd": "200000000000000000000", + "0xb959dce02e91d9db02b1bd8b7d17a9c41a97af09": "8000000000000000000000", + "0xe01547ba42fcafaf93938becf7699f74290af74f": "2000000000000000000000", + "0xc593d6e37d14b566643ac4135f243caa0787c182": "12000000000000000000000", + "0x2c0ee134d8b36145b47beee7af8d2738dbda08e8": "201000000000000000000", + "0x0ef54ac7264d2254abbb5f8b41adde875157db7c": "40000000000000000000", + "0x0349634dc2a9e80c3f7721ee2b5046aeaaedfbb5": "4000000000000000000000", + "0x873e49135c3391991060290aa7f6ccb8f85a78db": "20000000000000000000", + "0x05236d4c90d065f9e3938358aaffd777b86aec49": "500000000000000000000", + "0xd2abd84a181093e5e229136f42d835e8235de109": "100007000000000000000", + "0xb56a780028039c81caf37b6775c620e786954764": "2000000000000000000000", + "0x86df73bd377f2c09de63c45d67f283eaefa0f4ab": "1000000000000000000000", + "0x7670b02f2c3cf8fd4f4730f3381a71ea431c33c7": "267400000000000000000", + "0x24aa1151bb765fa3a89ca50eb6e1b1c706417fd4": "3100000000000000000000", + "0x43227d65334e691cf231b4a4e1d339b95d598afb": "10000000000000000000000", + "0x695550656cbf90b75d92ad9122d90d23ca68ca4d": "1000000000000000000000", + "0x5281733473e00d87f11e9955e589b59f4ac28e7a": "660360000000000000000000", + "0x99a96bf2242ea1b39ece6fcc0d18aed00c0179f3": "300000000000000000000", + "0xb1cf94f8091505055f010ab4bac696e0ca0f67a1": "1580000000000000000000", + "0x54391b4d176d476cea164e5fb535c69700cb2535": "100076000000000000000", + "0x152f2bd229ddf3cb0fdaf455c183209c0e1e39a2": "2000000000000000000000", + "0xaffc99d5ebb4a84fe7788d97dce274b038240438": "5000000000000000000000", + "0x23df8f48ee009256ea797e1fa369beebcf6bc663": "2302671000000000000000", + "0x3a72d635aadeee4382349db98a1813a4cfeb3df1": "200000000000000000000000", + "0xce26f9a5305f8381094354dbfc92664e84f902b5": "230200000000000000000", + "0xd283b8edb10a25528a4404de1c65e7410dbcaa67": "12000000000000000000000", + "0xa7859fc07f756ea7dcebbccd42f05817582d973f": "10000000000000000000000", + "0xb28181a458a440f1c6bb1de8400281a3148f4c35": "376000000000000000000", + "0x27b1694eafa165ebd7cc7bc99e74814a951419dc": "800000000000000000000", + "0x66cc8ab23c00d1b82acd7d73f38c99e0d05a4fa6": "100000000000000000000", + "0x926082cb7eed4b1993ad245a477267e1c33cd568": "374300000000000000000", + "0x4a47fc3e177f567a1e3893e000e36bba23520ab8": "2000000000000000000000", + "0x594a76f06935388dde5e234696a0668bc20d2ddc": "2800000000000000000000", + "0xe91fa0badaddb9a97e88d3f4db7c55d6bb7430fe": "376000000000000000000", + "0x574de1b3f38d915846ae3718564a5ada20c2f3ed": "4000000000000000000000", + "0x5816c2687777b6d7d2a2432d59a41fa059e3a406": "133700000000000000000000", + "0xb50955aa6e341571986608bdc891c2139f540cdf": "1970000000000000000000", + "0x6d44974a31d187eda16ddd47b9c7ec5002d61fbe": "940000000000000000000", + "0x80abec5aa36e5c9d098f1b942881bd5acac6963d": "2000000000000000000000", + "0x294f494b3f2e143c2ffc9738cbfd9501850b874e": "2240000000000000000000", + "0xbca3ffd4683fba0ad3bbc90734b611da9cfb457e": "200000000000000000000", + "0x5992624c54cdec60a5ae938033af8be0c50cbb0a": "3621678000000000000000", + "0x6560941328ff587cbc56c38c78238a7bb5f442f6": "744900000000000000000", + "0x74b7e0228baed65957aebb4d916d333aae164f0e": "2000000000000000000000", + "0x8516fcaf77c893970fcd1a958ba9a00e49044019": "196279000000000000000", + "0xb992a967308c02b98af91ee760fd3b6b4824ab0e": "2000000000000000000000", + "0x30bb4357cd6910c86d2238bf727cbe8156680e62": "100014000000000000000", + "0xb8cc0f060aad92d4eb8b36b3b95ce9e90eb383d7": "150000000000000000000000", + "0x28d4ebf41e3d3c451e943bdd7e1f175fae932a3d": "6000000000000000000000", + "0x8c83d424a3cf24d51f01923dd54a18d6b6fede7b": "4000000000000000000000", + "0x7efc90766a00bc52372cac97fabd8a3c831f8ecd": "158000000000000000000", + "0x7c2b9603884a4f2e464eceb97d17938d828bc02c": "3000000000000000000000", + "0x9d250ae4f110d71cafc7b0adb52e8d9acb6679b8": "9840000000000000000000", + "0x61b3df2e9e9fd968131f1e88f0a0eb5bd765464d": "4000000000000000000000", + "0x9ae13bd882f2576575921a94974cbea861ba0d35": "3160000000000000000000", + "0x3d09688d93ad07f3abe68c722723cd680990435e": "29999948000000000000000", + "0x5e58e255fc19870a04305ff2a04631f2ff294bb1": "17600000000000000000", + "0xbcaed0acb6a76f113f7c613555a2c3b0f5bf34a5": "193600000000000000000", + "0x159adce27aa10b47236429a34a5ac42cad5b6416": "31867951000000000000000", + "0xe834c64318205ca7dd4a21abcb08266cb21ff02c": "999999000000000000000", + "0x7b6a84718dd86e63338429ac811d7c8a860f21f1": "1790000000000000000000", + "0x2118c116ab0cdf6fd11d54a4309307b477c3fc0f": "10000000000000000000000", + "0x34a901a69f036bcf9f7843c0ba01b426e8c3dc2b": "4000000000000000000000", + "0xc7d44fe32c7f8cd5f1a97427b6cd3afc9e45023e": "1580000000000000000000", + "0xc6045b3c350b4ce9ca0c6b754fb41a69b97e9900": "925000000000000000000", + "0xcf5a6f9df75579c644f794711215b30d77a0ce40": "2000000000000000000000", + "0xe2904b1aefa056398b6234cb35811288d736db67": "40000000000000000000", + "0x7101bd799e411cde14bdfac25b067ac890eab8e8": "1450054000000000000000", + "0xcc45fb3a555bad807b388a0357c855205f7c75e8": "865000000000000000000", + "0xff0c3c7798e8733dd2668152891bab80a8be955c": "80220000000000000000", + "0x3536453322c1466cb905af5c335ca8db74bff1e6": "447000000000000000000", + "0x08cac8952641d8fc526ec1ab4f2df826a5e7710f": "300000000000000000000", + "0x0d8aab8f74ea862cdf766805009d3f3e42d8d00b": "5820000000000000000000", + "0x8908760cd39b9c1e8184e6a752ee888e3f0b7045": "6000000000000000000000", + "0x8156360bbd370961ceca6b6691d75006ad204cf2": "40000000000000000000000", + "0xa304588f0d850cd8d38f76e9e83c1bf63e333ede": "39800000000000000000", + "0x14c63ba2dcb1dd4df33ddab11c4f0007fa96a62d": "15500000000000000000000", + "0xa009bf076f1ba3fa57d2a7217218bed5565a7a7a": "1000000000000000000000", + "0x1c89060f987c518fa079ec2c0a5ebfa30f5d20f7": "38000000000000000000000", + "0x8895eb726226edc3f78cc6a515077b3296fdb95e": "3940000000000000000000", + "0x7919e7627f9b7d54ea3b14bb4dd4649f4f39dee0": "1670000000000000000000", + "0xb3c65b845aba6cd816fbaae983e0e46c82aa8622": "1000000000000000000000", + "0xeff51d72adfae143edf3a42b1aec55a2ccdd0b90": "300000000000000000000", + "0x05bb64a916be66f460f5e3b64332110d209e19ae": "4200000000000000000000", + "0xd5b117ec116eb846418961eb7edb629cd0dd697f": "3000000000000000000000", + "0x05e97b09492cd68f63b12b892ed1d11d152c0eca": "1015200000000000000000", + "0x84cc7878da605fdb019fab9b4ccfc157709cdda5": "1336922000000000000000", + "0x79cac6494f11ef2798748cb53285bd8e22f97cda": "2000000000000000000000", + "0xbd5a8c94bd8be6470644f70c8f8a33a8a55c6341": "200000000000000000000", + "0xb119e79aa9b916526581cbf521ef474ae84dcff4": "1470700000000000000000", + "0xaff1045adf27a1aa329461b24de1bae9948a698b": "33400000000000000000", + "0x4398628ea6632d393e929cbd928464c568aa4a0c": "1400000000000000000000", + "0x99997668f7c1a4ff9e31f9977ae3224bcb887a85": "291200000000000000000", + "0xbc0e8745c3a549445c2be900f52300804ab56289": "33104697000000000000000", + "0xe5bab4f0afd8a9d1a381b45761aa18f3d3cce105": "1508010000000000000000", + "0xbe60037e90714a4b917e61f193d834906703b13a": "1700000000000000000000", + "0x8ed4284c0f47449c15b8d9b3245de8beb6ce80bf": "800000000000000000000", + "0x333ad1596401e05aea2d36ca47318ef4cd2cb3df": "2910000000000000000000", + "0x22db559f2c3c1475a2e6ffe83a5979599196a7fa": "1000000000000000000000", + "0xfdf449f108c6fb4f5a2b081eed7e45e6919e4d25": "2000000000000000000000", + "0x0be1bcb90343fae5303173f461bd914a4839056c": "6000000000000000000000", + "0xb981ad5e6b7793a23fc6c1e8692eb2965d18d0da": "9999924000000000000000", + "0xc75d2259306aec7df022768c69899a652185dbc4": "4000000000000000000000", + "0x6c2e9be6d4ab450fd12531f33f028c614674f197": "3580000000000000000000", + "0x6dcc7e64fcafcbc2dc6c0e5e662cb347bffcd702": "20000000000000000000000", + "0xaabdb35c1514984a039213793f3345a168e81ff1": "309760000000000000000", + "0xd315deea1d8c1271f9d1311263ab47c007afb6f5": "69760000000000000000", + "0x4faf90b76ecfb9631bf9022176032d8b2c207009": "1000032000000000000000", + "0x3e7a966b5dc357ffb07e9fe067c45791fd8e3049": "59100000000000000000", + "0x2e64a8d71111a22f4c5de1e039b336f68d398a7c": "2000000000000000000000", + "0x181fbba852a7f50178b1c7f03ed9e58d54162929": "666000000000000000000", + "0x4f7330096f79ed264ee0127f5d30d2f73c52b3d8": "499970000000000000000", + "0xa8a8dbdd1a85d1beee2569e91ccc4d09ae7f6ea1": "5800000000000000000000", + "0x1f9c3268458da301a2be5ab08257f77bb5a98aa4": "200000000000000000000", + "0xfc372ff6927cb396d9cf29803500110da632bc52": "2000000000000000000000", + "0x4fa554ab955c249217386a4d3263bbf72895434e": "19982000000000000000", + "0x2a59e47ea5d8f0e7c028a3e8e093a49c1b50b9a3": "2000000000000000000000", + "0x5e32c72191b8392c55f510d8e3326e3a60501d62": "44000000000000000000000", + "0x1dfaee077212f1beaf0e6f2f1840537ae154ad86": "1000000000000000000000", + "0x7eaba035e2af3793fd74674b102540cf190addb9": "1273000000000000000000", + "0xd62edb96fce2969aaf6c545e967cf1c0bc805205": "85705000000000000000", + "0x220dc68df019b6b0ccbffb784b5a5ab4b15d4060": "3940000000000000000000", + "0x45bb829652d8bfb58b8527f0ecb621c29e212ec3": "2000000000000000000000", + "0x79b120eb8806732321288f675a27a9225f1cd2eb": "2465000000000000000000", + "0x740af1eefd3365d78ba7b12cb1a673e06a077246": "19700000000000000000000", + "0x0f042c9c2fb18766f836bb59f735f27dc329fe3c": "10000000000000000000000", + "0x6dda5f788a6c688ddf921fa3852eb6d6c6c62966": "40000000000000000000", + "0x96ad579bbfa8db8ebec9d286a72e4661eed8e356": "1070750000000000000000", + "0x0c2073ba44d3ddbdb639c04e191039a71716237f": "1430000000000000000000", + "0x1a3520453582c718a21c42375bc50773255253e1": "790000000000000000000", + "0xefcaae9ff64d2cd95b5249dcffe7faa0a0c0e44d": "401100000000000000000", + "0x0a3de155d5ecd8e81c1ff9bbf0378301f8d4c623": "4000000000000000000000", + "0x80f07ac09e7b2c3c0a3d1e9413a544c73a41becb": "20000000000000000000", + "0xc3631c7698b6c5111989bf452727b3f9395a6dea": "10683500000000000000000", + "0x4cc22c9bc9ad05d875a397dbe847ed221c920c67": "2000000000000000000000", + "0x1a987e3f83de75a42f1bde7c997c19217b4a5f24": "2000000000000000000000", + "0x5b2b64e9c058e382a8b299224eecaa16e09c8d92": "161000000000000000000", + "0x86caafacf32aa0317c032ac36babed974791dc03": "40000000000000000000000", + "0x1cd1f0a314cbb200de0a0cb1ef97e920709d97c2": "2000000000000000000000", + "0x7d980f4b566bb045517e4c14c87750de9346744b": "1337000000000000000000", + "0x8b5f29cc2faa262cdef30ef554f50eb488146eac": "5818250000000000000000", + "0x5153a0c3c8912881bf1c3501bf64b45649e48222": "4000000000000000000000", + "0xd21a7341eb84fd151054e5e387bb25d36e499c09": "14000000000000000000000", + "0x9560e8ac6718a6a1cdcff189d603c9063e413da6": "4000000000000000000000", + "0xe49ba0cd96816c4607773cf8a5970bb5bc16a1e6": "1670000000000000000000", + "0xb8ac117d9f0dba80901445823c4c9d4fa3fedc6e": "15759015000000000000000", + "0xaf67fd3e127fd9dc36eb3fcd6a80c7be4f7532b2": "1670000000000000000000", + "0xb43c27f7a0a122084b98f483922541c8836cee2c": "715000000000000000000", + "0x4d9279962029a8bd45639737e98b511eff074c21": "1337000000000000000000", + "0xc667441e7f29799aba616451d53b3f489f9e0f48": "13920000000000000000000", + "0x275875ff4fbb0cf3a430213127487f7608d04cba": "500080000000000000000", + "0x9a953b5bcc709379fcb559d7b916afdaa50cadcc": "100000000000000000000", + "0x7ea791ebab0445a00efdfc4e4a8e9a7e7565136d": "18200000000000000000", + "0x6ffe5cf82cc9ea5e36cad7c2974ce7249f3749e6": "1940000000000000000000", + "0xf1b4ecc63525f7432c3d834ffe2b970fbeb87212": "3000064000000000000000", + "0x6b72a8f061cfe6996ad447d3c72c28c0c08ab3a7": "4271316000000000000000", + "0xbba3c68004248e489573abb2743677066b24c8a7": "2000000000000000000000", + "0xb7c0d0cc0b4d342d4062bac624ccc3c70cc6da3f": "4000000000000000000000", + "0xfe98c664c3e447a95e69bd582171b7176ea2a685": "4000000000000000000000", + "0xce71086d4c602554b82dcbfce88d20634d53cc4d": "43250000000000000000000", + "0x1c601993789207f965bb865cbb4cd657cce76fc0": "98294000000000000000", + "0x476b5599089a3fb6f29c6c72e49b2e4740ea808d": "2800000000000000000000", + "0x3439998b247cb4bf8bc80a6d2b3527f1dfe9a6d2": "140000000000000000000", + "0xc4f7d2e2e22084c44f70feaab6c32105f3da376f": "1970000000000000000000", + "0xc1eba5684aa1b24cba63150263b7a9131aeec28d": "20000000000000000000", + "0x94ad4bad824bd0eb9ea49c58cebcc0ff5e08346b": "1940000000000000000000", + "0xded877378407b94e781c4ef4af7cfc5bc220b516": "372500000000000000000", + "0x699c9ee47195511f35f862ca4c22fd35ae8ffbf4": "80000000000000000000", + "0xe3a89a1927cc4e2d43fbcda1e414d324a7d9e057": "205500000000000000000", + "0x4d93696fa24859f5d2939aebfa54b4b51ae1dccc": "19100000000000000000", + "0x0af65f14784e55a6f95667fd73252a1c94072d2a": "192987000000000000000", + "0x5b70c49cc98b3df3fbe2b1597f5c1b6347a388b7": "970000000000000000000", + "0x426f78f70db259ac8534145b2934f4ef1098b5d8": "360000000000000000000", + "0x58b8ae8f63ef35ed0762f0b6233d4ac14e64b64d": "2000000000000000000000", + "0x8eae29435598ba8f1c93428cdb3e2b4d31078e00": "2000000000000000000000", + "0x17fd9b551a98cb61c2e07fbf41d3e8c9a530cba5": "26989000000000000000", + "0xab3e78294ba886a0cfd5d3487fb3a3078d338d6e": "1970000000000000000000", + "0xbdf6e68c0cd7584080e847d72cbb23aad46aeb1d": "1970000000000000000000", + "0xf989346772995ec1906faffeba2a7fe7de9c6bab": "6685000000000000000000", + "0xdc5f5ad663a6f263327d64cac9cb133d2c960597": "2000000000000000000000", + "0x68fe1357218d095849cd579842c4aa02ff888d93": "2000000000000000000000", + "0xe09c68e61998d9c81b14e4ee802ba7adf6d74cdb": "4000000000000000000000", + "0x890fe11f3c24db8732d6c2e772e2297c7e65f139": "62980000000000000000000", + "0xa76929890a7b47fb859196016c6fdd8289ceb755": "5000000000000000000000", + "0x2dc79d6e7f55bce2e2d0c02ad07ceca8bb529354": "1580000000000000000000", + "0x19687daa39c368139b6e7be60dc1753a9f0cbea3": "8000000000000000000000", + "0xc69be440134d6280980144a9f64d84748a37f349": "715000000000000000000", + "0x3d8d0723721e73a6c0d860aa0557abd14c1ee362": "5000000000000000000000", + "0x2b241f037337eb4acc61849bd272ac133f7cdf4b": "378000000000000000000000", + "0x24b95ebef79500baa0eda72e77f877415df75c33": "910000000000000000000", + "0x106ed5c719b5261477890425ae7551dc59bd255c": "11979600000000000000000", + "0x5b2e2f1618552eab0db98add55637c2951f1fb19": "12000000000000000000000", + "0x403145cb4ae7489fcc90cd985c6dc782b3cc4e44": "5999800000000000000000", + "0xe8be24f289443ee473bc76822f55098d89b91cc5": "2000000000000000000000", + "0xf6bc37b1d2a3788d589b6de212dc1713b2f6e78e": "5000000000000000000000", + "0x67fc527dce1785f0fb8bc7e518b1c669f7ecdfb5": "240000000000000000000", + "0x6580b1bc94390f04b397bd73e95d96ef11eaf3a8": "20000000000000000000", + "0x98bf4af3810b842387db70c14d46099626003d10": "4000000000000000000000", + "0x17993d312aa1106957868f6a55a5e8f12f77c843": "450065000000000000000", + "0x0729b4b47c09eb16158464c8aa7fd9690b438839": "1999800000000000000000", + "0xae70e69d2c4a0af818807b1a2705f79fd0b5dbc4": "985000000000000000000", + "0x38b50146e71916a5448de12a4d742135dcf39833": "32200000000000000000000", + "0x38439aaa24e3636f3a18e020ea1da7e145160d86": "2600000000000000000000", + "0x54b4429b182f0377be7e626939c5db6440f75d7a": "1970000000000000000000", + "0x7179726f5c71ae1b6d16a68428174e6b34b23646": "7353500000000000000000", + "0xc2ee91d3ef58c9d1a589844ea1ae3125d6c5ba69": "970000000000000000000", + "0x912304118b80473d9e9fe3ee458fbe610ffda2bb": "200000000000000000000", + "0x3308b03466c27a17dfe1aafceb81e16d2934566f": "17000000000000000000000", + "0x10346414bec6d3dcc44e50e54d54c2b8c3734e3e": "4000000000000000000000", + "0x4fee50c5f988206b09a573469fb1d0b42ebb6dce": "2009400000000000000000", + "0x9ece1400800936c7c6485fcdd3626017d09afbf6": "310000000000000000000", + "0xddf3ad76353810be6a89d731b787f6f17188612b": "20000000000000000000000", + "0x72402300e81d146c2e644e2bbda1da163ca3fb56": "7000000000000000000000", + "0xbb4b4a4b548070ff41432c9e08a0ca6fa7bc9f76": "850000000000000000000", + "0xc3dd58903886303b928625257ae1a013d71ae216": "2000000000000000000000", + "0xca6c818befd251361e02744068be99d8aa60b84a": "6000000000000000000000", + "0xb8d2ddc66f308c0158ae3ccb7b869f7d199d7b32": "844800000000000000000", + "0x8e486a0442d171c8605be348fee57eb5085eff0d": "4000000000000000000000", + "0xa807104f2703d679f8deafc442befe849e42950b": "2000000000000000000000", + "0xbb61a04bffd57c10470d45c39103f64650347616": "1000000000000000000000", + "0xd1c45954a62b911ad701ff2e90131e8ceb89c95c": "1394000000000000000000", + "0x5e65458be964ae449f71773704979766f8898761": "528600000000000000000", + "0xf9b37825f03073d31e249378c30c795c33f83af2": "200152000000000000000", + "0xe309974ce39d60aadf2e69673251bf0e04760a10": "254030000000000000000", + "0xd541ac187ad7e090522de6da3213e9a7f4439673": "2000000000000000000000", + "0xf33efc6397aa65fb53a8f07a0f893aae30e8bcee": "2304850000000000000000", + "0xd2f1998e1cb1580cec4f6c047dcd3dcec54cf73c": "200000000000000000000", + "0x0ed76c2c3b5d50ff8fb50b3eeacd681590be1c2d": "100000000000000000000", + "0x637d67d87f586f0a5a479e20ee13ea310a10b647": "48300000000000000000000", + "0x1a5ee533acbfb3a2d76d5b685277b796c56a052b": "2000000000000000000000", + "0x323fca5ed77f699f9d9930f5ceeff8e56f59f03c": "1337000000000000000000", + "0xa5fe2ce97f0e8c3856be0de5f4dcb2ce5d389a16": "22892000000000000000", + "0x93258255b37c7f58f4b10673a932dd3afd90f4f2": "1000000000000000000000", + "0x950fe9c6cad50c18f11a9ed9c45740a6180612d0": "8000000000000000000000", + "0xee31167f9cc93b3c6465609d79db0cde90e8484c": "2000000000000000000000", + "0x6ebb5e6957aa821ef659b6018a393a504cae4450": "2000000000000000000000", + "0xbe305a796e33bbf7f9aeae6512959066efda1010": "10880000000000000000000", + "0x537f9d4d31ef70839d84b0d9cdb72b9afedbdf35": "70000000000000000000000", + "0xfe9e1197d7974a7648dcc7a03112a88edbc9045d": "4925000000000000000000", + "0x99f77f998b20e0bcdcd9fc838641526cf25918ef": "1790000000000000000000", + "0x76ffc157ad6bf8d56d9a1a7fddbc0fea010aabf4": "1000000000000000000000", + "0xdefe9141f4704599159d7b223de42bffd80496b3": "100000000000000000000", + "0x7b1bf53a9cbe83a7dea434579fe72aac8d2a0cd0": "199800000000000000000", + "0x23ccc3c6acd85c2e460c4ffdd82bc75dc849ea14": "4000000000000000000000", + "0x9f86a066edb61fcb5856de93b75c8c791864b97b": "2000000000000000000000", + "0x871b8a8b51dea1989a5921f13ec1a955a515ad47": "8000000000000000000000", + "0x4efcd9c79fb4334ca6247b0a33bd9cc33208e272": "1337000000000000000000", + "0x35ac1d3ed7464fa3db14e7729213ceaa378c095e": "1520000000000000000000", + "0xc69d663c8d60908391c8d236191533fdf7775613": "485000000000000000000", + "0xc2ed5ffdd1add855a2692fe062b5d618742360d4": "1200000000000000000000", + "0x454f0141d721d33cbdc41018bd01119aa4784818": "6000000000000000000000", + "0x6c8687e3417710bb8a93559021a1469e6a86bc77": "11126675000000000000000", + "0xec5b198a00cfb55a97b5d53644cffa8a04d2ab45": "2000000000000000000000", + "0xcd59f3dde77e09940befb6ee58031965cae7a336": "10000000000000000000000", + "0x8eebec1a62c08b05a7d1d59180af9ff0d18e3f36": "500000000000000000000", + "0x92a971a739799f8cb48ea8475d72b2d2474172e6": "3940000000000000000000", + "0xbed4649df646e2819229032d8868556fe1e053d3": "18200000000000000000", + "0xc50fe415a641b0856c4e75bf960515441afa358d": "2000000000000000000000", + "0x91f516146cda20281719978060c6be4149067c88": "2000000000000000000000", + "0x54a1370116fe22099e015d07cd2669dd291cc9d1": "20000000000000000000", + "0x80c04efd310f440483c73f744b5b9e64599ce3ec": "1200000000000000000000", + "0xa8914c95b560ec13f140577338c32bcbb77d3a7a": "180000000000000000000", + "0xe3c812737ac606baf7522ad817428a36050e7a34": "1940000000000000000000", + "0x6d1456fff0104ee844a3314737843338d24cd66c": "141840000000000000000", + "0x0e6ece99111cad1961c748ed3df51edd69d2a3b1": "100000000000000000000000", + "0x019d709579ff4bc09fdcdde431dc1447d2c260bc": "20000000000000000000", + "0xebff84bbef423071e604c361bba677f5593def4e": "10000000000000000000000", + "0xe10c540088113fa6ec00b4b2c8824f8796e96ec4": "236400000000000000000000", + "0xe03220c697bcd28f26ef0b74404a8beb06b2ba7b": "8000000000000000000000", + "0xe69a6cdb3a8a7db8e1f30c8b84cd73bae02bc0f8": "16915503000000000000000", + "0xe5fb31a5caee6a96de393bdbf89fbe65fe125bb3": "1000000000000000000000", + "0x030fb3401f72bd3418b7d1da75bf8c519dd707dc": "3000000000000000000000", + "0x1c751e7f24df9d94a637a5dedeffc58277b5db19": "3220000000000000000000", + "0xbded7e07d0711e684de65ac8b2ab57c55c1a8645": "591000000000000000000", + "0xdd7ff441ba6ffe3671f3c0dabbff1823a5043370": "2000000000000000000000", + "0xb55474ba58f0f2f40e6cbabed4ea176e011fcad6": "1970000000000000000000", + "0xb92427ad7578b4bfe20a9f63a7c5506d5ca12dc8": "2000000000000000000000", + "0x91a8baaed012ea2e63803b593d0d0c2aab4c5b0a": "1500000000000000000000", + "0xa97e072144499fe5ebbd354acc7e7efb58985d08": "2674000000000000000000", + "0x75c2ffa1bef54919d2097f7a142d2e14f9b04a58": "2673866000000000000000", + "0x53faf165be031ec18330d9fce5bd1281a1af08db": "140000000000000000000", + "0x055ab658c6f0ed4f875ed6742e4bc7292d1abbf0": "83500000000000000000", + "0x6f18ec767e320508195f1374500e3f2e125689ff": "1000000000000000000000", + "0x90fc537b210658660a83baa9ac4a8402f65746a8": "1880000000000000000000", + "0x34664d220fa7f37958024a3332d684bcc6d4c8bd": "10000000000000000000000", + "0x15acb61568ec4af7ea2819386181b116a6c5ee70": "31000000000000000000000", + "0x69d98f38a3ba3dbc01fa5c2c1427d862832f2f70": "100000000000000000000000", + "0xece1152682b7598fe2d1e21ec15533885435ac85": "4000000000000000000000", + "0xf618d9b104411480a863e623fc55232d1a4f48aa": "265793000000000000000", + "0xf9debaecb5f339beea4894e5204bfa340d067f25": "1665000000000000000000", + "0x5e731b55ced452bb3f3fe871ddc3ed7ee6510a8f": "3000000000000000000000", + "0x67df242d240dd4b8071d72f8fcf35bb3809d71e8": "4000000000000000000000", + "0xc4cf930e5d116ab8d13b9f9a7ec4ab5003a6abde": "320000000000000000000", + "0x01a25a5f5af0169b30864c3be4d7563ccd44f09e": "1430000000000000000000", + "0x7f6efb6f4318876d2ee624e27595f44446f68e93": "1550000000000000000000", + "0x82249fe70f61c6b16f19a324840fdc020231bb02": "9504014000000000000000", + "0x205237c4be146fba99478f3a7dad17b09138da95": "2000000000000000000000", + "0xfd1fb5a89a89a721b8797068fbc47f3e9d52e149": "236400000000000000000", + "0xe47fbaed99fc209962604ebd20e240f74f4591f1": "2000000000000000000000", + "0xa24c3ab62181e9a15b78c4621e4c7c588127be26": "162410000000000000000", + "0xb6cd7432d5161be79768ad45de3e447a07982063": "4000000000000000000000", + "0x32a70691255c9fc9791a4f75c8b81f388e0a2503": "985000000000000000000", + "0x562f16d79abfcec3943e34b20f05f97bdfcda605": "4000000000000000000000", + "0xdbc66965e426ff1ac87ad6eb78c1d95271158f9f": "18200000000000000000", + "0x7e87863ec43a481df04d017762edcb5caa629b5a": "39400000000000000000", + "0x587d6849b168f6c3332b7abae7eb6c42c37f48bf": "880000000000000000000", + "0x721158be5762b119cc9b2035e88ee4ee78f29b82": "10000000000000000000000", + "0x84b91e2e2902d05e2b591b41083bd7beb2d52c74": "9848621000000000000000", + "0x632cecb10cfcf38ec986b43b8770adece9200221": "20000000000000000000", + "0xc34e3ba1322ed0571183a24f94204ee49c186641": "58200000000000000000", + "0xae78bb849139a6ba38ae92a09a69601cc4cb62d1": "500000000000000000000", + "0x5ce0b6862cce9162e87e0849e387cb5df4f9118c": "1670000000000000000000", + "0xf52c0a7877345fe0c233bb0f04fd6ab18b6f14ba": "400440000000000000000000", + "0xe016dc138e25815b90be3fe9eee8ffb2e105624f": "500000000000000000000", + "0x5789d01db12c816ac268e9af19dc0dd6d99f15df": "200000000000000000000", + "0xd8b77db9b81bbe90427b62f702b201ffc29ff618": "930200000000000000000", + "0x5dff811dad819ece3ba602c383fb5dc64c0a3a48": "186000000000000000000", + "0xaf3087e62e04bf900d5a54dc3e946274da92423b": "20000000000000000000", + "0x8c1023fde1574db8bb54f1739670157ca47da652": "6969382000000000000000", + "0xbb3b010b18e6e2be1135871026b7ba15ea0fde24": "10044000000000000000000", + "0xcabdaf354f4720a466a764a528d60e3a482a393c": "1000000000000000000000", + "0x94bbc67d13f89ebca594be94bc5170920c30d9f3": "80200000000000000000", + "0x3275496fd4dd8931fd69fb0a0b04c4d1ff879ef5": "446000000000000000000", + "0x281250a29121270a4ee5d78d24feafe82c70ba3a": "1000000000000000000000", + "0x590ccb5911cf78f6f622f535c474375f4a12cfcf": "20000000000000000000000", + "0x542e8096bafb88162606002e8c8a3ed19814aeac": "2000000000000000000000", + "0xa65426cff378ed23253513b19f496de45fa7e18f": "7200000000000000000000", + "0x4aa693b122f314482a47b11cc77c68a497876162": "1970000000000000000000", + "0xd9b783d31d32adc50fa3eacaa15d92b568eaeb47": "34010000000000000000000", + "0x068e655766b944fb263619658740b850c94afa31": "35200000000000000000", + "0x9e23c5e4b782b00a5fadf1aead87dacf5b0367a1": "20000000000000000000", + "0xbf17f397f8f46f1bae45d187148c06eeb959fa4d": "1001440000000000000000", + "0x8578e10212ca14ff0732a8241e37467db85632a9": "6000000000000000000000", + "0x2cb5495a505336c2465410d1cae095b8e1ba5cdd": "20000000000000000000000", + "0x695b0f5242753701b264a67071a2dc880836b8db": "16400000000000000000", + "0xf2edde37f9a8c39ddea24d79f4015757d06bf786": "100000000000000000000000", + "0x480f31b989311e4124c6a7465f5a44094d36f9d0": "1025000000000000000000", + "0xcf157612764e0fd696c8cb5fba85df4c0ddc3cb0": "30000000000000000000000", + "0x27521deb3b6ef1416ea4c781a2e5d7b36ee81c61": "2000000000000000000000", + "0x6efd90b535e00bbd889fda7e9c3184f879a151db": "10100000000000000000000", + "0xb635a4bc71fb28fdd5d2c322983a56c284426e69": "170000000000000000000", + "0xa17c9e4323069518189d5207a0728dcb92306a3f": "1000000000000000000000", + "0x6af940f63ec9b8d876272aca96fef65cdacecdea": "3000000000000000000000", + "0x469358709332c82b887e20bcddd0220f8edba7d0": "17300000000000000000000", + "0xa257ad594bd88328a7d90fc0a907df95eecae316": "520510000000000000000", + "0x6f051666cb4f7bd2b1907221b829b555d7a3db74": "1760000000000000000000", + "0x46bfc5b207eb2013e2e60f775fecd71810c5990c": "1550000000000000000000", + "0x62b9081e7710345e38e02e16449ace1b85bcfc4e": "910000000000000000000", + "0xbc73f7b1ca3b773b34249ada2e2c8a9274cc17c2": "2000000000000000000000", + "0x1adaf4abfa867db17f99af6abebf707a3cf55df6": "6000000000000000000000", + "0x8d629c20608135491b5013f1002586a0383130e5": "1370000000000000000000", + "0x38e46de4453c38e941e7930f43304f94bb7b2be8": "2005500000000000000000", + "0x3485f621256433b98a4200dad857efe55937ec98": "2000000000000000000000", + "0x775c10c93e0db7205b2643458233c64fc33fd75b": "2000000000000000000000", + "0x7c4401ae98f12ef6de39ae24cf9fc51f80eba16b": "200000000000000000000", + "0x17b807afa3ddd647e723542e7b52fee39527f306": "400010000000000000000", + "0x0ab366e6e7d5abbce6b44a438d69a1cabb90d133": "320000000000000000000", + "0x194ffe78bbf5d20dd18a1f01da552e00b7b11db1": "7000000000000000000000", + "0xc45d47ab0c9aa98a5bd62d16223ea2471b121ca4": "593640000000000000000", + "0x2487c3c4be86a2723d917c06b458550170c3edba": "1000000000000000000000", + "0xec4d08aa2e47496dca87225de33f2b40a8a5b36f": "158000000000000000000", + "0xaaa8defe11e3613f11067fb983625a08995a8dfc": "200000000000000000000", + "0x50bb67c8b8d8bd0f63c4760904f2d333f400aace": "2000000000000000000000", + "0x1227e10a4dbf9caca31b1780239f557615fc35c1": "200000000000000000000", + "0x44a8989e32308121f72466978db395d1f76c3a4b": "7236900000000000000000", + "0x59569a21d28fba4bda37753405a081f2063da150": "4000000000000000000000", + "0xc3756bcdcc7eec74ed896adfc335275930266e08": "6000000000000000000000", + "0xce3a61f0461b00935e85fa1ead82c45e5a64d488": "500000000000000000000", + "0x012f396a2b5eb83559bac515e5210df2c8c362ba": "200000000000000000000", + "0x93bc7d9a4abd44c8bbb8fe8ba804c61ad8d6576c": "3999922000000000000000", + "0xe20bb9f3966419e14bbbaaaa6789e92496cfa479": "3465116000000000000000", + "0x9eef442d291a447d74c5d253c49ef324eac1d8f0": "3420000000000000000000", + "0xdb6c2a73dac7424ab0d031b66761122566c01043": "3000000000000000000000", + "0x704d243c2978e46c2c86adbecd246e3b295ff633": "2012000000000000000000", + "0xd2ff672016f63b2f85398f4a6fedbb60a50d3cce": "342500000000000000000", + "0xd2051cb3cb6704f0548cc890ab0a19db3415b42a": "334000000000000000000", + "0x1111e5dbf45e6f906d62866f1708101788ddd571": "1300200000000000000000", + "0x6a686bf220b593deb9b7324615fb9144ded3f39d": "1460000000000000000000", + "0x911feea61fe0ed50c5b9e5a0d66071399d28bdc6": "60000000000000000000", + "0x3881defae1c07b3ce04c78abe26b0cdc8d73f010": "200000000000000000000", + "0xea94f32808a2ef8a9bf0861d1d2404f7b7be258a": "20000000000000000000", + "0x2eef6b1417d7b10ecfc19b123a8a89e73e526c58": "600000000000000000000", + "0xdd8af9e7765223f4446f44d3d509819a3d3db411": "10000000000000000000000", + "0x2efc4c647dac6acac35577ad221758fef6616faa": "8000000000000000000000", + "0x1547b9bf7ad66274f3413827231ba405ee8c88c1": "17300000000000000000000", + "0x250a40cef3202397f240469548beb5626af4f23c": "92500000000000000000", + "0xc175be3194e669422d15fee81eb9f2c56c67d9c9": "200000000000000000000", + "0xc9e02608066828848aeb28c73672a12925181f4d": "500038000000000000000", + "0x8229ceb9f0d70839498d44e6abed93c5ca059f5d": "123300000000000000000000", + "0x39f198331e4b21c1b760a3155f4ab2fe00a74619": "2000000000000000000000", + "0x3ffcb870d4023d255d5167d8a507cefc366b68ba": "649400000000000000000", + "0x00dae27b350bae20c5652124af5d8b5cba001ec1": "40000000000000000000", + "0xfc5500825105cf712a318a5e9c3bfc69c89d0c12": "4000000000000000000000", + "0x1ed8bb3f06778b039e9961d81cb71a73e6787c8e": "2000000000000000000000", + "0x530ffac3bc3412e2ec0ea47b7981c770f5bb2f35": "133700000000000000000", + "0x5f344b01c7191a32d0762ac188f0ec2dd460911d": "1000000000000000000000", + "0x5cfa9877f719c79d9e494a08d1e41cf103fc87c9": "200000000000000000000", + "0xf6eaac7032d492ef17fd6095afc11d634f56b382": "500038000000000000000", + "0x962c0dec8a3d464bf39b1215eafd26480ae490cd": "2001680000000000000000", + "0x262a8bfd7d9dc5dd3ad78161b6bb560824373655": "1169820000000000000000", + "0x9b4824ff9fb2abda554dee4fb8cf549165570631": "20000000000000000000", + "0xbb3b9005f46fd2ca3b30162599928c77d9f6b601": "8000014000000000000000", + "0xf7dc251196fbcbb77c947d7c1946b0ff65021cea": "1000000000000000000000", + "0xaf1148ef6c8e103d7530efc91679c9ac27000993": "200000000000000000000", + "0x0bb2650ea01aca755bc0c017b64b1ab5a66d82e3": "1337000000000000000000", + "0x0cda12bf72d461bbc479eb92e6491d057e6b5ad1": "10000000000000000000000", + "0x4e5b77f9066159e615933f2dda7477fa4e47d648": "200000000000000000000", + "0x391161b0e43c302066e8a68d2ce7e199ecdb1d57": "4000000000000000000000", + "0xc7e330cd0c890ac99fe771fcc7e7b009b7413d8a": "4000000000000000000000", + "0xd4b38a5fdb63e01714e9801db47bc990bd509183": "5999000000000000000000", + "0xbc0f98598f88056a26339620923b8f1eb074a9fd": "200000000000000000000", + "0xdbc59ed88973dead310884223af49763c05030f1": "20000000000000000000", + "0x0f85e42b1df321a4b3e835b50c00b06173968436": "985000000000000000000", + "0xd7788ef28658aa06cc53e1f3f0de58e5c371be78": "6685000000000000000000", + "0xecd276af64c79d1bd9a92b86b5e88d9a95eb88f8": "20000000000000000000", + "0x81c9e1aee2d3365d53bcfdcd96c7c538b0fd7eec": "1820000000000000000000", + "0x5d39ef9ea6bdfff15d11fe91f561a6f9e31f5da5": "2000000000000000000000", + "0x99878f9d6e0a7ed9aec78297b73879a80195afe0": "3980000000000000000000", + "0x7294c918b1aefb4d25927ef9d799e71f93a28e85": "197000000000000000000", + "0xa33f70da7275ef057104dfa7db64f472e9f5d553": "80220000000000000000", + "0x255bdd6474cc8262f26a22c38f45940e1ceea69b": "4000000000000000000000", + "0x52f8b509fee1a874ab6f9d87367fbeaf15ac137f": "1000000000000000000000", + "0xe2728a3e8c2aaac983d05dc6877374a8f446eee9": "197600000000000000000", + "0xed0206cb23315128f8caff26f6a30b985467d022": "40000000000000000000000", + "0x87cf36ad03c9eae9053abb5242de9117bb0f2a0b": "500000000000000000000", + "0xa929c8bd71db0c308dac06080a1747f21b1465aa": "500000000000000000000", + "0x9da6e075989c7419094cc9f6d2e49393bb199688": "11100000000000000000000", + "0x763eece0b08ac89e32bfa4bece769514d8cb5b85": "4000000000000000000000", + "0x5df3277ca85936c7a0d2c0795605ad25095e7159": "2000000000000000000000", + "0x7163758cbb6c4c525e0414a40a049dcccce919bb": "200000000000000000000", + "0x14cdddbc8b09e6675a9e9e05091cb92238c39e1e": "5100000000000000000000", + "0xb3b7f493b44a2c8d80ec78b1cdc75a652b73b06c": "2000000000000000000000", + "0xc69b855539ce1b04714728eec25a37f367951de7": "2000000000000000000000", + "0x052eab1f61b6d45517283f41d1441824878749d0": "4000000000000000000000", + "0x515651d6db4faf9ecd103a921bbbbe6ae970fdd4": "20000000000000000000000", + "0xc7aff91929797489555a2ff1d14d5c695a108355": "1000000000000000000000", + "0xd7ca7fdcfebe4588eff5421d1522b61328df7bf3": "4001070000000000000000", + "0xeefba12dfc996742db790464ca7d273be6e81b3e": "1000000000000000000000", + "0xebaa216de9cc5a43031707d36fe6d5bedc05bdf0": "1969606000000000000000", + "0x559194304f14b1b93afe444f0624e053c23a0009": "400000000000000000000", + "0x4ecc19948dd9cd87b4c7201ab48e758f28e7cc76": "500200000000000000000", + "0xf224eb900b37b4490eee6a0b6420d85c947d8733": "970000000000000000000", + "0x97810bafc37e84306332aacb35e92ad911d23d24": "1000000000000000000000", + "0xbd67d2e2f82da8861341bc96a2c0791fddf39e40": "200014000000000000000", + "0x1b6495891240e64e594493c2662171db5e30ce13": "172400000000000000000", + "0x00bdd4013aa31c04616c2bc9785f2788f915679b": "13400000000000000000", + "0xc6ae287ddbe1149ba16ddcca4fe06aa2eaa988a9": "400000000000000000000", + "0xb7c9f12b038e73436d17e1c12ffe1aeccdb3f58c": "540000000000000000000", + "0xc1b500011cfba95d7cd636e95e6cbf6167464b25": "200000000000000000000", + "0x39e0db4d60568c800b8c5500026c2594f5768960": "1000000000000000000000", + "0x40e3c283f7e24de0410c121bee60a5607f3e29a6": "1000000000000000000000", + "0x2f7d3290851be5c6b4b43f7d4574329f61a792c3": "100000000000000000000", + "0xc33ece935a8f4ef938ea7e1bac87cb925d8490ca": "33122000000000000000000", + "0x57bddf078834009c89d88e6282759dc45335b470": "2148000000000000000000", + "0x50ad187ab21167c2b6e78be0153f44504a07945e": "100076000000000000000", + "0x5bd24aac3612b20c609eb46779bf95698407c57c": "1970000000000000000000", + "0x16526c9edf943efa4f6d0f0bae81e18b31c54079": "985000000000000000000", + "0x4c6a9dc2cab10abb2e7c137006f08fecb5b779e1": "499000000000000000000", + "0x02c9f7940a7b8b7a410bf83dc9c22333d4275dd3": "5000000000000000000000", + "0xb9fd3833e88e7cf1fa9879bdf55af4b99cd5ce3f": "1000000000000000000000", + "0x7e268f131ddf687cc325c412f78ba961205e9112": "16000600000000000000000", + "0x180478a655d78d0f3b0c4f202b61485bc4002fd5": "2000000000000000000000", + "0xed4014538cee664a2fbcb6dc669f7ab16d0ba57c": "200000000000000000000", + "0xf63a579bc3eac2a9490410128dbcebe6d9de8243": "1490000000000000000000", + "0x5d822d9b3ef4b502627407da272f67814a6becd4": "20000000000000000000", + "0xeb52ab10553492329c1c54833ae610f398a65b9d": "152000000000000000000", + "0x63340a57716bfa63eb6cd133721202575bf796f0": "209967000000000000000", + "0x933bf33f8299702b3a902642c33e0bfaea5c1ca3": "15200000000000000000", + "0x25bc49ef288cd165e525c661a812cf84fbec8f33": "338464000000000000000", + "0xc8231ba5a411a13e222b29bfc1083f763158f226": "1000090000000000000000", + "0x6c15ec3520bf8ebbc820bd0ff19778375494cf9d": "2005500000000000000000", + "0xaaced8a9563b1bc311dbdffc1ae7f57519c4440c": "2000000000000000000000", + "0xd90f3009db437e4e11c780bec8896f738d65ef0d": "4000000000000000000000", + "0x5603241eb8f08f721e348c9d9ad92f48e390aa24": "200000000000000000000", + "0x53cec6c88092f756efe56f7db11228a2db45b122": "4000000000000000000000", + "0x194cebb4929882bf3b4bf9864c2b1b0f62c283f9": "571300000000000000000", + "0x4be8628a8154874e048d80c142181022b180bcc1": "60000000000000000000", + "0x5fd973af366aa5157c54659bcfb27cbfa5ac15d6": "4000000000000000000000", + "0x303139bc596403d5d3931f774c66c4ba467454db": "1699830000000000000000", + "0x87584a3f613bd4fac74c1e780b86d6caeb890cb2": "1700000000000000000000", + "0x77f4e3bdf056883cc87280dbe640a18a0d02a207": "193806000000000000000", + "0x4de3fe34a6fbf634c051997f47cc7f48791f5824": "1999000000000000000000", + "0xc45a1ca1036b95004187cdac44a36e33a94ab5c3": "254800000000000000000", + "0x65d33eb39cda6453b19e61c1fe4db93170ef9d34": "13370000000000000000", + "0xf65616be9c8b797e7415227c9138faa0891742d7": "790000000000000000000", + "0xe17812f66c5e65941e186c46922b6e7b2f0eeb46": "1820000000000000000000", + "0xd47f50df89a1cff96513bef1b2ae3a2971accf2c": "840000000000000000000", + "0x8ed1528b447ed4297902f639c514d0944a88f8c8": "198800000000000000000", + "0xa4fb14409a67b45688a8593e5cc2cf596ced6f11": "1790000000000000000000", + "0x855d9aef2c39c6230d09c99ef6494989abe68785": "161000000000000000000", + "0x778c43d11afe3b586ff374192d96a7f23d2b9b7f": "2577139000000000000000", + "0xe3ece1f632711d13bfffa1f8f6840871ee58fb27": "4000000000000000000000", + "0xbeb3358c50cf9f75ffc76d443c2c7f55075a0589": "2674000000000000000000", + "0xf156dc0b2a981e5b55d3f2f03b8134e331dbadb7": "100000000000000000000", + "0xeb9cc9fe0869d2dab52cc7aae8fd57adb35f9feb": "1966000000000000000000", + "0x2467c6a5c696ede9a1e542bf1ad06bcc4b06aca0": "18500000000000000000", + "0xec75b4a47513120ba5f86039814f1998e3817ac3": "178756000000000000000", + "0x9c3d0692ceeef80aa4965ceed262ffc7f069f2dc": "200000000000000000000", + "0xe05029aceb0778675bef1741ab2cd2931ef7c84b": "5000057000000000000000", + "0x41d3b731a326e76858baa5f4bd89b57b36932343": "394000000000000000000", + "0xc346cb1fbce2ab285d8e5401f42dd7234d37e86d": "83500000000000000000", + "0x45f4fc60f08eaca10598f0336329801e3c92cb46": "200000000000000000000", + "0xf04a6a379708b9428d722aa2b06b77e88935cf89": "300000000000000000000", + "0x232832cd5977e00a4c30d0163f2e24f088a6cb09": "3000000000000000000000", + "0xd2ac0d3a58605e1d0f0eb3de25b2cad129ed6058": "4000000000000000000000", + "0xa356551bb77d4f45a6d7e09f0a089e79cca249cb": "340000000000000000000", + "0xb50c9f5789ae44e2dce017c714caf00c830084c2": "394000000000000000000", + "0x21fd6c5d97f9c600b76821ddd4e776350fce2be0": "1999946000000000000000", + "0xf0d5c31ccb6cbe30c7c9ea19f268d159851f8c9c": "16700000000000000000000", + "0xab7091932e4bc39dbb552380ca934fd7166d1e6e": "3340000000000000000000", + "0xacd8dd91f714764c45677c63d852e56eb9eece2e": "2000000000000000000000", + "0x57d032a43d164e71aa2ef3ffd8491b0a4ef1ea5b": "2000000000000000000000", + "0x5af46a25ac09cb73616b53b14fb42ff0a51cddb2": "4000000000000000000000", + "0x1ea6bf2f15ae9c1dbc64daa7f8ea4d0d81aad3eb": "4200000000000000000000", + "0x03337012ae1d7ff3ee7f697c403e7780188bf0ef": "200000000000000000000", + "0x32eb64be1b5dede408c6bdefbe6e405c16b7ed02": "1970000000000000000000", + "0x22e2488e2da26a49ae84c01bd54b21f2947891c6": "1730000000000000000000", + "0xbe98a77fd41097b34f59d7589baad021659ff712": "900000000000000000000", + "0xdda4ed2a58a8dd20a73275347b580d71b95bf99a": "399000000000000000000", + "0x671110d96aaff11523cc546bf9940eedffb2faf7": "4000000000000000000000", + "0x5d71799c8df3bccb7ee446df50b8312bc4eb71c5": "200000000000000000000", + "0xae179a460db66326743d24e67523a57b246daf7f": "4722920000000000000000", + "0x198bfcf1b07ae308fa2c02069ac9dafe7135fb47": "20000000000000000000", + "0x4662a1765ee921842ddc88898d1dc8627597bd7e": "10000000000000000000000", + "0x783eec8aa5dac77b2e6623ed5198a431abbaee07": "440000000000000000000", + "0xed6643c0e8884b2d3211853785a08bf8f33ed29f": "1337000000000000000000", + "0x5cc7d3066d45d27621f78bb4b339473e442a860f": "9999908000000000000000", + "0x94ef8be45077c7d4c5652740de946a62624f713f": "100085000000000000000", + "0x2f853817afd3b8f3b86e9f60ee77b5d97773c0e3": "1451450000000000000000", + "0x3e0b8ed86ed669e12723af7572fbacfe829b1e16": "1499800000000000000000", + "0xfa68e0cb3edf51f0a6f211c9b2cb5e073c9bffe6": "291200000000000000000", + "0x2c234f505ca8dcc77d9b7e01d257c318cc19396d": "100000000000000000000", + "0xf3f24fc29e20403fc0e8f5ebbb553426f78270a2": "100000000000000000000", + "0x91546b79ecf69f936b5a561508b0d7e50cc5992f": "267400000000000000000", + "0x435443b81dfdb9bd8c6787bc2518e2d47e57c15f": "5968500000000000000000", + "0x3a06e3bb1edcfd0c44c3074de0bb606b049894a2": "10000000000000000000000", + "0x3a3108c1e680a33b336c21131334409d97e5adec": "20000000000000000000", + "0x2caf6bf4ec7d5a19c5e0897a5eeb011dcece4210": "139740000000000000000", + "0xf44f8551ace933720712c5c491cdb6f2f951736c": "4000000000000000000000", + "0x5bc1f95507b1018642e45cd9c0e22733b9b1a326": "100000000000000000000", + "0x94ca56de777fd453177f5e0694c478e66aff8a84": "500000000000000000000", + "0xafdd1b786162b8317e20f0e979f4b2ce486d765d": "20000000000000000000", + "0x3a805fa0f7387f73055b7858ca8519edd93d634f": "1850000000000000000000", + "0x8b36224c7356e751f0c066c35e3b44860364bfc2": "998987000000000000000", + "0xcfecbea07c27002f65fe534bb8842d0925c78402": "4000000000000000000000", + "0x482982ac1f1c6d1721feecd9b9c96cd949805055": "10000000000000000000000", + "0xaf880fc7567d5595cacce15c3fc14c8742c26c9e": "133700000000000000000", + "0xacc1c78786ab4d2b3b277135b5ba123e0400486b": "78800000000000000000", + "0x41f27e744bd29de2b0598f02a0bb9f98e681eaa4": "7760000000000000000000", + "0x09a025316f967fa8b9a1d60700063f5a68001caa": "38200000000000000000", + "0x391f20176d12360d724d51470a90703675594a4d": "1600000000000000000000", + "0xfe4d8403216fd571572bf1bdb01d00578978d688": "9850000000000000000000", + "0x900f0b8e35b668f81ef252b13855aa5007d012e7": "425000000000000000000", + "0xc35b95a2a3737cb8f0f596b34524872bd30da234": "7540000000000000000000", + "0x412a68f6c645559cc977fc4964047a201d1bb0e2": "50000000000000000000000", + "0xd3dad1b6d08d4581ccae65a8732db6ac69f0c69e": "6000000000000000000000", + "0x35855ec641ab9e081ed0c2a6dcd81354d0244a87": "1201897000000000000000", + "0x88015d7203c5e0224aeda286ed12f1a51b789333": "4999711000000000000000", + "0x251c12722c6879227992a304eb3576cd18434ea5": "2000000000000000000000", + "0x1f6f0030349752061c96072bc3d6eb3549208d6b": "23891000000000000000", + "0x86153063a1ae7f02f1a88136d4d69c7c5e3e4327": "1000000000000000000000", + "0x78355df0a230f83d032c703154414de3eedab557": "2000000000000000000000", + "0xc5b56cd234267c28e89c6f6b2266b086a12f970c": "4000000000000000000000", + "0x3e3cd3bec06591d6346f254b621eb41c89008d31": "993800000000000000000", + "0x378ea1dc8edc19bae82638029ea8752ce98bcfcd": "2000000000000000000000", + "0x67632046dcb25a54936928a96f423f3320cbed92": "2000000000000000000000", + "0xddbee6f094eae63420b003fb4757142aea6cd0fd": "2000000000000000000000", + "0xb555d00f9190cc3677aef314acd73fdc39399259": "2000000000000000000000", + "0xe230fe1bff03186d0219f15d4c481b7d59be286a": "36710000000000000000", + "0x3e4e9265223c9738324cf20bd06006d0073edb8c": "133700000000000000000", + "0x7450ff7f99eaa9116275deac68e428df5bbcd8b9": "2000000000000000000000", + "0x021f69043de88c4917ca10f1842897eec0589c7c": "1978760000000000000000", + "0x351787843505f8e4eff46566cce6a59f4d1c5fe7": "9250000000000000000000", + "0xebd37b256563e30c6f9289a8e2702f0852880833": "1999944000000000000000", + "0xed41e1a28f5caa843880ef4e8b08bd6c33141edf": "790174000000000000000", + "0x8d238e036596987643d73173c37b0ad06055b96c": "2089724000000000000000", + "0x478e524ef2a381d70c82588a93ca7a5fa9d51cbf": "254908000000000000000000", + "0x4419ac618d5dea7cdc6077206fb07dbdd71c1702": "4000000000000000000000", + "0xca25ff34934c1942e22a4e7bd56f14021a1af088": "197000000000000000000", + "0x5552f4b3ed3e1da79a2f78bb13e8ae5a68a9df3b": "1000000000000000000000", + "0x4354221e62dc09e6406436163a185ef06d114a81": "2000000000000000000000", + "0xca0432cb157b5179f02ebba5c9d1b54fec4d88ca": "1000000000000000000000", + "0x8a780ab87a9145fe10ed60fa476a740af4cab1d2": "334000000000000000000", + "0x4ff676e27f681a982d8fd9d20e648b3dce05e945": "2800000000000000000000", + "0x6c63fc85029a2654d79b2bea4de349e4524577c5": "660000000000000000000", + "0x1ac089c3bc4d82f06a20051a9d732dc0e734cb61": "700300000000000000000", + "0x4bf4479799ef82eea20943374f56a1bf54001e5e": "3940000000000000000000", + "0x08411652c871713609af0062a8a1281bf1bbcfd9": "1400000000000000000000", + "0xe1bfaa5a45c504428923c4a61192a55b1400b45d": "2674000000000000000000", + "0x5e1fbd4e58e2312b3c78d7aaaafa10bf9c3189e3": "40000000000000000000000", + "0xbb27c6a7f91075475ab229619040f804c8ec7a6a": "10000000000000000000000", + "0x5d8d31faa864e22159cd6f5175ccecc53fa54d72": "26980000000000000000000", + "0x2dd8eeef87194abc2ce7585da1e35b7cea780cb7": "999999000000000000000", + "0x0e1801e70b6262861b1134ccbc391f568afc92f7": "4000000000000000000000", + "0x61042b80fd6095d1b87be2f00f109fabafd157a6": "100000000000000000000", + "0xfb5518714cefc36d04865de5915ef0ff47dfe743": "2000000000000000000000", + "0xb5add1e7809f7d03069bfe883b0a932210be8712": "1000000000000000000000", + "0xc2e2d498f70dcd0859e50b023a710a6d4b2133bd": "1037130000000000000000", + "0x4ad047fae67ef162fe68fedbc27d3b65caf10c36": "1970000000000000000000", + "0x69cb3e2153998d86e5ee20c1fcd1a6baeeb2863f": "4000000000000000000000", + "0x683633010a88686bea5a98ea53e87997cbf73e69": "99960000000000000000", + "0x6cb11ecb32d3ce829601310636f5a10cf7cf9b5f": "20068370000000000000000", + "0xa613456996408af1c2e93e177788ab55895e2b32": "6366000000000000000000", + "0x8308ed0af7f8a3c1751fafc877b5a42af7d35882": "1000000000000000000000", + "0xe5edf8123f2403ce1a0299becf7aac744d075f23": "200200000000000000000", + "0x05665155cc49cbf6aabdd5ae92cbfaad82b8c0c1": "400000000000000000000", + "0x00b277b099a8e866ca0ec65bcb87284fd142a582": "1970000000000000000000", + "0x4b9e068fc4680976e61504912985fd5ce94bab0d": "668500000000000000000", + "0x12134e7f6b017bf48e855a399ca58e2e892fa5c8": "1000000000000000000000", + "0xdffcea5421ec15900c6ecfc777184e140e209e24": "19980000000000000000", + "0x2132c0516a2e17174ac547c43b7b0020d1eb4c59": "985000000000000000000", + "0xd39a5da460392b940b3c69bc03757bf3f2e82489": "7019250000000000000000", + "0x66c8331efe7198e98b2d32b938688e3241d0e24f": "9620000000000000000000", + "0xbdca2a0ff34588af625fa8e28fc3015ab5a3aa00": "2339800000000000000000", + "0x7dfc342dffcf45dfee74f84c0995397bd1a63172": "250000000000000000000", + "0xa202547242806f6e70e74058d6e5292defc8c8d4": "2002000000000000000000", + "0x3bbc13d04accc0707aebdcaef087d0b87e0b5ee3": "3520000000000000000000", + "0xbe5cba8d37427986e8ca2600e858bb03c359520f": "2955000000000000000000", + "0x4174fa1bc12a3b7183cbabb77a0b59557ba5f1db": "2000000000000000000000", + "0x9eb3a7cb5e6726427a3a361cfa8d6164dbd0ba16": "804000000000000000000", + "0x25e661c939863acc044e6f17b5698cce379ec3cc": "1370000000000000000000", + "0x24bd5904059091d2f9e12d6a26a010ca22ab14e8": "1880000000000000000000", + "0xc96626728aaa4c4fb3d31c26df3af310081710d1": "3340000000000000000000", + "0x0fb5d2c673bfb1ddca141b9894fd6d3f05da6720": "100000000000000000000", + "0x2de31afd189a13a76ff6fe73ead9f74bb5c4a629": "6000000000000000000000", + "0xbd09126c891c4a83068059fe0e15796c4661a9f4": "800000000000000000000", + "0x496f5843f6d24cd98d255e4c23d1e1f023227545": "1754143000000000000000", + "0x540cf23dd95c4d558a279d778d2b3735b3164191": "10000000000000000000000", + "0x9b5ec18e8313887df461d2902e81e67a8f113bb1": "100000000000000000000", + "0xb7a7f77c348f92a9f1100c6bd829a8ac6d7fcf91": "1820000000000000000000", + "0x2590126870e0bde8a663ab040a72a5573d8d41c2": "5000000000000000000000", + "0x090fa9367bda57d0d3253a0a8ff76ce0b8e19a73": "1000000000000000000000", + "0x2a5ba9e34cd58da54c9a2712663a3be274c8e47b": "197000000000000000000", + "0x3e8641d43c42003f0a33c929f711079deb2b9e46": "500000000000000000000", + "0xf4d97664cc4eec9edbe7fa09f4750a663b507d79": "4000000000000000000000", + "0xb1540e94cff3465cc3d187e7c8e3bdaf984659e2": "2989950000000000000000", + "0xf96883582459908c827627e86f28e646f9c7fc7a": "8350000000000000000000", + "0xd4feed99e8917c5c5458635f3603ecb7e817a7d0": "300031000000000000000", + "0x14b1603ec62b20022033eec4d6d6655ac24a015a": "50000000000000000000", + "0xaf8e1dcb314c950d3687434d309858e1a8739cd4": "267400000000000000000", + "0x4b9206ba6b549a1a7f969e1d5dba867539d1fa67": "7880000000000000000000", + "0x471010da492f4018833b088d9872901e06129174": "500000000000000000000", + "0xd243184c801e5d79d2063f3578dbae81e7b3a9cb": "1989700000000000000000", + "0x3eada8c92f56067e1bb73ce378da56dc2cdfd365": "2210000000000000000000", + "0x33ea6b7855e05b07ab80dab1e14de9b649e99b6c": "532000000000000000000", + "0x700711e311bb947355f755b579250ca7fd765a3e": "1790000000000000000000", + "0x87fb26c31e48644d693134205cae43b21f18614b": "1370000000000000000000", + "0x001d14804b399c6ef80e64576f657660804fec0b": "4200000000000000000000", + "0xf9642086b1fbae61a6804dbe5fb15ec2d2b537f4": "2000000000000000000000", + "0x6919dd5e5dfb1afa404703b9faea8cee35d00d70": "5910000000000000000000", + "0x9ac4da51d27822d1e208c96ea64a1e5b55299723": "100040000000000000000", + "0x1bd8ebaa7674bb18e19198db244f570313075f43": "150000000000000000000", + "0xe64ef012658d54f8e8609c4e9023c09fe865c83b": "28000000000000000000", + "0x43b079baf0727999e66bf743d5bcbf776c3b0922": "2000000000000000000000", + "0x06ac26ad92cb859bd5905ddce4266aa0ec50a9c5": "775000000000000000000", + "0x99c1d9f40c6ab7f8a92fce2fdce47a54a586c53f": "985000000000000000000", + "0x4ae93082e45187c26160e66792f57fad3551c73a": "21658000000000000000000", + "0x7da7613445a21299aa74f0ad71431ec43fbb1be9": "68000000000000000000", + "0x4a9a26fd0a8ba10f977da4f77c31908dab4a8016": "1790000000000000000000", + "0x972c2f96aa00cf8a2f205abcf8937c0c75f5d8d9": "200000000000000000000", + "0xb5046cb3dc1dedbd364514a2848e44c1de4ed147": "16445100000000000000000", + "0x48c2ee91a50756d8ce9abeeb7589d22c6fee5dfb": "3220000000000000000000", + "0x46c1aa2244b9c8a957ca8fac431b0595a3b86824": "4000000000000000000000", + "0x21fd0bade5f4ef7474d058b7f3d854cb1300524e": "20000000000000000000", + "0x1864a3c7b48155448c54c88c708f166709736d31": "133700000000000000000", + "0x5dd53ae897526b167d39f1744ef7c3da5b37a293": "8000000000000000000000", + "0xece111670b563ccdbebca52384290ecd68fe5c92": "20000000000000000000", + "0x74d671d99cbea1ab57906375b63ff42b50451d17": "1000000000000000000000", + "0x5717cc9301511d4a81b9f583148beed3d3cc8309": "2600000000000000000000", + "0x8f92844f282a92999ee5b4a8d773d06b694dbd9f": "1940000000000000000000", + "0xb5a606f4ddcbb9471ec67f658caf2b00ee73025e": "4325000000000000000000", + "0xbdb60b823a1173d45a0792245fb496f1fd3301cf": "2000000000000000000000", + "0x1d2615f8b6ca5012b663bdd094b0c5137c778ddf": "10000000000000000000000", + "0x82ff716fdf033ec7e942c909d9831867b8b6e2ef": "1790000000000000000000", + "0x44c14765127cde11fab46c5d2cf4d4b2890023fd": "2000000000000000000000", + "0xc72cb301258e91bc08998a805dd192f25c2f9a35": "591000000000000000000", + "0xad732c976593eec4783b4e2ecd793979780bfedb": "2000000000000000000000", + "0xd8f62036f03b7635b858f1103f8a1d9019a892b6": "50000000000000000000", + "0x0a06fad7dcd7a492cbc053eeabde6934b39d8637": "20000000000000000000", + "0x67f2bb78b8d3e11f7c458a10b5c8e0a1d374467d": "1790000000000000000000", + "0x4b5cdb1e428c91dd7cb54a6aed4571da054bfe52": "88000000000000000000", + "0xb3557d39b5411b84445f5f54f38f62d2714d0087": "600000000000000000000", + "0x0b0e055b28cbd03dc5ff44aa64f3dce04f5e63fb": "2000000000000000000000", + "0x9b2be7f56754f505e3441a10f7f0e20fd3ddf849": "340000000000000000000", + "0x0b93fca4a4f09cac20db60e065edcccc11e0a5b6": "200000000000000000000", + "0x3bc85d6c735b9cda4bba5f48b24b13e70630307b": "1970000000000000000000", + "0x52102354a6aca95d8a2e86d5debda6de69346076": "2000000000000000000000", + "0xcda4530f4b9bc50905b79d17c28fc46f95349bdf": "942000000000000000000", + "0xff545bbb66fbd00eb5e6373ff4e326f5feb5fe12": "20000000000000000000", + "0x4030a925706b2c101c8c5cb9bd05fbb4f6759b18": "4000000000000000000000", + "0xf11e01c7a9d12499005f4dae7716095a34176277": "400000000000000000000", + "0xa4826b6c3882fad0ed5c8fbb25cc40cc4f33759f": "2068000000000000000000", + "0x28510e6eff1fc829b6576f4328bc3938ec7a6580": "10000000000000000000000", + "0x9ce5363b13e8238aa4dd15acd0b2e8afe0873247": "200000000000000000000", + "0xd97bc84abd47c05bbf457b2ef659d61ca5e5e48f": "122000000000000000000", + "0x4a719061f5285495b37b9d7ef8a51b07d6e6acac": "199800000000000000000", + "0x8b714522fa2839620470edcf0c4401b713663df1": "200000000000000000000", + "0xb6decf82969819ba02de29b9b593f21b64eeda0f": "740000000000000000000", + "0xc87d3ae3d88704d9ab0009dcc1a0067131f8ba3c": "1969606000000000000000", + "0xdccb370ed68aa922283043ef7cad1b9d403fc34a": "4000000000000000000000", + "0x2d532df4c63911d1ce91f6d1fcbff7960f78a885": "1669833000000000000000", + "0x1fcfd1d57f872290560cb62d600e1defbefccc1c": "1490000000000000000000", + "0xd9e27eb07dfc71a706060c7f079238ca93e88539": "1000000000000000000000", + "0xda7732f02f2e272eaf28df972ecc0ddeed9cf498": "205274000000000000000", + "0xbf09d77048e270b662330e9486b38b43cd781495": "436000000000000000000000", + "0x619f171445d42b02e2e07004ad8afe694fa53d6a": "20000000000000000000", + "0x2bdd03bebbee273b6ca1059b34999a5bbd61bb79": "20000000000000000000", + "0x8da1d359ba6cb4bcc57d7a437720d55db2f01c72": "80000000000000000000", + "0xbe935793f45b70d8045d2654d8dd3ad24b5b6137": "880000000000000000000", + "0xee71793e3acf12a7274f563961f537529d89c7de": "2000000000000000000000", + "0x86f05d19063e9369c6004eb3f123943a7cff4eab": "1999944000000000000000", + "0x87b10f9c280098179a2b76e9ce90be61fc844d0d": "1337000000000000000000", + "0x243c84d12420570cc4ef3baba1c959c283249520": "2345000000000000000000", + "0x6bc85acd5928722ef5095331ee88f484b8cf8357": "180000000000000000000", + "0x2561a138dcf83bd813e0e7f108642be3de3d6f05": "999940000000000000000", + "0x7d0350e40b338dda736661872be33f1f9752d755": "49933000000000000000", + "0xe5dc9349cb52e161196122cf87a38936e2c57f34": "2000000000000000000000", + "0x543a8c0efb8bcd15c543e2a6a4f807597631adef": "5893800000000000000000", + "0x0413d0cf78c001898a378b918cd6e498ea773c4d": "280000000000000000000", + "0x3708e59de6b4055088782902e0579c7201a8bf50": "200000000000000000000000", + "0x699fc6d68a4775573c1dcdaec830fefd50397c4e": "60000000000000000000", + "0x379a7f755a81a17edb7daaa28afc665dfa6be63a": "25000000000000000000", + "0x260a230e4465077e0b14ee4442a482d5b0c914bf": "1677935000000000000000", + "0x3daa01ceb70eaf9591fa521ba4a27ea9fb8ede4a": "1667400000000000000000", + "0x7f3a1e45f67e92c880e573b43379d71ee089db54": "100000000000000000000000", + "0x38643babea6011316cc797d9b093c897a17bdae7": "334400000000000000000", + "0x84675e9177726d45eaa46b3992a340ba7f710c95": "1000000000000000000000", + "0x0f83461ba224bb1e8fdd9dae535172b735acb4e0": "200000000000000000000", + "0x31aa3b1ebe8c4dbcb6a708b1d74831e60e497660": "400000000000000000000", + "0xa32cf7dde20c3dd5679ff5e325845c70c5962662": "20000000000000000000", + "0xc007f0bdb6e7009202b7af3ea90902697c721413": "2999966000000000000000", + "0x05c64004a9a826e94e5e4ee267fa2a7632dd4e6f": "16191931000000000000000", + "0xf622e584a6623eaaf99f2be49e5380c5cbcf5cd8": "200000000000000000000", + "0x9dc10fa38f9fb06810e11f60173ec3d2fd6a751e": "1970000000000000000000", + "0x423c3107f4bace414e499c64390a51f74615ca5e": "2000000000000000000000", + "0x92438e5203b6346ff886d7c36288aacccc78ceca": "1000000000000000000000", + "0xbef07d97c3481f9d6aee1c98f9d91a180a32442b": "100000000000000000000000", + "0x55aa5d313ebb084da0e7801091e29e92c5dec3aa": "2000000000000000000000", + "0x89c433d601fad714da6369308fd26c1dc9942bbf": "2000000000000000000000", + "0x25106ab6755df86d6b63a187703b0cfea0e594a0": "27400000000000000000", + "0x494256e99b0f9cd6e5ebca3899863252900165c8": "14000000000000000000000", + "0x5f4ace4c1cc13391e01f00b198e1f20b5f91cbf5": "5000196000000000000000", + "0x135cecd955e5798370769230159303d9b1839f66": "5000000000000000000000", + "0xced81ec3533ff1bfebf3e3843ee740ad11758d3e": "1970000000000000000000", + "0x688eb3853bbcc50ecfee0fa87f0ab693cabdef02": "31600000000000000000000", + "0x2159240813a73095a7ebf7c3b3743e8028ae5f09": "2000000000000000000000", + "0x99d1579cd42682b7644e1d4f7128441eeffe339d": "20000000000000000000000", + "0x8a243a0a9fea49b839547745ff2d11af3f4b0522": "985000000000000000000", + "0xc1a41a5a27199226e4c7eb198b031b59196f9842": "191000000000000000000", + "0x7514adbdc63f483f304d8e94b67ff3309f180b82": "622911000000000000000", + "0x74aeec915de01cc69b2cb5a6356feea14658c6c5": "232500000000000000000", + "0x76f9ad3d9bbd04ae055c1477c0c35e7592cb2a20": "40200000000000000000000", + "0xa8a7b68adab4e3eadff19ffa58e34a3fcec0d96a": "6000000000000000000000", + "0x60de22a1507432a47b01cc68c52a0bf8a2e0d098": "19100000000000000000", + "0xceb33d78e7547a9da2e87d51aec5f3441c87923a": "20000000000000000000", + "0x432809a2390f07c665921ff37d547d12f1c9966a": "30000000000000000000000", + "0xd5e656a1b916f9bf45afb07dd8afaf73b4c56f41": "97000000000000000000", + "0xe3410bb7557cf91d79fa69d0dfea0aa075402651": "2000000000000000000000", + "0xdee942d5caf5fac11421d86b010b458e5c392990": "4000000000000000000000", + "0xa98f109835f5eacd0543647c34a6b269e3802fac": "400000000000000000000", + "0x932b9c04d40d2ac83083d94298169dae81ab2ed0": "2000000000000000000000", + "0xba10f2764290f875434372f79dbf713801caac01": "955000000000000000000", + "0xa2c7eaffdc2c9d937345206c909a52dfb14c478f": "143000000000000000000", + "0x6c67e0d7b62e2a08506945a5dfe38263339f1f22": "1970000000000000000000", + "0x60c3714fdddb634659e4a2b1ea42c4728cc7b8ba": "13370000000000000000", + "0x73b4d499de3f38bf35aaf769a6e318bc6d123692": "2000000000000000000000", + "0x3b22dea3c25f1b59c7bd27bb91d3a3eaecef3984": "100000000000000000000", + "0x1e3badb1b6e1380e27039c576ae6222e963a5b53": "20000000000000000000000", + "0xabd4d6c1666358c0406fdf3af248f78ece830104": "2112000000000000000000", + "0x0c925ad5eb352c8ef76d0c222d115b0791b962a1": "3180000000000000000000", + "0xbe9186c34a52514abb9107860f674f97b821bd5b": "509600000000000000000", + "0xb7f67314cb832e32e63b15a40ce0d7ffbdb26985": "1060866000000000000000", + "0x3f30d3bc9f602232bc724288ca46cd0b0788f715": "4000000000000000000000", + "0x970abd53a54fca4a6429207c182d4d57bb39d4a0": "2000000000000000000000", + "0x36d85dc3683156e63bf880a9fab7788cf8143a27": "20000000000000000000000", + "0x2836123046b284e5ef102bfd22b1765e508116ad": "411880000000000000000", + "0xde06d5ea777a4eb1475e605dbcbf43444e8037ea": "50000000000000000000000", + "0x9af11399511c213181bfda3a8b264c05fc81b3ce": "14000000000000000000000", + "0xe2191215983f33fd33e22cd4a2490054da53fddc": "15800000000000000000", + "0x2eebf59432b52892f9380bd140aa99dcf8ad0c0f": "152000000000000000000", + "0xdc087f9390fb9e976ac23ab689544a0942ec2021": "1820000000000000000000", + "0xfd4b989558ae11be0c3b36e2d6f2a54a9343ca2e": "2000000000000000000000", + "0x770c2fb2c4a81753ac0182ea460ec09c90a516f8": "20000000000000000000", + "0xb28dbfc6499894f73a71faa00abe0f4bc9d19f2a": "100000000000000000000", + "0xb0cef8e8fb8984a6019f01c679f272bbe68f5c77": "152000000000000000000", + "0xf400f93d5f5c7e3fc303129ac8fb0c2f786407fa": "2000000000000000000000", + "0xf2133431d1d9a37ba2f0762bc40c5acc8aa6978e": "2000000000000000000000", + "0x9003d270891ba2df643da8341583193545e3e000": "4000000000000000000000", + "0x8938d1b4daee55a54d738cf17e4477f6794e46f7": "18200000000000000000", + "0x98e6f547db88e75f1f9c8ac2c5cf1627ba580b3e": "1000000000000000000000", + "0x009fdbf44e1f4a6362b769c39a475f95a96c2bc7": "564000000000000000000", + "0xd0f9597811b0b992bb7d3757aa25b4c2561d32e2": "500000000000000000000", + "0xdcd10c55bb854f754434f1219c2c9a98ace79f03": "4000086000000000000000", + "0x67048f3a12a4dd1f626c64264cb1d7971de2ca38": "180000000000000000000", + "0xd33cf82bf14c592640a08608914c237079d5be34": "2000000000000000000000", + "0xf5b068989df29c253577d0405ade6e0e7528f89e": "1610000000000000000000", + "0xa9a8eca11a23d64689a2aa3e417dbb3d336bb59a": "262025000000000000000", + "0x99413704b1a32e70f3bc0d69dd881c38566b54cb": "27382708000000000000000", + "0x2a085e25b64862f5e68d768e2b0f7a8529858eee": "1983618000000000000000", + "0x833d3fae542ad5f8b50ce19bde2bec579180c88c": "346000000000000000000", + "0xc3483d6e88ac1f4ae73cc4408d6c03abe0e49dca": "17000000000000000000000", + "0xfde395bc0b6d5cbb4c1d8fea3e0b4bff635e9db7": "2000000000000000000000", + "0xeddacd94ec89a2ef968fcf977a08f1fae2757869": "8000000000000000000000", + "0xdc29119745d2337320da51e19100c948d980b915": "160000000000000000000", + "0x640bf87415e0cf407301e5599a68366da09bbac8": "493207000000000000000", + "0xafcc7dbb8356d842d43ae7e23c8422b022a30803": "30400000000000000000000", + "0x9120e71173e1ba19ba8f9f4fdbdcaa34e1d6bb78": "2000000000000000000000", + "0x9092918707c621fdbd1d90fb80eb787fd26f7350": "2460000000000000000000", + "0x263e57dacbe0149f82fe65a2664898866ff5b463": "38000000000000000000000", + "0x315db7439fa1d5b423afa7dd7198c1cf74c918bc": "600000000000000000000", + "0x09b4668696f86a080f8bebb91db8e6f87015915a": "656010000000000000000", + "0x5c31996dcac015f9be985b611f468730ef244d90": "200000000000000000000", + "0xb1179589e19db9d41557bbec1cb24ccc2dec1c7f": "100000000000000000000000", + "0x3b1937d5e793b89b63fb8eb5f1b1c9ca6ba0fa8e": "2000000000000000000000", + "0xc9127b7f6629ee13fc3f60bc2f4467a20745a762": "16465639000000000000000", + "0x7306de0e288b56cfdf987ef0d3cc29660793f6dd": "508060000000000000000", + "0x2aa192777ca5b978b6b2c2ff800ac1860f753f47": "335000000000000000000", + "0x55da9dcdca61cbfe1f133c7bcefc867b9c8122f9": "880000000000000000000", + "0xcdd9efac4d6d60bd71d95585dce5d59705c13564": "100000000000000000000", + "0xad8e48a377695de014363a523a28b1a40c78f208": "1000000000000000000000", + "0x252b6555afdc80f2d96d972d17db84ea5ad521ac": "7880000000000000000000", + "0x60ab71cd26ea6d6e59a7a0f627ee079c885ebbf6": "26740000000000000000", + "0xf40b134fea22c6b29c8457f49f000f9cda789adb": "600000000000000000000", + "0x85a2f6ea94d05e8c1d9ae2f4910338a358e98ded": "2000000000000000000000", + "0xae13a08511110f32e53be4127845c843a1a57c7b": "500000000000000000000", + "0x40db1ba585ce34531edec5494849391381e6ccd3": "1790000000000000000000", + "0x0c5589a7a89b9ad15b02751930415948a875fbef": "126000000000000000000", + "0x89054430dcdc28ac15fa635ef87c105e602bf70c": "108000000000000000000", + "0x6c882c27732cef5c7c13a686f0a2ea77555ac289": "100000000000000000000000", + "0xde374299c1d07d79537385190f442ef9ca24061f": "133700000000000000000", + "0xb146a0b925553cf06fcaf54a1b4dfea621290757": "2000200000000000000000", + "0x09ae49e37f121df5dc158cfde806f173a06b0c7f": "3988000000000000000000", + "0xb758896f1baa864f17ebed16d953886fee68aae6": "1000000000000000000000", + "0x30730466b8eb6dc90d5496aa76a3472d7dbe0bbe": "1999800000000000000000", + "0xfc02734033e57f70517e0afc7ee62461f06fad8e": "394000000000000000000", + "0xa9b2d2e0494eab18e07d37bbb856d80e80f84cd3": "10000000000000000000000", + "0x95278b08dee7c0f2c8c0f722f9fcbbb9a5241fda": "2408672000000000000000", + "0xdab6bcdb83cf24a0ae1cb21b3b5b83c2f3824927": "50000000000000000000000", + "0x94439ca9cc169a79d4a09cae5e67764a6f871a21": "240000000000000000000", + "0xe06c29a81517e0d487b67fb0b6aabc4f57368388": "401100000000000000000", + "0x458e3cc99e947844a18e6a42918fef7e7f5f5eb3": "36400000000000000000000", + "0x0a9804137803ba6868d93a55f9985fcd540451e4": "13370000000000000000", + "0x40630024bd2c58d248edd8465617b2bf1647da0e": "1000000000000000000000", + "0x15224ad1c0face46f9f556e4774a3025ad06bd52": "13370000000000000000", + "0x2e2810dee44ae4dff3d86342ab126657d653c336": "200000000000000000000", + "0x48a30de1c919d3fd3180e97d5f2b2a9dbd964d2d": "44000000000000000000", + "0x46a30b8a808931217445c3f5a93e882c0345b426": "250019000000000000000", + "0x455396a4bbd9bae8af9fb7c4d64d471db9c24505": "161000000000000000000", + "0xedfda2d5db98f9380714664d54b4ee971a1cae03": "40044000000000000000", + "0xf5eadcd2d1b8657a121f33c458a8b13e76b65526": "249828000000000000000", + "0x90e7070f4d033fe6910c9efe5a278e1fc6234def": "100392000000000000000", + "0xd55508adbbbe9be81b80f97a6ea89add68da674f": "2000000000000000000000", + "0x66925de3e43f4b41bf9dadde27d5488ef569ea0d": "39400000000000000000", + "0xb7c077946674ba9341fb4c747a5d50f5d2da6415": "1000000000000000000000", + "0xc52d1a0c73c2a1be84915185f8b34faa0adf1de3": "1400001000000000000000", + "0x79b8aad879dd30567e8778d2d231c8f37ab8734e": "2000000000000000000000", + "0x3aae4872fd9093cbcad1406f1e8078bab50359e2": "39400000000000000000", + "0xb2e9d76bf50fc36bf7d3944b63e9ca889b699968": "2660000000000000000000", + "0x405f596b94b947344c033ce2dcbff12e25b79784": "2000000000000000000000", + "0x232cb1cd49993c144a3f88b3611e233569a86bd6": "15576000000000000000000", + "0x9e232c08c14dc1a6ed0b8a3b2868977ba5c17d10": "20000000000000000000", + "0x095270cc42141dd998ad2862dbd1fe9b44e7e650": "1200000000000000000000", + "0x15d99468507aa0413fb60dca2adc7f569cb36b54": "2000000000000000000000", + "0x04852732b4c652f6c2e58eb36587e60a62da14db": "20000000000000000000000", + "0xecf24cdd7c22928c441e694de4aa31b0fab59778": "600000000000000000000", + "0x512b91bbfaa9e581ef683fc90d9db22a8f49f48b": "310000000000000000000000", + "0xa88577a073fbaf33c4cd202e00ea70ef711b4006": "2000000000000000000000", + "0x00acc6f082a442828764d11f58d6894ae408f073": "60000000000000000000000", + "0x0355bcacbd21441e95adeedc30c17218c8a408ce": "400000000000000000000", + "0x4e73cf2379f124860f73d6d91bf59acc5cfc845b": "40110000000000000000", + "0x2a742b8910941e0932830a1d9692cfd28494cf40": "499986000000000000000", + "0x41a8c2830081b102df6e0131657c07ab635b54ce": "1999944000000000000000", + "0xb63064bd3355e6e07e2d377024125a33776c4afa": "38800000000000000000000", + "0x1a25e1c5bc7e5f50ec16f8885f210ea1b938800e": "4000000000000000000000", + "0x09b59b8698a7fbd3d2f8c73a008988de3e406b2b": "40000000000000000000000", + "0xc555b93156f09101233c6f7cf6eb3c4f196d3346": "3000000000000000000000", + "0x12f32c0a1f2daab676fe69abd9e018352d4ccd45": "50000000000000000000", + "0x5956b28ec7890b76fc061a1feb52d82ae81fb635": "2000000000000000000000", + "0xc739259e7f85f2659bef5f609ed86b3d596c201e": "200000000000000000000", + "0xfae92c1370e9e1859a5df83b56d0f586aa3b404c": "106480000000000000000", + "0xd5a7bec332adde18b3104b5792546aa59b879b52": "2000000000000000000000", + "0x4f88dfd01091a45a9e2676021e64286cd36b8d34": "1000000000000000000000", + "0x102c477d69aadba9a0b0f62b7459e17fbb1c1561": "2000000000000000000000", + "0x34272d5e7574315dcae9abbd317bac90289d4765": "1820000000000000000000", + "0xfe615d975c0887e0c9113ec7298420a793af8b96": "8000000000000000000000", + "0x487adf7d70a6740f8d51cbdd68bb3f91c4a5ce68": "66850000000000000000", + "0x7e5d9993104e4cb545e179a2a3f971f744f98482": "2000000000000000000000", + "0x5529830a61c1f13c197e550beddfd6bd195c9d02": "10000000000000000000000", + "0x2f282abbb6d4a3c3cd3b5ca812f7643e80305f06": "1850000000000000000000", + "0x7352586d021ad0cf77e0e928404a59f374ff4582": "3400000000000000000000", + "0x03f7b92008813ae0a676eb212814afab35221069": "2000000000000000000000", + "0x056686078fb6bcf9ba0a8a8dc63a906f5feac0ea": "499800000000000000000", + "0x8063379a7bf2cb923a84c5093e68dac7f75481c5": "322102000000000000000", + "0x200264a09f8c68e3e6629795280f56254f8640d0": "20000000000000000000", + "0x5a891155f50e42074374c739baadf7df2651153a": "4775000000000000000000", + "0x80022a1207e910911fc92849b069ab0cdad043d3": "13370000000000000000", + "0xe781ec732d401202bb9bd13860910dd6c29ac0b6": "1240000000000000000000", + "0x4c2f1afef7c5868c44832fc77cb03b55f89e6d6e": "20000000000000000000000", + "0x34ff582952ff24458f7b13d51f0b4f987022c1fe": "2804400000000000000000", + "0x73914b22fc2f131584247d82be4fecbf978ad4ba": "2000000000000000000000", + "0x562be95aba17c5371fe2ba828799b1f55d2177d6": "38200000000000000000000", + "0x648f5bd2a2ae8902db37847d1cb0db9390b06248": "7769965000000000000000", + "0x6a9758743b603eea3aa0524b42889723c4153948": "10100000000000000000000", + "0x5985c59a449dfc5da787d8244e746c6d70caa55f": "100000000000000000000", + "0x56ee197f4bbf9f1b0662e41c2bbd9aa1f799e846": "1000000000000000000000", + "0xd47c242edffea091bc54d57df5d1fdb93101476c": "2914000000000000000000", + "0xd482e7f68e41f238fe517829de15477fe0f6dd1d": "500000000000000000000", + "0x05bf4fcfe772e45b826443852e6c351350ce72a2": "8000000000000000000000", + "0xf10462e58fcc07f39584a187639451167e859201": "169830000000000000000", + "0x1aa27699cada8dc3a76f7933aa66c71919040e88": "400000000000000000000", + "0x24046b91da9b61b629cb8b8ec0c351a07e0703e4": "2000000000000000000000", + "0x41033c1b6d05e1ca89b0948fc64453fbe87ab25e": "1337000000000000000000", + "0x369822f5578b40dd1f4471706b22cd971352da6b": "346000000000000000000", + "0x044e853144e3364495e7a69fa1d46abea3ac0964": "49225000000000000000", + "0xabf728cf9312f22128024e7046c251f5dc5901ed": "29550000000000000000000", + "0xd781f7fc09184611568570b4986e2c72872b7ed0": "20002000000000000000", + "0x6bb4a661a33a71d424d49bb5df28622ed4dffcf4": "630400000000000000000", + "0xfef3b3dead1a6926d49aa32b12c22af54d9ff985": "1000000000000000000000", + "0xfa410971ad229c3036f41acf852f2ac999281950": "3997400000000000000000", + "0xde176b5284bcee3a838ba24f67fc7cbf67d78ef6": "37600000000000000000", + "0x23120046f6832102a752a76656691c863e17e59c": "329800000000000000000", + "0xa2f472fe4f22b77db489219ea4023d11582a9329": "40000000000000000000000", + "0xf0d64cf9df09741133d170485fd24b005011d520": "498680000000000000000", + "0x8b505e2871f7deb7a63895208e8227dcaa1bff05": "61216600000000000000000", + "0x481e3a91bfdc2f1c8428a0119d03a41601417e1c": "1000000000000000000000", + "0xbc69a0d2a31c3dbf7a9122116901b2bdfe9802a0": "3000000000000000000000", + "0x20a81680e465f88790f0074f60b4f35f5d1e6aa5": "1279851000000000000000", + "0x194a6bb302b8aba7a5b579df93e0df1574967625": "500000000000000000000", + "0x264cc8086a8710f91b21720905912cd7964ae868": "26740000000000000000", + "0x24aca08d5be85ebb9f3132dfc1b620824edfedf9": "18200000000000000000", + "0x1851a063ccdb30549077f1d139e72de7971197d5": "2000000000000000000000", + "0xf64a4ac8d540a9289c68d960d5fb7cc45a77831c": "2000000000000000000000", + "0xc3db5657bb72f10d58f231fddf11980aff678693": "5910000000000000000000", + "0xb46ace865e2c50ea4698d216ab455dff5a11cd72": "1000000000000000000000", + "0x9faea13c733412dc4b490402bfef27a0397a9bc3": "310000000000000000000", + "0xb40594c4f3664ef849cca6227b8a25aa690925ee": "4000000000000000000000", + "0x672fa0a019088db3166f6119438d07a99f8ba224": "13370000000000000000000", + "0xc1ffad07db96138c4b2a530ec1c7de29b8a0592c": "17600000000000000000", + "0x87af25d3f6f8eea15313d5fe4557e810c524c083": "19700000000000000000000", + "0xd6a22e598dabd38ea6e958bd79d48ddd9604f4df": "1000000000000000000000", + "0xa2a435de44a01bd0ecb29e44e47644e46a0cdffb": "500171000000000000000", + "0x549b47649cfad993e4064d2636a4baa0623305cc": "601650000000000000000", + "0x1321b605026f4ffb296a3e0edcb390c9c85608b7": "2000000000000000000000", + "0xb4bf24cb83686bc469869fefb044b909716993e2": "2000000000000000000000", + "0x12d91a92d74fc861a729646db192a125b79f5374": "18200000000000000000", + "0x7f0662b410298c99f311d3a1454a1eedba2fea76": "200000000000000000000", + "0x83908aa7478a6d1c9b9b0281148f8f9f242b9fdc": "2000000000000000000000", + "0xc1438c99dd51ef1ca8386af0a317e9b041457888": "223500000000000000000", + "0x545bb070e781172eb1608af7fc2895d6cb87197e": "2244000000000000000000", + "0x161d26ef6759ba5b9f20fdcd66f16132c352415e": "2000000000000000000000", + "0xd7f370d4bed9d57c6f49c999de729ee569d3f4e4": "200000000000000000000", + "0x90e35aabb2deef408bb9b5acef714457dfde6272": "100076000000000000000", + "0x0fcfc4065008cfd323305f6286b57a4dd7eee23b": "20000000000000000000000", + "0xcd725d70be97e677e3c8e85c0b26ef31e9955045": "1337000000000000000000", + "0xdcf6b657266e91a4dae6033ddac15332dd8d2b34": "1760000000000000000000", + "0x31f006f3494ed6c16eb92aaf9044fa8abb5fd5a3": "500000000000000000000", + "0xcdea386f9d0fd804d02818f237b7d9fa7646d35e": "3012139000000000000000", + "0xd45b3341e8f15c80329320c3977e3b90e7826a7e": "500000000000000000000", + "0x0b649da3b96a102cdc6db652a0c07d65b1e443e6": "2000000000000000000000", + "0x0a58fddd71898de773a74fdae45e7bd84ef43646": "20000000000000000000", + "0x0256149f5b5063bea14e15661ffb58f9b459a957": "704000000000000000000", + "0x4438e880cb2766b0c1ceaec9d2418fceb952a044": "133712000000000000000", + "0x9ed80eda7f55054db9fb5282451688f26bb374c1": "300000000000000000000", + "0x8dab948ae81da301d972e3f617a912e5a753712e": "400000000000000000000", + "0x5b5d8c8eed6c85ac215661de026676823faa0a0c": "20000000000000000000000", + "0x46722a36a01e841d03f780935e917d85d5a67abd": "14900000000000000000", + "0xd4b8bdf3df9a51b0b91d16abbea05bb4783c8661": "1000000000000000000000", + "0x98f6b8e6213dbc9a5581f4cce6655f95252bdb07": "319968000000000000000", + "0x3599493ce65772cf93e98af1195ec0955dc98002": "1500048000000000000000", + "0xecab5aba5b828de1705381f38bc744b32ba1b437": "940000000000000000000", + "0x9a82826d3c29481dcc2bd2950047e8b60486c338": "20000000000000000000000", + "0x6c474bc66a54780066aa4f512eefa773abf919c7": "94000000000000000000", + "0xd5903e9978ee20a38c3f498d63d57f31a39f6a06": "10380000000000000000000", + "0x341480cc8cb476f8d01ff30812e7c70e05afaf5d": "2000000000000000000000", + "0xaf771039345a343001bc0f8a5923b126b60d509c": "985000000000000000000", + "0xb5a4679685fa14196c2e9230c8c4e33bffbc10e2": "1400000000000000000000", + "0x2a400dff8594de7228b4fd15c32322b75bb87da8": "95810000000000000000", + "0xa1336dfb96b6bcbe4b3edf3205be5723c90fad52": "5000000000000000000000", + "0xe9b1f1fca3fa47269f21b061c353b7f5e96d905a": "500000000000000000000", + "0x0ee414940487fd24e390378285c5d7b9334d8b65": "2680000000000000000000", + "0x6ab5b4c41cddb829690c2fda7f20c85e629dd5d5": "1860000000000000000000", + "0xdd63042f25ed32884ad26e3ad959eb94ea36bf67": "21340000000000000000000", + "0xc0b3f244bca7b7de5b48a53edb9cbeab0b6d88c0": "5820000000000000000000", + "0xed1a5c43c574d4e934299b24f1472cdc9fd6f010": "200000000000000000000", + "0xb2d9ab9664bcf6df203c346fc692fd9cbab9205e": "438000000000000000000", + "0xede8c2cb876fbe8a4cca8290361a7ea01a69fdf8": "7813091000000000000000", + "0x6a7c252042e7468a3ff773d6450bba85efa26391": "500000000000000000000", + "0xa106e6923edd53ca8ed650968a9108d6ccfd9670": "9499935000000000000000", + "0x031e25db516b0f099faebfd94f890cf96660836b": "2000000000000000000000", + "0x7fdbc3a844e40d96b2f3a635322e6065f4ca0e84": "2000000000000000000000", + "0xdf47a61b72535193c561cccc75c3f3ce0804a20e": "398000000000000000000", + "0xed31305c319f9273d3936d8f5b2f71e9b1b22963": "100000000000000000000", + "0xa6b2d573297360102c07a18fc21df2e7499ff4eb": "4011000000000000000000", + "0xf68464bf64f2411356e4d3250efefe5c50a5f65b": "20000000000000000000", + "0x927cc2bfda0e088d02eff70b38b08aa53cc30941": "1852700000000000000000", + "0x41cb9896445f70a10a14215296daf614e32cf4d5": "1910000000000000000000", + "0x3ad70243d88bf0400f57c8c1fd57811848af162a": "860000000000000000000", + "0x63b9754d75d12d384039ec69063c0be210d5e0e3": "2694055000000000000000", + "0xad1799aad7602b4540cd832f9db5f11150f1687a": "2000000000000000000000", + "0xa8b65ba3171a3f77a6350b9daf1f8d55b4d201eb": "745000000000000000000", + "0xad0a4ae478e9636e88c604f242cf5439c6d45639": "3520000000000000000000", + "0x4cd0b0a6436362595ceade052ebc9b929fb6c6c0": "2000000000000000000000", + "0xc1d4af38e9ba799040894849b8a8219375f1ac78": "20000000000000000000000", + "0x49ddee902e1d0c99d1b11af3cc8a96f78e4dcf1a": "199358000000000000000", + "0xae842210f44d14c4a4db91fc9d3b3b50014f7bf7": "4000000000000000000000", + "0x10a1c42dc1ba746986b985a522a73c93eae64c63": "1000000000000000000000", + "0x5103bc09933e9921fd53dc536f11f05d0d47107d": "4000000000000000000000", + "0xc88eec54d305c928cc2848c2fee23531acb96d49": "1999946000000000000000", + "0x9a2ce43b5d89d6936b8e8c354791b8afff962425": "2000000000000000000000", + "0x562020e3ed792d2f1835fe5f55417d5111460c6a": "20000000000000000000000", + "0xed16ce39feef3bd7f5d162045e0f67c0f00046bb": "20000000000000000000", + "0xab948a4ae3795cbca13126e19253bdc21d3a8514": "200000000000000000000", + "0xc12b7f40df9a2f7bf983661422ab84c9c1f50858": "8000000000000000000000", + "0x62e6b2f5eb94fa7a43831fc87e254a3fe3bf8f89": "250000000000000000000", + "0x423bca47abc00c7057e3ad34fca63e375fbd8b4a": "18000000000000000000000", + "0x5ff326cd60fd136b245e29e9087a6ad3a6527f0d": "1880000000000000000000", + "0x79ffb4ac13812a0b78c4a37b8275223e176bfda5": "17300000000000000000", + "0xf757fc8720d3c4fa5277075e60bd5c411aebd977": "2000000000000000000000", + "0x0bdbc54cc8bdbbb402a08911e2232a5460ce866b": "3000000000000000000000", + "0x9ee9760cc273d4706aa08375c3e46fa230aff3d5": "8950000000000000000000", + "0xd23a24d7f9468343c143a41d73b88f7cbe63be5e": "200000000000000000000", + "0x46d80631284203f6288ecd4e5758bb9d41d05dbe": "2000000000000000000000", + "0x3f4cd1399f8a34eddb9a17a471fc922b5870aafc": "200000000000000000000", + "0x44c54eaa8ac940f9e80f1e74e82fc14f1676856a": "7880000000000000000000", + "0xaec27ff5d7f9ddda91183f46f9d52543b6cd2b2f": "450000000000000000000", + "0x203c6283f20df7bc86542fdfb4e763ecdbbbeef5": "25000000000000000000000", + "0xbcaf347918efb2d63dde03e39275bbe97d26df50": "100000000000000000000", + "0x974d0541ab4a47ec7f75369c0069b64a1b817710": "400000000000000000000", + "0x5da54785c9bd30575c89deb59d2041d20a39e17b": "1967031000000000000000", + "0x1fb463a0389983df7d593f7bdd6d78497fed8879": "20000000000000000000", + "0x6e1ea4b183e252c9bb7767a006d4b43696cb8ae9": "294245000000000000000", + "0xc2aa74847e86edfdd3f3db22f8a2152feee5b7f7": "2048852000000000000000", + "0xa13b9d82a99b3c9bba5ae72ef2199edc7d3bb36c": "1999944000000000000000", + "0x5135fb8757600cf474546252f74dc0746d06262c": "2000000000000000000000", + "0x43e7ec846358d7d0f937ad1c350ba069d7bf72bf": "118800000000000000000", + "0xf2ed3e77254acb83231dc0860e1a11242ba627db": "1980000000000000000000", + "0xc0a02ab94ebe56d045b41b629b98462e3a024a93": "100000000000000000000", + "0xf21549bdd1487912f900a7523db5f7626121bba3": "10000000000000000000000", + "0x886d0a9e17c9c095af2ea2358b89ec705212ee94": "28000000000000000000", + "0x211b29cefc79ae976744fdebcebd3cbb32c51303": "14000000000000000000000", + "0xb8c2703d8c3f2f44c584bc10e7c0a6b64c1c097e": "5550000000000000000000", + "0xec30addd895b82ee319e54fb04cb2bb03971f36b": "2000000000000000000000", + "0xb71b62f4b448c02b1201cb5e394ae627b0a560ee": "500000000000000000000", + "0xe1334e998379dfe983177062791b90f80ee22d8d": "500000000000000000000", + "0x1d633097a85225a1ff4321b12988fdd55c2b3844": "4000000000000000000000", + "0x8bd8d4c4e943f6c8073921dc17e3e8d7a0761627": "2933330000000000000000", + "0xa5d96e697d46358d119af7819dc7087f6ae47fef": "14605131000000000000000", + "0xd0809498c548047a1e2a2aa6a29cd61a0ee268bd": "2000000000000000000000", + "0x3cd6b7593cbee77830a8b19d0801958fcd4bc57a": "500000000000000000000", + "0xead4d2eefb76abae5533961edd11400406b298fc": "3880000000000000000000", + "0x6331028cbb5a21485bc51b565142993bdb2582a9": "534800000000000000000", + "0x163bad4a122b457d64e8150a413eae4d07023e6b": "18800000000000000000", + "0xc522e20fbf04ed7f6b05a37b4718d6fce0142e1a": "4000000000000000000000", + "0x2d9bad6f1ee02a70f1f13def5cccb27a9a274031": "1790000000000000000000", + "0x5ed0d6338559ef44dc7a61edeb893fa5d83fa1b5": "220000000000000000000", + "0xec8c1d7b6aaccd429db3a91ee4c9eb1ca4f6f73c": "4250000000000000000000", + "0x3896ad743579d38e2302454d1fb6e2ab69e01bfd": "1880000000000000000000", + "0xe73ccf436725c151e255ccf5210cfce5a43f13e3": "19982000000000000000", + "0x9483d98f14a33fdc118d403955c29935edfc5f70": "459600000000000000000", + "0x1cfcf7517f0c08459720942b647ad192aa9c8828": "800000000000000000000", + "0x8d378f0edc0bb0f0686d6a20be6a7692c4fa24b8": "100000000000000000000", + "0x06f68de3d739db41121eacf779aada3de8762107": "28000000000000000000", + "0x9909650dd5b1397b8b8b0eb69499b291b0ad1213": "200000000000000000000", + "0xb66675142e3111a1c2ea1eb2419cfa42aaf7a234": "1000000000000000000000", + "0x7836f7ef6bc7bd0ff3acaf449c84dd6b1e2c939f": "4142296000000000000000", + "0x3ddedbe48923fbf9e536bf9ffb0747c9cdd39eef": "16100000000000000000000", + "0xc47d610b399250f70ecf1389bab6292c91264f23": "288800000000000000000", + "0x51a6d627f66a8923d88d6094c4715380d3057cb6": "1152044000000000000000", + "0x6c0cc917cbee7d7c099763f14e64df7d34e2bf09": "250000000000000000000", + "0xaaaae68b321402c8ebc13468f341c63c0cf03fce": "1520000000000000000000", + "0x819cdaa5303678ef7cec59d48c82163acc60b952": "14523448000000000000000", + "0xd071192966eb69c3520fca3aa4dd04297ea04b4e": "110000000000000000000", + "0xe53425d8df1f11c341ff58ae5f1438abf1ca53cf": "322000000000000000000", + "0x8ffe322997b8e404422d19c54aadb18f5bc8e9b7": "3940000000000000000000", + "0x305f78d618b990b4295bac8a2dfa262884f804ea": "4000000000000000000000", + "0x274d69170fe7141401882b886ac4618c6ae40edb": "955000000000000000000", + "0x69c94e07c4a9be3384d95dfa3cb9290051873b7b": "70000000000000000000", + "0x859c600cf13d1d0273d5d1da3cd789e495899f27": "2674000000000000000000", + "0xc06cebbbf7f5149a66f7eb976b3e47d56516da2f": "2000000000000000000000", + "0x37bbc47212d82fcb5ee08f5225ecc2041ad2da7d": "3280000000000000000000", + "0x11e7997edd904503d77da6038ab0a4c834bbd563": "388000000000000000000", + "0xd333627445f2d787901ef33bb2a8a3675e27ffec": "400000000000000000000", + "0x16a58e985dccd707a594d193e7cca78b5d027849": "1360000000000000000000", + "0xf8ae857b67a4a2893a3fbe7c7a87ff1c01c6a6e7": "4000000000000000000000", + "0x491561db8b6fafb9007e62d050c282e92c4b6bc8": "30000000000000000000000", + "0x21df1ec24b4e4bfe79b0c095cebae198f291fbd1": "20000000000000000000000", + "0xe208812a684098f3da4efe6aba256256adfe3fe6": "2000000000000000000000", + "0xf4ec8e97a20aa5f8dd206f55207e06b813df2cc0": "200000000000000000000", + "0x29eb7eefdae9feb449c63ff5f279d67510eb1422": "19400000000000000000", + "0x0d678706d037187f3e22e6f69b99a592d11ebc59": "1580000000000000000000", + "0xde6d363106cc6238d2f092f0f0372136d1cd50c6": "5348000000000000000000", + "0xc8710d7e8b5a3bd69a42fe0fa8b87c357fddcdc8": "4000000000000000000000", + "0x5267f4d41292f370863c90d793296903843625c7": "1400000000000000000000", + "0x4cda41dd533991290794e22ae324143e309b3d3d": "2400000000000000000000", + "0xf8a50cee2e688ceee3aca4d4a29725d4072cc483": "2000000000000000000000", + "0x5ed3bbc05240e0d399eb6ddfe60f62de4d9509af": "193999806000000000000000", + "0x0befb54707f61b2c9fb04715ab026e1bb72042bd": "4000000000000000000000", + "0xcab9a301e6bd46e940355028eccd40ce4d5a1ac3": "400000000000000000000", + "0x64672da3ab052821a0243d1ce4b6e0a36517b8eb": "200000000000000000000", + "0xeac0827eff0c6e3ff28a7d4a54f65cb7689d7b99": "2856500000000000000000", + "0xf4b6cdcfcb24230b337d770df6034dfbd4e1503f": "19000000000000000000000", + "0x7be2f7680c802da6154c92c0194ae732517a7169": "18200000000000000000", + "0x869f1aa30e4455beb1822091de5cadec79a8f946": "8000000000000000000000", + "0xc4681e73bb0e32f6b726204831ff69baa4877e32": "1820000000000000000000", + "0x962cd22a8edf1e4f4e55b4b15ddbfb5d9d541971": "2000000000000000000000", + "0x131df8d330eb7cc7147d0a55576f05de8d26a8b7": "188000000000000000000", + "0x19f99f2c0b46ce8906875dc9f90ae104dae35594": "4507300000000000000000", + "0x91bb3f79022bf3c453f4ff256e269b15cf2c9cbd": "1519000000000000000000", + "0x7301dc4cf26d7186f2a11bf8b08bf229463f64a3": "2000000000000000000000", + "0x7cbca88fca6a0060b960985c9aa1b02534dc2208": "462500000000000000000", + "0xf3c1abd29dc57b41dc192d0e384d021df0b4f6d4": "2798000000000000000000", + "0x5d32f6f86e787ff78e63d78b0ef95fe6071852b8": "401100000000000000000", + "0x1678c5f2a522393225196361894f53cc752fe2f3": "1936000000000000000000", + "0x1cf04cb14380059efd3f238b65d5beb86afa14d8": "20000000000000000000", + "0x52e1731350f983cc2c4189842fde0613fad50ce1": "11640000000000000000000", + "0xd0b11d6f2bce945e0c6a5020c3b52753f803f9d1": "200000000000000000000", + "0x409bd75085821c1de70cdc3b11ffc3d923c74010": "4000000000000000000000", + "0x0bb7160aba293762f8734f3e0326ffc9a4cac190": "1000000000000000000000", + "0x7aad4dbcd3acf997df93586956f72b64d8ad94ee": "4000000000000000000000", + "0x2dec98329d1f96c3a59caa7981755452d4da49d5": "200000000000000000000", + "0xc18ab467feb5a0aadfff91230ff056464d78d800": "2000000000000000000000", + "0xc90c3765156bca8e4897ab802419153cbe5225a9": "200000000000000000000", + "0x85c8f3cc7a354feac99a5e7bfe7cdfa351cfe355": "400000000000000000000", + "0xf4fc4d39bc0c2c4068a36de50e4ab4d4db7e340a": "25380000000000000000", + "0xf50abbd4aa45d3eb88515465a8ba0b310fd9b521": "6685000000000000000000", + "0x4d200110124008d56f76981256420c946a6ff45c": "199955000000000000000", + "0xf4ba6a46d55140c439cbcf076cc657136262f4f8": "2000000000000000000000", + "0xfa7adf660b8d99ce15933d7c5f072f3cbeb99d33": "5910000000000000000000", + "0x84503334630d77f74147f68b2e086613c8f1ade9": "1600000000000000000000", + "0x31ed858788bda4d5270992221cc04206ec62610d": "1176000000000000000000", + "0xbfbca418d3529cb393081062032a6e1183c6b2dc": "8000000000000000000000", + "0x8263ece5d709e0d7ae71cca868ed37cd2fef807b": "990000000000000000000", + "0x23ba3864da583dab56f420873c37679690e02f00": "9800000000000000000000", + "0xcedcb3a1d6843fb6bef643617deaf38f8e98dd5f": "477500000000000000000", + "0x8fac748f784a0fed68dba43319b42a75b4649c6e": "910000000000000000000", + "0x18b8bcf98321da61fb4e3eacc1ec5417272dc27e": "880000000000000000000", + "0x776943ffb2ef5cdd35b83c28bc046bd4f4677098": "3000000000000000000000", + "0xfb8113f94d9173eefd5a3073f516803a10b286ae": "80000000000000000000", + "0x3e8349b67f5745449f659367d9ad4712db5b895a": "1820000000000000000000", + "0x79cfa9780ae6d87b2c31883f09276986c89a6735": "1000000000000000000000", + "0x5006fe4c22173980f00c74342b39cd231c653129": "2000000000000000000000", + "0x13848b46ea75beb7eaa85f59d866d77fd24cf21a": "50000000000000000000000", + "0xd64a2d50f8858537188a24e0f50df1681ab07ed7": "38800000000000000000000", + "0x4f9ce2af9b8c5e42c6808a3870ec576f313545d1": "10000000000000000000000", + "0x8764d02722000996ecd475b433298e9f540b05bf": "200000000000000000000", + "0x3b7c77dbe95dc2602ce3269a9545d04965fefdbd": "2000000000000000000000", + "0xc9dcbb056f4db7d9da39936202c5bd8230b3b477": "20000000000000000000000", + "0x9ecbabb0b22782b3754429e1757aaba04b81189f": "823743000000000000000", + "0x831c44b3084047184b2ad218680640903750c45d": "1970000000000000000000", + "0xff8eb07de3d49d9d52bbe8e5b26dbe1d160fa834": "3986000000000000000000", + "0x8ccf3aa21ab742576ad8c422f71bb188591dea8a": "1000000000000000000000", + "0xddac312a9655426a9c0c9efa3fd82559ef4505bf": "401100000000000000000", + "0x9a3e2b1bf346dd070b027357feac44a4b2c97db8": "10000000000000000000000", + "0x69d39d510889e552a396135bfcdb06e37e387633": "4000000000000000000000", + "0x83a3148833d9644984f7c475a7850716efb480ff": "3400000000000000000000", + "0x62b4a9226e61683c72c183254690daf511b4117a": "260000000000000000000", + "0x50763add868fd7361178342fc055eaa2b95f6846": "66838000000000000000", + "0x91898eab8c05c0222883cd4db23b7795e1a24ad7": "2000000000000000000000", + "0x066647cfc85d23d37605573d208ca154b244d76c": "10000000000000000000000", + "0xaaf9ee4b886c6d1e95496fd274235bf4ecfcb07d": "1400000000000000000000", + "0x06860a93525955ff624940fadcffb8e149fd599c": "1999800000000000000000", + "0xe81c2d346c0adf4cc56708f6394ba6c8c8a64a1e": "2000000000000000000000", + "0x41a8e236a30e6d63c1ff644d132aa25c89537e01": "20000000000000000000", + "0x6a679e378fdce6bfd97fe62f043c6f6405d79e99": "4000000000000000000000", + "0x933436c8472655f64c3afaaf7c4c621c83a62b38": "1000000000000000000000", + "0xabe07ced6ac5ddf991eff6c3da226a741bd243fe": "10000000000000000000000", + "0xbb56a404723cff20d0685488b05a02cdc35aacaa": "20000000000000000000", + "0x0d551ec1a2133c981d5fc6a8c8173f9e7c4f47af": "2000000000000000000000", + "0x23376ecabf746ce53321cf42c86649b92b67b2ff": "2000000000000000000000", + "0x644ba6c61082e989109f5c11d4b40e991660d403": "4000000000000000000000", + "0x680d5911ed8dd9eec45c060c223f89a7f620bbd5": "20000000000000000000000", + "0xcb1bb6f1da5eb10d4899f7e61d06c1b00fdfb52d": "1038000000000000000000", + "0x303a30ac4286ae17cf483dad7b870c6bd64d7b4a": "500000000000000000000", + "0x7b0b31ff6e24745ead8ed9bb85fc0bf2fe1d55d4": "800000000000000000000", + "0x854691ce714f325ced55ce5928ce9ba12facd1b8": "4380000000000000000000", + "0xa13cfe826d6d1841dcae443be8c387518136b5e8": "140000000000000000000000", + "0x5fcd84546896dd081db1a320bd4d8c1dd1528c4c": "20000000000000000000", + "0x3db5fe6a68bd3612ac15a99a61e555928eeceaf3": "1580000000000000000000", + "0x7a79e30ff057f70a3d0191f7f53f761537af7dff": "400000000000000000000", + "0x3d3fad49c9e5d2759c8e8e5a7a4d60a0dd135692": "20000000000000000000", + "0x05a830724302bc0f6ebdaa1ebeeeb46e6ce00b39": "98500000000000000000", + "0xe4b6ae22c7735f5b89f34dd77ad0975f0acc9181": "1000000000000000000000", + "0x3f2dd55db7eab0ebee65b33ed8202c1e992e958b": "820000000000000000000", + "0x395d6d255520a8db29abc47d83a5db8a1a7df087": "100000000000000000000", + "0x1cc90876004109cd79a3dea866cb840ac364ba1b": "2000000000000000000000", + "0xc83e9d6a58253beebeb793e6f28b054a58491b74": "281800000000000000000", + "0x901d99b699e5c6911519cb2076b4c76330c54d22": "2000000000000000000000", + "0x3a9132b7093d3ec42e1e4fb8cb31ecdd43ae773c": "2000000000000000000000", + "0xb41eaf5d51a5ba1ba39bb418dbb54fab750efb1f": "1000000000000000000000", + "0xaa493d3f4fb866491cf8f800efb7e2324ed7cfe5": "1700000000000000000000", + "0x509982f56237ee458951047e0a2230f804e2e895": "17500000000000000000000", + "0x316e92a91bbda68b9e2f98b3c048934e3cc0b416": "2000000000000000000000", + "0xa3430e1f647f321ed34739562323c7d623410b56": "999942000000000000000", + "0xfca43bbc23a0d321ba9e46b929735ce7d8ef0c18": "20000000000000000000", + "0xff45cb34c928364d9cc9d8bb00373474618f06f3": "100000000000000000000", + "0x8c999591fd72ef7111efca7a9e97a2356b3b000a": "4084000000000000000000", + "0x8579dadf1a395a3471e20b6f763d9a0ff19a3f6f": "4000000000000000000000", + "0xc8d4e1599d03b79809e0130a8dc38408f05e8cd3": "2945500000000000000000", + "0x2abce1808940cd4ef5b5e05285f82df7a9ab5e03": "9800000000000000000000", + "0x0bb0c12682a2f15c9b5741b2385cbe41f034068e": "1500000000000000000000", + "0x08b7bdcf944d5570838be70460243a8694485858": "2000000000000000000000", + "0xc452e0e4b3d6ae06b836f032ca09db409ddfe0fb": "800000000000000000000", + "0x48d4f2468f963fd79a006198bb67895d2d5aa4d3": "1400000000000000000000", + "0xf9e7222faaf0f4da40c1c4a40630373a09bed7b6": "2865000000000000000000", + "0xbf59aee281fa43fe97194351a9857e01a3b897b2": "600000000000000000000", + "0xda0d4b7ef91fb55ad265f251142067f10376ced6": "20000000000000000000000", + "0x2c6f5c124cc789f8bb398e3f889751bc4b602d9e": "24928000000000000000", + "0xc85ef27d820403805fc9ed259fff64acb8d6346a": "2000000000000000000000", + "0x9aa8308f42910e5ade09c1a5e282d6d91710bdbf": "200000000000000000000", + "0x9e4cec353ac3e381835e3c0991f8faa5b7d0a8e6": "9999917000000000000000", + "0x137cf341e8516c815814ebcd73e6569af14cf7bc": "1000000000000000000000", + "0x889da662eb4a0a2a069d2bc24b05b4ee2e92c41b": "1663417000000000000000", + "0x0998d8273115b56af43c505e087aff0676ed3659": "3999984000000000000000", + "0x3e4d13c55a84e46ed7e9cb90fd355e8ad991e38f": "1000000000000000000000", + "0xabc068b4979b0ea64a62d3b7aa897d73810dc533": "1970000000000000000000", + "0xd8fdf546674738c984d8fab857880b3e4280c09e": "20000000000000000000", + "0xaff161740a6d909fe99c59a9b77945c91cc91448": "60000000000000000000", + "0x92ad1b3d75fba67d54663da9fc848a8ade10fa67": "2000000000000000000000", + "0x819eb4990b5aba5547093da12b6b3c1093df6d46": "1000000000000000000000", + "0x643d9aeed4b180947ed2b9207cce4c3ddc55e1f7": "200000000000000000000", + "0xab3e62e77a8b225e411592b1af300752fe412463": "9850000000000000000000", + "0x650b425555e4e4c51718146836a2c1ee77a5b421": "20000000000000000000000", + "0xba8e46d69d2e2343d86c60d82cf42c2041a0c1c2": "100000000000000000000", + "0xf9570e924c95debb7061369792cf2efec2a82d5e": "20000000000000000000", + "0x4dc4bf5e7589c47b28378d7503cf96488061dbbd": "1760000000000000000000", + "0x3d7ea5bf03528100ed8af8aed2653e921b6e6725": "1000000000000000000000", + "0xa02bde6461686e19ac650c970d0672e76dcb4fc2": "8865000000000000000000", + "0xb0e760bb07c081777345e0578e8bc898226d4e3b": "2000000000000000000000", + "0x979cbf21dfec8ace3f1c196d82df962534df394f": "2832860000000000000000", + "0x9f8245c3ab7d173164861cd3991b94f1ba40a93a": "2860000000000000000000", + "0xc25cf826550c8eaf10af2234fef904ddb95213be": "1000000000000000000000", + "0x967bfaf76243cdb9403c67d2ceefdee90a3feb73": "970582000000000000000", + "0x0b2113504534642a1daf102eee10b9ebde76e261": "2733351000000000000000", + "0x74bc4a5e2045f4ff8db184cf3a9b0c065ad807d2": "2000000000000000000000", + "0xf1da40736f99d5df3b068a5d745fafc6463fc9b1": "121546000000000000000", + "0x0fa6c7b0973d0bae2940540e247d3627e37ca347": "1000000000000000000000", + "0x72b05962fb2ad589d65ad16a22559eba1458f387": "133700000000000000000", + "0x6ceae3733d8fa43d6cd80c1a96e8eb93109c83b7": "298000000000000000000", + "0x28eaea78cd4d95faecfb68836eafe83520f3bbb7": "200000000000000000000", + "0xf49f6f9baabc018c8f8e119e0115f491fc92a8a4": "10000000000000000000000", + "0x833316985d47742bfed410604a91953c05fb12b0": "2000000000000000000000", + "0xead75016e3a0815072b6b108bcc1b799acf0383e": "2000000000000000000000", + "0x0032403587947b9f15622a68d104d54d33dbd1cd": "77500000000000000000", + "0x8f64b9c1246d857831643107d355b5c75fef5d4f": "1999944000000000000000", + "0x15dcafcc2bace7b55b54c01a1c514626bf61ebd8": "9400000000000000000000", + "0x6886ada7bbb0617bda842191c68c922ea3a8ac82": "1160000000000000000000", + "0xf736dc96760012388fe88b66c06efe57e0d7cf0a": "2100000000000000000000", + "0x0b288a5a8b75f3dc4191eb0457e1c83dbd204d25": "4853000000000000000000", + "0x56b6c23dd2ec90b4728f3bb2e764c3c50c85f144": "1000000000000000000000", + "0x6310b020fd98044957995092090f17f04e52cdfd": "1580000000000000000000", + "0xb0baeb30e313776c4c6d247402ba4167afcda1cc": "1970000000000000000000", + "0x7641f7d26a86cddb2be13081810e01c9c83c4b20": "13370000000000000000", + "0x07a8dadec142571a7d53a4297051786d072cba55": "22729000000000000000", + "0xcc73dd356b4979b579b401d4cc7a31a268ddce5a": "500000000000000000000", + "0xadf1acfe99bc8c14b304c8d905ba27657b8a7bc4": "20000000000000000000000", + "0x72dabb5b6eed9e99be915888f6568056381608f8": "208433000000000000000", + "0x9de20ae76aa08263b205d5142461961e2408d266": "252000000000000000000", + "0x9d4ff989b7bed9ab109d10c8c7e55f02d76734ad": "1000000000000000000000", + "0xe58dd23238ee6ea7c2138d385df500c325f376be": "1820000000000000000000", + "0x4bd6dd0cff23400e1730ba7b894504577d14e74a": "206028000000000000000000", + "0x35147430c3106500e79fa2f502462e94703c23b1": "1999944000000000000000", + "0xc0ae14d724832e2fce2778de7f7b8daf7b12a93e": "20000000000000000000", + "0xb57413060af3f14eb479065f1e9d19b3757ae8cc": "40000000000000000000", + "0x7d04d2edc058a1afc761d9c99ae4fc5c85d4c8a6": "314807840000000000000000", + "0x1c94d636e684eb155895ce6db4a2588fba1d001b": "2000000000000000000000", + "0xc721b2a7aa44c21298e85039d00e2e460e670b9c": "140800000000000000000", + "0x2d89a8006a4f137a20dc2bec46fe2eb312ea9654": "200000000000000000000", + "0x646afba71d849e80c0ed59cac519b278e7f7abe4": "1000000000000000000000", + "0x71f2cdd1b046e2da2fbb5a26723422b8325e25a3": "99960000000000000000", + "0x2c9fa72c95f37d08e9a36009e7a4b07f29bad41a": "16100000000000000000", + "0x848fbd29d67cf4a013cb02a4b176ef244e9ee68d": "20116000000000000000", + "0x68190ca885da4231874c1cfb42b1580a21737f38": "3820000000000000000000", + "0x9adf458bff3599eee1a26398853c575bc38c6313": "280000000000000000000", + "0xb72220ade364d0369f2d2da783ca474d7b9b34ce": "499986000000000000000", + "0x38e2af73393ea98a1d993a74df5cd754b98d529a": "1790000000000000000000", + "0x4d38d90f83f4515c03cc78326a154d358bd882b7": "185000000000000000000", + "0xaa8eb0823b07b0e6d20aadda0e95cf3835be192e": "32000000000000000000", + "0x008639dabbe3aeac887b5dc0e43e13bcd287d76c": "310200000000000000000", + "0xfa3a0c4b903f6ea52ea7ab7b8863b6a616ad6650": "20000000000000000000", + "0xe26bf322774e18288769d67e3107deb7447707b8": "2000000000000000000000", + "0xe061a4f2fc77b296d19ada238e49a5cb8ecbfa70": "4000000000000000000000", + "0xb320834836d1dbfda9e7a3184d1ad1fd4320ccc0": "1000000000000000000000", + "0x0ed3bb3a4eb554cfca97947d575507cdfd6d21d8": "547863000000000000000", + "0x32fa0e86cd087dd68d693190f32d93310909ed53": "4000000000000000000000", + "0x5b759fa110a31c88469f54d44ba303d57dd3e10f": "1683760000000000000000", + "0x136f4907cab41e27084b9845069ff2fd0c9ade79": "4000000000000000000000", + "0x3d89e505cb46e211a53f32f167a877bec87f4b0a": "25019000000000000000", + "0x57a852fdb9b1405bf53ccf9508f83299d3206c52": "2000000000000000000000", + "0x747abc9649056d3926044d28c3ad09ed17b67d70": "5000057000000000000000", + "0x5c29f9e9a523c1f8669448b55c48cbd47c25e610": "964320000000000000000", + "0x30a9da72574c51e7ee0904ba1f73a6b7b83b9b9d": "20200000000000000000", + "0x220e2b92c0f6c902b513d9f1e6fab6a8b0def3d7": "800000000000000000000", + "0x5af7c072b2c5acd71c76addcce535cf7f8f93585": "20000000000000000000", + "0x81556db27349ab8b27004944ed50a46e941a0f5f": "3998000000000000000000", + "0x987618c85656207c7bac1507c0ffefa2fb64b092": "64419000000000000000", + "0xe0f372347c96b55f7d4306034beb83266fd90966": "400000000000000000000", + "0x71784c105117c1f68935797fe159abc74e43d16a": "2001600000000000000000", + "0x9284f96ddb47b5186ee558aa31324df5361c0f73": "16000000000000000000000", + "0xa60c1209754f5d87b181da4f0817a81859ef9fd8": "50000000000000000000", + "0x5afda9405c8e9736514574da928de67456010918": "6008500000000000000000", + "0x6978696d5150a9a263513f8f74c696f8b1397cab": "6640000000000000000000", + "0xa9ad1926bc66bdb331588ea8193788534d982c98": "30000000000000000000000", + "0xe3f80b40fb83fb97bb0d5230af4f6ed59b1c7cc8": "1337000000000000000000", + "0xe207578e1f4ddb8ff6d5867b39582d71b9812ac5": "3880000000000000000000", + "0x86883d54cd3915e549095530f9ab1805e8c5432d": "4000000000000000000000", + "0x6974c8a414ceaefd3c2e4dfdbef430568d9a960b": "334250000000000000000", + "0x532d32b00f305bcc24dcef56817d622f34fb2c24": "1800000000000000000000", + "0x761f8a3a2af0a8bdbe1da009321fb29764eb62a1": "10000000000000000000000", + "0x4677b04e0343a32131fd6abb39b1b6156bba3d5b": "200000000000000000000", + "0xef69781f32ffce33346f2c9ae3f08493f3e82f89": "18200000000000000000", + "0xe3b3d2c9bf570be6a2f72adca1862c310936a43c": "100100000000000000000", + "0xd19caf39bb377fdf2cf19bd4fb52591c2631a63c": "1000000000000000000000", + "0x5d68324bcb776d3ffd0bf9fea91d9f037fd6ab0f": "2000000000000000000000", + "0x1c99fe9bb6c6d1066d912099547fd1f4809eacd9": "2000000000000000000000", + "0xbbfe0a830cace87b7293993a7e9496ce64f8e394": "6000000000000000000000", + "0x26c0054b700d3a7c2dcbe275689d4f4cad16a335": "2000000000000000000000", + "0x7d7e7c61779adb7706c94d32409a2bb4e994bf60": "865992000000000000000", + "0xd037d215d11d1df3d54fbd321cd295c5465e273b": "1400000000000000000000", + "0x08166f02313feae18bb044e7877c808b55b5bf58": "1970000000000000000000", + "0x781b1501647a2e06c0ed43ff197fccec35e1700b": "3000000000000000000000", + "0x74316adf25378c10f576d5b41a6f47fa98fce33d": "336082000000000000000", + "0x44e2fdc679e6bee01e93ef4a3ab1bcce012abc7c": "410231000000000000000", + "0x178eaf6b8554c45dfde16b78ce0c157f2ee31351": "320000000000000000000", + "0xcf923a5d8fbc3d01aa079d1cfe4b43ce071b1611": "2000000000000000000000", + "0x0c28847e4f09dfce5f9b25af7c4e530f59c880fe": "1000000000000000000000", + "0x54ce88275956def5f9458e3b95decacd484021a0": "2000000000000000000000", + "0x9d4213339a01551861764c87a93ce8f85f87959a": "200000000000000000000", + "0xe559b5fd337b9c5572a9bf9e0f2521f7d446dbe4": "200000000000000000000", + "0xdcb03bfa6c1131234e56b7ea7c4f721487546b7a": "1337000000000000000000", + "0xdb6ff71b3db0928f839e05a7323bfb57d29c87aa": "910000000000000000000", + "0xeb7c202b462b7cc5855d7484755f6e26ef43a115": "2000000000000000000000", + "0x323486ca64b375474fb2b759a9e7a135859bd9f6": "400000000000000000000", + "0x2c1df8a76f48f6b54bcf9caf56f0ee1cf57ab33d": "10118000000000000000000", + "0x2cd87866568dd81ad47d9d3ad0846e5a65507373": "400000000000000000000", + "0x8566610901aace38b83244f3a9c831306a67b9dc": "3256000000000000000000", + "0x1c257ad4a55105ea3b58ed374b198da266c85f63": "10000000000000000000000", + "0xcf4f1138f1bd6bf5b6d485cce4c1017fcb85f07d": "882038000000000000000", + "0xc934becaf71f225f8b4a4bf7b197f4ac9630345c": "20000000000000000000000", + "0x1e2bf4ba8e5ef18d37de6d6ad636c4cae489d0cc": "2000000000000000000000", + "0x9d78a975b7db5e4d8e28845cfbe7e31401be0dd9": "1340000000000000000000", + "0x16aa52cb0b554723e7060f21f327b0a68315fea3": "250000000000000000000", + "0x97e28973b860c567402800fbb63ce39a048a3d79": "97000000000000000000", + "0x4ac5acad000b8877214cb1ae00eac9a37d59a0fd": "4000000000000000000000", + "0x01226e0ad8d62277b162621c62c928e96e0b9a8c": "2000000000000000000000", + "0x479abf2da4d58716fd973a0d13a75f530150260a": "20000000000000000000", + "0x31d81d526c195e3f10b5c6db52b5e59afbe0a995": "264000000000000000000", + "0x749087ac0f5a97c6fad021538bf1d6cda18e0daa": "1000000000000000000000", + "0x1565af837ef3b0bd4e2b23568d5023cd34b16498": "393284000000000000000", + "0x997d6592a31589acc31b9901fbeb3cc3d65b3215": "2000000000000000000000", + "0x9d207517422cc0d60de7c237097a4d4fce20940c": "500000000000000000000", + "0x24b8b446debd1947955dd084f2c544933346d3ad": "4324135000000000000000", + "0x107a03cf0842dbdeb0618fb587ca69189ec92ff5": "1970000000000000000000", + "0x7f603aec1759ea5f07c7f8d41a1428fbbaf9e762": "20000000000000000000", + "0x53a244672895480f4a2b1cdf7da5e5a242ec4dbc": "1000000000000000000000", + "0x7db4c7d5b797e9296e6382f203693db409449d62": "400000000000000000000", + "0x2ae82dab92a66389eea1abb901d1d57f5a7cca0b": "2000000000000000000000", + "0x16bc40215abbd9ae5d280b95b8010b4514ff1292": "200000000000000000000", + "0xbba4fac3c42039d828e742cde0efffe774941b39": "1999946000000000000000", + "0x5431ca427e6165a644bae326bd09750a178c650d": "2000000000000000000000", + "0xdcf33965531380163168fc11f67e89c6f1bc178a": "334885000000000000000", + "0x65fd02d704a12a4dace9471b0645f962a89671c8": "28615000000000000000", + "0x135d1719bf03e3f866312479fe338118cd387e70": "2000000000000000000000", + "0xf3159866c2bc86bba40f9d73bb99f1eee57bb9d7": "1000000000000000000000", + "0xe3a4621b66004588e31206f718cb00a319889cf0": "2000000000000000000000", + "0xabcdbc8f1dd13af578d4a4774a62182bedf9f9be": "36660000000000000000", + "0x9fbe066de57236dc830725d32a02aef9246c6c5e": "2000000000000000000000", + "0x81cfad760913d3c322fcc77b49c2ae3907e74f6e": "197000000000000000000", + "0x0ab59d390702c9c059db148eb4f3fcfa7d04c7e7": "18200000000000000000", + "0x2c2db28c3309375eea3c6d72cd6d0eec145afcc0": "2000000000000000000000", + "0x08306de51981e7aca1856859b7c778696a6b69f9": "3200000000000000000000", + "0xf814799f6ddf4dcb29c7ee870e75f9cc2d35326d": "1000000000000000000000", + "0xee867d20916bd2e9c9ece08aa04385db667c912e": "50000000000000000000000", + "0x97a86f01ce3f7cfd4441330e1c9b19e1b10606ef": "2000000000000000000000", + "0x4c759813ad1386bed27ffae9e4815e3630cca312": "2000000000000000000000", + "0x8f226096c184ebb40105e08dac4d22e1c2d54d30": "306552000000000000000", + "0x13acada8980affc7504921be84eb4944c8fbb2bd": "1601600000000000000000", + "0x122dcfd81addb97d1a0e4925c4b549806e9f3beb": "1514954000000000000000", + "0x232f525d55859b7d4e608d20487faadb00293135": "4000000000000000000000", + "0x6f7ac681d45e418fce8b3a1db5bc3be6f06c9849": "2000000000000000000000", + "0x0c8692eeff2a53d6d1688ed56a9ddbbd68dabba1": "2000000000000000000000", + "0x6a6337833f8f6a6bf10ca7ec21aa810ed444f4cb": "1028200000000000000000", + "0x209377b6ad3fe101c9685b3576545c6b1684e73c": "1820000000000000000000", + "0x560fc08d079f047ed8d7df75551aa53501f57013": "7600000000000000000000", + "0x8e78f351457d016f4ad2755ec7424e5c21ba6d51": "146000000000000000000", + "0x2ce11a92fad024ff2b3e87e3b542e6c60dcbd996": "4000000000000000000000", + "0x8ab839aeaf2ad37cb78bacbbb633bcc5c099dc46": "2000000000000000000000", + "0x673144f0ec142e770f4834fee0ee311832f3087b": "500038000000000000000", + "0xba8a63f3f40de4a88388bc50212fea8e064fbb86": "2000000000000000000000", + "0xee899b02cbcb3939cd61de1342d50482abb68532": "1760000000000000000000", + "0xc2d9eedbc9019263d9d16cc5ae072d1d3dd9db03": "20000000000000000000000", + "0x355c0c39f5d5700b41d375b3f17851dcd52401f9": "3979000000000000000000", + "0x8179c80970182cc5b7d82a4df06ea94db63a25f3": "727432000000000000000", + "0xb388b5dfecd2c5e4b596577c642556dbfe277855": "20000000000000000000", + "0xa9e28337e6357193d9e2cb236b01be44b81427df": "2200000000000000000000", + "0x04ba4bb87140022c214a6fac42db5a16dd954045": "1000000000000000000000", + "0x67c926093e9b8927933810d98222d62e2b8206bb": "1910000000000000000000", + "0xed7346766e1a676d0d06ec821867a276a083bf31": "4012890000000000000000", + "0x92558226b384626cad48e09d966bf1395ee7ea5d": "334250000000000000000", + "0xbdf693f833c3fe471753184788eb4bfe4adc3f96": "1970000000000000000000", + "0x4474299d0ee090dc90789a1486489c3d0d645e6d": "1000000000000000000000", + "0xb1178ad47383c31c8134a1941cbcd474d06244e2": "1000000000000000000000", + "0x979d681c617da16f21bcaca101ed16ed015ab696": "1880000000000000000000", + "0x6b20c080606a79c73bd8e75b11717a4e8db3f1c3": "299720000000000000000", + "0xb85218f342f8012eda9f274e63ce2152b2dcfdab": "3100000000000000000000", + "0x530b61e42f39426d2408d40852b9e34ab5ebebc5": "267400000000000000000", + "0x76afc225f4fa307de484552bbe1d9d3f15074c4a": "2998800000000000000000", + "0x1e783e522ab7df0acaac9eeed3593039e5ac7579": "203435800000000000000000", + "0x0f7bf6373f771a4601762c4dae5fbbf4fedd9cc9": "2000000000000000000000", + "0x7a8797690ab77b5470bf7c0c1bba612508e1ac7d": "8865000000000000000000", + "0x2a2ab6b74c7af1d9476bb5bcb4524797bedc3552": "1000000000000000000000", + "0x523e140dc811b186dee5d6c88bf68e90b8e096fd": "2000000000000000000000", + "0xea8168fbf225e786459ca6bb18d963d26b505309": "500000000000000000000", + "0x20ff3ede8cadb5c37b48cb14580fb65e23090a7b": "42000000000000000000000", + "0xe482d255ede56b04c3e8df151f56e9ca62aaa8c2": "500000000000000000000", + "0x2e0880a34596230720f05ac8f065af8681dcb6c2": "100000000000000000000000", + "0xc674f28c8afd073f8b799691b2f0584df942e844": "2000000000000000000000", + "0xb646df98b49442746b61525c81a3b04ba3106250": "1970000000000000000000", + "0xd55c1c8dfbe1e02cacbca60fdbdd405b09f0b75f": "2000000000000000000000", + "0x65ebaed27edb9dcc1957aee5f452ac2105a65c0e": "43531987000000000000000", + "0xf079e1b1265f50e8c8a98ec0c7815eb3aeac9eb4": "20094000000000000000", + "0x867eba56748a5904350d2ca2a5ce9ca00b670a9b": "20000000000000000000000", + "0x51ee0cca3bcb10cd3e983722ced8493d926c0866": "999972000000000000000", + "0x88d541c840ce43cefbaf6d19af6b9859b573c145": "170000000000000000000", + "0xf851b010f633c40af1a8f06a73ebbaab65077ab5": "4400000000000000000000", + "0xe0aa69365555b73f282333d1e30c1bbd072854e8": "7000000000000000000000", + "0xc7b1c83e63203f9547263ef6282e7da33b6ed659": "18200000000000000000", + "0xaf06f5fa6d1214ec43967d1bd4dde74ab814a938": "88000000000000000000", + "0x991173601947c2084a62d639527e961512579af9": "600000000000000000000", + "0x7a381122bada791a7ab1f6037dac80432753baad": "10000000000000000000000", + "0xe766f34ff16f3cfcc97321721f43ddf5a38b0cf4": "1550000000000000000000", + "0xd785a8f18c38b9bc4ffb9b8fa8c7727bd642ee1c": "1000000000000000000000", + "0xaebd4f205de799b64b3564b256d42a711d37ef99": "1177100000000000000000", + "0xa2fa17c0fb506ce494008b9557841c3f641b8cae": "20000000000000000000", + "0xa8aca748f9d312ec747f8b6578142694c7e9f399": "2000000000000000000000", + "0x950c68a40988154d2393fff8da7ccda99614f72c": "4597943000000000000000", + "0x075d15e2d33d8b4fa7dba8b9e607f04a261e340b": "1910000000000000000000", + "0x3616d448985f5d32aefa8b93a993e094bd854986": "205400000000000000000", + "0x4bb9655cfb2a36ea7c637a7b859b4a3154e26ebe": "16000000000000000000000", + "0x84949dba559a63bfc845ded06e9f2d9b7f11ef24": "2000000000000000000000", + "0x937563d8a80fd5a537b0e66d20a02525d5d88660": "2500000000000000000000", + "0xb183ebee4fcb42c220e47774f59d6c54d5e32ab1": "1604266000000000000000", + "0x21e5d77320304c201c1e53b261a123d0a1063e81": "86972000000000000000", + "0xfa14b566234abee73042c31d21717182cba14aa1": "328000000000000000000", + "0x2da617695009cc57d26ad490b32a5dfbeb934e5e": "20000000000000000000000", + "0x3326b88de806184454c40b27f309d9dd6dcfb978": "17900000000000000000000", + "0x95e6a54b2d5f67a24a4875af75107ca7ea9fd2fa": "1337000000000000000000", + "0x8db58e406e202df9bc703c480bd8ed248d52a032": "2000000000000000000000", + "0xf777361a3dd8ab62e5f1b9b047568cc0b555704c": "1000000000000000000000", + "0x83a93b5ba41bf88720e415790cdc0b67b4af34c4": "200000000000000000000", + "0x8a1cc5ac111c49bfcfd848f37dd768aa65c88802": "10000000000000000000000", + "0x52214378b54004056a7cc08c891327798ac6b248": "15200000000000000000000", + "0xad80d865b85c34d2e6494b2e7aefea6b9af184db": "4000000000000000000000", + "0xe7d6240620f42c5edbb2ede6aec43da4ed9b5757": "1000000000000000000000", + "0xd0e35e047646e759f4517093d6408642517f084d": "3939507000000000000000", + "0x9340345ca6a3eabdb77363f2586043f29438ce0b": "530922000000000000000", + "0x6640ccf053555c130ae2b656647ea6e31637b9ab": "1970000000000000000000", + "0x184d86f3466ae6683b19729982e7a7e1a48347b2": "10000000000000000000000", + "0x84ec06f24700fe42414cb9897c154c88de2f6132": "1337000000000000000000", + "0xd1e5e234a9f44266a4a6241a84d7a1a55ad5a7fe": "20000000000000000000000", + "0xe8a9a41740f44f54c3688b53e1ddd42e43c9fe94": "4000000000000000000000", + "0x6e3a51db743d334d2fe88224b5fe7c008e80e624": "106000000000000000000", + "0x3e94df5313fa520570ef232bc3311d5f622ff183": "2000000000000000000000", + "0x8957727e72cf629020f4e05edf799aa7458062d0": "2200000000000000000000", + "0xcf5e0eacd1b39d0655f2f77535ef6608eb950ba0": "2000000000000000000000", + "0xf4aaa3a6163e3706577b49c0767e948a681e16ee": "2000000000000000000000", + "0x97f1fe4c8083e596212a187728dd5cf80a31bec5": "20000000000000000000", + "0x57d5fd0e3d3049330ffcdcd020456917657ba2da": "1991240000000000000000", + "0x49bdbc7ba5abebb6389e91a3285220d3451bd253": "1000000000000000000000", + "0xae126b382cf257fad7f0bc7d16297e54cc7267da": "300000000000000000000", + "0xbbf8616d97724af3def165d0e28cda89b800009a": "114063000000000000000", + "0xadb948b1b6fefe207de65e9bbc2de98e605d0b57": "2000000000000000000000", + "0x8a217db38bc35f215fd92906be42436fe7e6ed19": "6000000000000000000000", + "0xe28b062259e96eeb3c8d4104943f9eb325893cf5": "1337000000000000000000", + "0x6a6b18a45a76467e2e5d5a2ef911c3e12929857b": "82000000000000000000000", + "0xcb68ae5abe02dcf8cbc5aa719c25814651af8b85": "500000000000000000000", + "0x4c7e2e2b77ad0cd6f44acb2861f0fb8b28750ef9": "20000000000000000000", + "0x58ba1569650e5bbbb21d35d3e175c0d6b0c651a9": "500000000000000000000", + "0x1eb4bf73156a82a0a6822080c6edf49c469af8b9": "1910000000000000000000", + "0x4103299671d46763978fa4aa19ee34b1fc952784": "200000000000000000000", + "0xe321bb4a946adafdade4571fb15c0043d39ee35f": "1575212000000000000000", + "0x893608751d68d046e85802926673cdf2f57f7cb8": "19700000000000000000", + "0x70fee08b00c6c2c04a3c625c1ff77caf1c32df01": "200000000000000000000", + "0x7b0fea1176d52159333a143c294943da36bbddb4": "9380000000000000000000", + "0xd331c823825a9e5263d052d8915d4dcde07a5c37": "564000000000000000000", + "0xa45432a6f2ac9d56577b938a37fabac8cc7c461c": "1000000000000000000000", + "0x764fc46d428b6dbc228a0f5f55c9508c772eab9f": "26000000000000000000000", + "0x1a95a8a8082e4652e4170df9271cb4bb4305f0b2": "50000000000000000000", + "0x08c9f1bfb689fdf804d769f82123360215aff93b": "1970000000000000000000", + "0x1572cdfab72a01ce968e78f5b5448da29853fbdd": "5061500000000000000000", + "0x379c7166849bc24a02d6535e2def13daeef8aa8d": "100000000000000000000", + "0xe0a254ac09b9725bebc8e460431dd0732ebcabbf": "6000000000000000000000", + "0x3225c1ca5f2a9c88156bb7d9cdc44a326653c214": "400000000000000000000", + "0x84686c7bad762c54b667d59f90943cd14d117a26": "20000000000000000000", + "0x3d5a8b2b80be8b35d8ecf789b5ed7a0775c5076c": "20000000000000000000", + "0x2ccf80e21898125eb4e807cd82e09b9d28592f6e": "2000000000000000000000", + "0xdde969aef34ea87ac299b7597e292b4a0155cc8a": "298819000000000000000", + "0x19e94e620050aad766b9e1bad931238312d4bf49": "2396000000000000000000", + "0x959f57fded6ae37913d900b81e5f48a79322c627": "255599000000000000000", + "0xb9b0a3219a3288d9b35b091b14650b8fe23dce2b": "14000000000000000000000", + "0x3575c770668a9d179f1ef768c293f80166e2aa3d": "474000000000000000000", + "0x58f05b262560503ca761c61890a4035f4c737280": "8000000000000000000000", + "0x3286d1bc657a312c8847d93cb3cb7950f2b0c6e3": "20000000000000000000000", + "0x1d9e6aaf8019a05f230e5def05af5d889bd4d0f2": "133700000000000000000", + "0xa375b4bc24a24e1f797593cc302b2f331063fa5c": "200000000000000000000", + "0x108ba7c2895c50e072dc6f964932d50c282d3034": "500000000000000000000", + "0xb6b34a263f10c3d2eceb0acc559a7b2ab85ce565": "4000000000000000000000", + "0xa4d2b429f1ad5349e31704969edc5f25ee8aca10": "10000000000000000000000", + "0x674adb21df4c98c7a347ac4c3c24266757dd7039": "2000000000000000000000", + "0x33565ba9da2c03e778ce12294f081dfe81064d24": "16000000000000000000000", + "0x4ddda7586b2237b053a7f3289cf460dc57d37a09": "10000000000000000000000", + "0xcc4faac00be6628f92ef6b8cb1b1e76aac81fa18": "205410000000000000000", + "0x5f99dc8e49e61d57daef606acdd91b4d7007326a": "3000000000000000000000", + "0xb8a979352759ba09e35aa5935df175bff678a108": "20000000000000000000", + "0x86fff220e59305c09f483860d6f94e96fbe32f57": "42900000000000000000", + "0x03e8b084537557e709eae2e1e1a5a6bce1ef8314": "20000000000000000000", + "0xdda4ff7de491c687df4574dd1b17ff8f246ba3d1": "19600000000000000000000", + "0x2538532936813c91e653284f017c80c3b8f8a36f": "2002000000000000000000", + "0x5a82f96cd4b7e2d93d10f3185dc8f43d4b75aa69": "1999400000000000000000", + "0x86740a46648e845a5d96461b18091ff57be8a16f": "98000000000000000000000", + "0x7e3f63e13129a221ba1ab06326342cd98b5126ae": "1597960000000000000000", + "0x1f5f3b34bd134b2781afe5a0424ac5846cdefd11": "99000000000000000000", + "0x39936c2719450b9420cc2522cf91db01f227c1c1": "500000000000000000000", + "0x967076a877b18ec15a415bb116f06ef32645dba3": "2000000000000000000000", + "0xa42908e7fe53980a9abf4044e957a54b70e99cbe": "2000000000000000000000", + "0x5eb371c407406c427b3b7de271ad3c1e04269579": "3000000000000000000000", + "0xa570223ae3caa851418a9843a1ac55db4824f4fd": "200000000000000000000", + "0x764692cccb33405dd0ab0c3379b49caf8e6221ba": "20000000000000000000", + "0xa365918bfe3f2627b9f3a86775d8756e0fd8a94b": "400000000000000000000", + "0x069ed0ab7aa77de571f16106051d92afe195f2d0": "200000000000000000000", + "0xbd432a3916249b4724293af9146e49b8280a7f2a": "4000000000000000000000", + "0x61c9dce8b2981cb40e98b0402bc3eb28348f03ac": "196910000000000000000", + "0x8f1fcc3c51e252b693bc5b0ec3f63529fe69281e": "6000000000000000000000", + "0x55fd08d18064bd202c0ec3d2cce0ce0b9d169c4d": "1970000000000000000000", + "0x383a7c899ee18bc214969870bc7482f6d8f3570e": "10000000000000000000000", + "0xb14cc8de33d6338236539a489020ce4655a32bc6": "8000000000000000000000", + "0x448bf410ad9bbc2fecc4508d87a7fc2e4b8561ad": "199955000000000000000", + "0x06f7dc8d1b9462cef6feb13368a7e3974b097f9f": "2000000000000000000000", + "0x9c9f89a3910f6a2ae8a91047a17ab788bddec170": "10000000000000000000000", + "0x5de598aba344378cab4431555b4f79992dc290c6": "1337000000000000000000", + "0x87e6034ecf23f8b5639d5f0ea70a22538a920423": "328000000000000000000", + "0x8b27392206b958cd375d7ef8af2cf8ef0598c0bc": "1000000000000000000000", + "0x49136fe6e28b7453fcb16b6bbbe9aaacba8337fd": "2000000000000000000000", + "0x6982fe8a867e93eb4a0bd051589399f2ec9a5292": "2000000000000000000000", + "0x9fd1052a60506bd1a9ef003afd9d033c267d8e99": "1000000000000000000000", + "0xd38fa2c4cc147ad06ad5a2f75579281f22a7cc1f": "20000000000000000000000", + "0x6f794dbdf623daa6e0d00774ad6962737c921ea4": "2000000000000000000000", + "0xe96b184e1f0f54924ac874f60bbf44707446b72b": "2910840000000000000000", + "0xb5ba29917c78a1d9e5c5c713666c1e411d7f693a": "3100000000000000000000", + "0x81d619ff5726f2405f12904c72eb1e24a0aaee4f": "20000000000000000000000", + "0xb02fa29387ec12e37f6922ac4ce98c5b09e0b00f": "2000000000000000000000", + "0xb7230d1d1ff2aca366963914a79df9f7c5ea2c98": "8000000000000000000000", + "0x7b4007c45e5a573fdbb6f8bd746bf94ad04a3c26": "15202564000000000000000", + "0x8d9a0c70d2262042df1017d6c303132024772712": "2000000000000000000000", + "0x323aad41df4b6fc8fece8c93958aa901fa680843": "970000000000000000000", + "0xdb04fad9c49f9e880beb8fcf1d3a3890e4b3846f": "1242482000000000000000", + "0x27824666d278d70423f03dfe1dc7a3f02f43e2b5": "1000070000000000000000", + "0xe04920dc6ecc1d6ecc084f88aa0af5db97bf893a": "182000000000000000000", + "0xb0c1b177a220e41f7c74d07cde8569c21c75c2f9": "5600000000000000000000", + "0x7864dc999fe4f8e003c0f43decc39aae1522dc0f": "94400000000000000000", + "0xc75c37ce2da06bbc40081159c6ba0f976e3993b1": "1078640000000000000000", + "0x179a825e0f1f6e985309668465cffed436f6aea9": "20000000000000000000", + "0x2c6b699d9ead349f067f45711a074a641db6a897": "20000000000000000000", + "0x068ce8bd6e902a45cb83b51541b40f39c4469712": "5240000000000000000000", + "0x767ac690791c2e23451089fe6c7083fe55deb62b": "820000000000000000000", + "0xb34f04b8db65bba9c26efc4ce6efc50481f3d65d": "20000000000000000000000", + "0x29aef48de8c9fbad4b9e4ca970797a5533eb722d": "10000000000000000000000", + "0x0a0ecda6636f7716ef1973614687fd89a820a706": "394000000000000000000", + "0xb32825d5f3db249ef4e85cc4f33153958976e8bc": "501375000000000000000", + "0x7ef16fd8d15b378a0fba306b8d03dd98fc92619f": "700000000000000000000", + "0xb58b52865ea55d8036f2fab26098b352ca837e18": "18200000000000000000", + "0x9b658fb361e046d4fcaa8aef6d02a99111223625": "2000000000000000000000", + "0xb2a498f03bd7178bd8a789a00f5237af79a3e3f8": "19400000000000000000000", + "0xcb48fe8265d9af55eb7006bc335645b0a3a183be": "3000000000000000000000", + "0x3cf9a1d465e78b7039e3694478e2627b36fcd141": "1372000000000000000000", + "0x5db84400570069a9573cab04b4e6b69535e202b8": "9700000000000000000000", + "0x214c89c5bd8e7d22bc574bb35e48950211c6f776": "18903000000000000000", + "0x53396f4a26c2b4604496306c5442e7fcba272e36": "20055000000000000000000", + "0x720994dbe56a3a95929774e20e1fe525cf3704e4": "8000000000000000000000", + "0x3571cf7ad304ecaee595792f4bbfa484418549d6": "5825500000000000000000", + "0x6042c644bae2b96f25f94d31f678c90dc96690db": "2000000000000000000000", + "0x2e24b597873bb141bdb237ea8a5ab747799af02d": "20000000000000000000000", + "0x08c802f87758349fa03e6bc2e2fd0791197eea9a": "2000000000000000000000", + "0x297a88921b5fca10e5bb9ded60025437ae221694": "200000000000000000000", + "0xaee49d68adedb081fd43705a5f78c778fb90de48": "20000000000000000000", + "0x4cee901b4ac8b156c5e2f8a6f1bef572a7dceb7e": "1000000000000000000000", + "0xdfaf31e622c03d9e18a0ddb8be60fbe3e661be0a": "9999800000000000000000", + "0x00aa5381b2138ebeffc191d5d8c391753b7098d2": "990049000000000000000", + "0x5b4c0c60f10ed2894bdb42d9dd1d210587810a0d": "500000000000000000000", + "0xc44f4ab5bc60397c737eb0683391b633f83c48fa": "1000000000000000000000", + "0x50bef2756248f9a7a380f91b051ba3be28a649ed": "1999884000000000000000", + "0x1bd909ac0d4a1102ec98dcf2cca96a0adcd7a951": "20055000000000000000", + "0x9ec03e02e587b7769def538413e97f7e55be71d8": "19700000000000000000000", + "0x9874803fe1f3a0365e7922b14270eaeb032cc1b5": "1124500000000000000000", + "0x4e2310191ead8d3bc6489873a5f0c2ec6b87e1be": "1000000000000000000000", + "0x93678a3c57151aeb68efdc43ef4d36cb59a009f3": "30060000000000000000", + "0xf483f607a21fcc28100a018c568ffbe140380410": "1000000000000000000000", + "0x2a91a9fed41b7d0e5cd2d83158d3e8a41a9a2d71": "1940000000000000000000", + "0x240e559e274aaef0c258998c979f671d1173b88b": "4000000000000000000000", + "0x108a2b7c336f784779d8b54d02a8d31d9a139c0a": "10000000000000000000000", + "0x9c98fdf1fdcd8ba8f4c5b04c3ae8587efdf0f6e6": "6000000000000000000000", + "0x194ff44aefc17bd20efd7a204c47d1620c86db5d": "2999400000000000000000", + "0x1f8116bd0af5570eaf0c56c49c7ab5e37a580458": "2000000000000000000000", + "0xd79835e404fb86bf845fba090d6ba25e0c8866a6": "2400000000000000000000", + "0xa8e7201ff619faffc332e6ad37ed41e301bf014a": "600000000000000000000", + "0x286906b6bd4972e3c71655e04baf36260c7cb153": "340000000000000000000", + "0xdb4bc83b0e6baadb1156c5cf06e0f721808c52c7": "880000000000000000000", + "0xa158148a2e0f3e92dc2ce38febc20107e3253c96": "2000000000000000000000", + "0x9f6a322a6d469981426ae844865d7ee0bb15c7b3": "50003000000000000000", + "0x32f29e8727a74c6b4301e3ffff0687c1b870dae9": "1000000000000000000000", + "0x19918aa09e7d494e98ffa5db50350892f7156ac6": "10000000000000000000000", + "0x5a5f8508da0ebebb90be9033bd4d9e274105ae00": "6685000000000000000000", + "0x6fc25e7e00ca4f60a9fe6f28d1fde3542e2d1079": "792000000000000000000", + "0x72094f3951ffc9771dced23ada080bcaf9c7cca7": "6000000000000000000000", + "0x43f7e86e381ec51ec4906d1476cba97a3db584e4": "1000000000000000000000", + "0x05696b73916bd3033e05521e3211dfec026e98e4": "2000000000000000000000", + "0x5e7f70378775589fc66a81d3f653e954f55560eb": "2434000000000000000000", + "0x895613236f3584216ad75c5d3e07e3fa6863a778": "2000000000000000000000", + "0x4eb1454b573805c8aca37edec7149a41f61202f4": "300000000000000000000", + "0xd99999a2490d9494a530cae4daf38554f4dd633e": "120000000000000000000", + "0x1704cefcfb1331ec7a78388b29393e85c1af7916": "400000000000000000000", + "0xac4acfc36ed6094a27e118ecc911cd473e8fb91f": "1799800000000000000000", + "0xa975b077fcb4cc8efcbf838459b6fa243a4159d6": "40000000000000000000", + "0x9c405cf697956138065e11c5f7559e67245bd1a5": "200000000000000000000", + "0xcafde855864c2598da3cafc05ad98df2898e8048": "14179272000000000000000", + "0x8ef711e43a13918f1303e81d0ea78c9eefd67eb2": "4000000000000000000000", + "0x0b14891999a65c9ef73308efe3100ca1b20e8192": "800000000000000000000", + "0x47cf9cdaf92fc999cc5efbb7203c61e4f1cdd4c3": "131400000000000000000", + "0x04ba8a3f03f08b895095994dda619edaacee3e7a": "2000000000000000000000", + "0x02b6d65cb00b7b36e1fb5ed3632c4cb20a894130": "20000000000000000000000", + "0xf99aee444b5783c093cfffd1c4632cf93c6f050c": "400000000000000000000", + "0x2541314a0b408e95a694444977712a50713591ab": "1634706000000000000000", + "0x3096dca34108085bcf04ae72b94574a13e1a3e1d": "200000000000000000000", + "0x56df05bad46c3f00ae476ecf017bb8c877383ff1": "197248000000000000000", + "0x6d59b21cd0e2748804d9abe064eac2bef0c95f27": "2000000000000000000000", + "0xb29f5b7c1930d9f97a115e067066f0b54db44b3b": "1000000000000000000000", + "0x888c16144933197cac26504dd76e06fd6600c789": "100000000000000000000", + "0xdfe3c52a92c30396a4e33a50170dc900fcf8c9cf": "50000000000000000000", + "0xf76f69cee4faa0a63b30ae1e7881f4f715657010": "200000000000000000000", + "0xee0007b0960d00908a94432a737557876aac7c31": "53053000000000000000", + "0xeffc15e487b1beda0a8d1325bdb4172240dc540a": "64940000000000000000", + "0x40ab0a3e83d0c8ac9366910520eab1772bac3b1a": "976600000000000000000", + "0x1895a0eb4a4372722fcbc5afe6936f289c88a419": "910000000000000000000", + "0x81efe296ae76c860d1c5fbd33d47e8ce9996d157": "1000000000000000000000", + "0x9ddd355e634ee9927e4b7f6c97e7bf3a2f1e687a": "50000000000000000000", + "0xf2b4ab2c9427a9015ef6eefff5edb60139b719d1": "716800000000000000000", + "0x765be2e12f629e6349b97d21b62a17b7c830edab": "6000000000000000000000", + "0xff61c9c1b7a3d8b53bba20b34466544b7b216644": "2000000000000000000000", + "0x36a08fd6fd1ac17ce15ed57eefb12a2be28188bf": "1337000000000000000000", + "0x17049311101d817efb1d65910f663662a699c98c": "1999800000000000000000", + "0x30511832918d8034a7bee72ef2bfee440ecbbcf6": "16100000000000000000000", + "0xd27c234ff7accace3d996708f8f9b04970f97d36": "1337000000000000000000", + "0xa961171f5342b173dd70e7bfe5b5ca238b13bcdd": "3397053000000000000000", + "0x30bf61b2d877fe10635126326fa189e4b0b1c3b0": "1027580000000000000000", + "0x4bb6d86b8314c22d8d37ea516d0019f156aae12d": "1000000000000000000000", + "0x5f363e0ab747e02d1b3b66abb69ea53c7baf523a": "11640000000000000000000", + "0x283e11203749b1fa4f32febb71e49d135919382a": "1000000000000000000000", + "0xac5999a89d2dd286d5a80c6dee7e86aad40f9e12": "3880000000000000000000", + "0x3f6dd3650ee428dcb7759553b017a96a94286ac9": "1337000000000000000000", + "0xb3fc1d6881abfcb8becc0bb021b8b73b7233dd91": "50000000000000000000", + "0xf0832a6bb25503eeca435be31b0bf905ca1fcf57": "6685000000000000000000", + "0x9d7fda7070bf3ee9bbd9a41f55cad4854ae6c22c": "11027380000000000000000", + "0x4b0bd8acfcbc53a6010b40d4d08ddd2d9d69622d": "668500000000000000000", + "0xf3b668b3f14d920ebc379092db98031b67b219b3": "199955000000000000000", + "0xd91d889164479ce436ece51763e22cda19b22d6b": "3365200000000000000000", + "0xffe28db53c9044b4ecd4053fd1b4b10d7056c688": "100000000000000000000", + "0xc77b01a6e911fa988d01a3ab33646beef9c138f3": "721400000000000000000", + "0xc0064f1d9474ab915d56906c9fb320a2c7098c9b": "358000000000000000000", + "0x4e3edad4864dab64cae4c5417a76774053dc6432": "590943000000000000000", + "0x71d2cc6d02578c65f73c575e76ce8fbcfadcf356": "72400000000000000000", + "0x9971df60f0ae66dce9e8c84e17149f09f9c52f64": "200000000000000000000", + "0x58e661d0ba73d6cf24099a5562b808f7b3673b68": "2000000000000000000000", + "0x84b0ee6bb837d3a4c4c5011c3a228c0edab4634a": "20000000000000000000", + "0x84375afbf59b3a1d61a1be32d075e0e15a4fbca5": "200000000000000000000", + "0x9ae9476bfecd3591964dd325cf8c2a24faed82c1": "4000000000000000000000", + "0x6a4c8907b600248057b1e46354b19bdc859c991a": "20000000000000000000", + "0x1c045649cd53dc23541f8ed4d341812808d5dd9c": "7000000000000000000000", + "0xc5e488cf2b5677933971f64cb8202dd05752a2c0": "1000000000000000000000", + "0xeb25481fcd9c221f1ac7e5fd1ecd9307a16215b8": "197000000000000000000", + "0xa61887818f914a20e31077290b83715a6b2d6ef9": "1880000000000000000000", + "0x679437eacf437878dc293d48a39c87b7421a216c": "64528000000000000000", + "0x331a1c26cc6994cdd3c14bece276ffff4b9df77c": "18049000000000000000", + "0x75b95696e8ec4510d56868a7c1a735c68b244890": "6400000000000000000000", + "0xa77f3ee19e9388bbbb2215c62397b96560132360": "200000000000000000000", + "0xbc7afc8477412274fc265df13c054473427d43c6": "130034000000000000000", + "0x91050a5cffadedb4bb6eaafbc9e5013428e96c80": "1700000000000000000000", + "0x24586ec5451735eeaaeb470dc8736aae752f82e5": "17600000000000000000", + "0x51039377eed0c573f986c5e8a95fb99a59e9330f": "1970000000000000000000", + "0xfbb161fe875f09290a4b262bc60110848f0d2226": "2000000000000000000000", + "0xed52a2cc0869dc9e9f842bd0957c47a8e9b0c9ff": "9550000000000000000000", + "0xbad235d5085dc7b068a67c412677b03e1836884c": "2000000000000000000000", + "0x055eac4f1ad3f58f0bd024d68ea60dbe01c6afb3": "100000000000000000000", + "0x4058808816fdaa3a5fc98ed47cfae6c18315422e": "199800000000000000000", + "0x3540c7bd7a8442d5bee21a2180a1c4edff1649e0": "1239295000000000000000", + "0xc5edbbd2ca0357654ad0ea4793f8c5cecd30e254": "6000000000000000000000", + "0xb5906b0ae9a28158e8ac550e39da086ee3157623": "200000000000000000000", + "0x4d801093c19ca9b8f342e33cc9c77bbd4c8312cf": "345005000000000000000", + "0x206482ee6f138a778fe1ad62b180ce856fbb23e6": "2000000000000000000000", + "0xc0ed0d4ad10de03435b153a0fc25de3b93f45204": "3160000000000000000000", + "0x29e67990e1b6d52e1055ffe049c53195a81542cf": "20000000000000000000000", + "0xe6d22209ffd0b87509ade3a8e2ef429879cb89b5": "17260000000000000000000", + "0xd6644d40e90bc97fe7dfe7cabd3269fd579ba4b3": "159000000000000000000", + "0xece1290877b583e361a2d41b009346e6274e2538": "300000000000000000000", + "0xab3861226ffec1289187fb84a08ec3ed043264e8": "1000000000000000000000", + "0x60e0bdd0a259bb9cb09d3f37e5cd8b9daceabf8a": "1370000000000000000000", + "0x28b77585cb3d55a199ab291d3a18c68fe89a848a": "1960000000000000000000", + "0x73128173489528012e76b41a5e28c68ba4e3a9d4": "1000000000000000000000", + "0x018492488ba1a292342247b31855a55905fef269": "140000000000000000000", + "0x0bb54c72fd6610bfa4363397e020384b022b0c49": "1337000000000000000000", + "0x520f66a0e2657ff0ac4195f2f064cf2fa4b24250": "40000000000000000000", + "0xa1432ed2c6b7777a88e8d46d388e70477f208ca5": "7999538000000000000000", + "0x149ba10f0da2725dc704733e87f5a524ca88515e": "7880000000000000000000", + "0xb287f7f8d8c3872c1b586bcd7d0aedbf7e732732": "20000000000000000000", + "0xc46bbdef76d4ca60d316c07f5d1a780e3b165f7e": "2000000000000000000000", + "0xb5a589dd9f4071dbb6fba89b3f5d5dae7d96c163": "2000000000000000000000", + "0xd218efb4db981cdd6a797f4bd48c7c26293ceb40": "2975000000000000000000", + "0xaf87d2371ef378957fbd05ba2f1d66931b01e2b8": "700000000000000000000", + "0x86ef6426211949cc37f4c75e7850369d0cf5f479": "13399196000000000000000", + "0xfb3a0b0d6b6a718f6fc0292a825dc9247a90a5d0": "199950000000000000000", + "0xda16dd5c3d1a2714358fe3752cae53dbab2be98c": "19400000000000000000000", + "0x9eb7834e171d41e069a77947fca87622f0ba4e48": "100000000000000000000", + "0xe1d91b0954cede221d6f24c7985fc59965fb98b8": "2000000000000000000000", + "0x85d0d88754ac84b8b21ba93dd2bfec72626faba8": "1000000000000000000000", + "0x695b4cce085856d9e1f9ff3e79942023359e5fbc": "5000000000000000000000", + "0x9156d18029350e470408f15f1aa3be9f040a67c6": "1000000000000000000000", + "0xa9d64b4f3bb7850722b58b478ba691375e224e42": "6000000000000000000000", + "0x17e4a0e52bac3ee44efe0954e753d4b85d644e05": "2000000000000000000000", + "0xb8a79c84945e47a9c3438683d6b5842cff7684b1": "2000000000000000000000", + "0xcfac2e1bf33205b05533691a02267ee19cd81836": "1000000000000000000000", + "0x6b992521ec852370848ad697cc2df64e63cc06ff": "1000000000000000000000", + "0x60af0ee118443c9b37d2fead77f5e521debe1573": "1910000000000000000000", + "0xc6dbdb9efd5ec1b3786e0671eb2279b253f215ed": "1000000000000000000000", + "0x659c0a72c767a3a65ced0e1ca885a4c51fd9b779": "2000000000000000000000", + "0xed1276513b6fc68628a74185c2e20cbbca7817bf": "191000000000000000000", + "0x5ad12c5ed4fa827e2150cfa0d68c0aa37b1769b8": "800000000000000000000", + "0x17c0fef6986cfb2e4041f9979d9940b69dff3de2": "4000000000000000000000", + "0xca98c7988efa08e925ef9c9945520326e9f43b99": "4000000000000000000000", + "0xfe8f1fdcab7fbec9a6a3fcc507619600505c36a3": "19700000000000000000", + "0x4420aa35465be617ad2498f370de0a3cc4d230af": "2000000000000000000000", + "0x8232d1f9742edf8dd927da353b2ae7b4cbce7592": "668500000000000000000", + "0xeca5f58792b8c62d2af556717ee3ee3028be4dce": "2000000000000000000000", + "0x6bf86f1e2f2b8032a95c4d7738a109d3d0ed8104": "1820000000000000000000", + "0x3ac2f0ff1612e4a1c346d53382abf6d8a25baa53": "2000000000000000000000", + "0xdaa1bd7a9148fb865cd612dd35f162861d0f3bdc": "3066243000000000000000", + "0x5169c60aee4ceed1849ab36d664cff97061e8ea8": "3000000000000000000000", + "0x2a5e3a40d2cd0325766de73a3d671896b362c73b": "100000000000000000000000", + "0xa83382b6e15267974a8550b98f7176c1a353f9be": "3541608000000000000000", + "0xb50c149a1906fad2786ffb135aab501737e9e56f": "388000000000000000000", + "0xd9775965b716476675a8d513eb14bbf7b07cd14a": "5076200000000000000000", + "0x66662006015c1f8e3ccfcaebc8ee6807ee196303": "500024000000000000000", + "0x78746a958dced4c764f876508c414a68342cecb9": "50600000000000000000", + "0xe982e6f28c548f5f96f45e63f7ab708724f53fa1": "396238000000000000000", + "0x740bfd52e01667a3419b029a1b8e45576a86a2db": "16800000000000000000000", + "0x2bd252e0d732ff1d7c78f0a02e6cb25423cf1b1a": "2674000000000000000000", + "0x2e2d7ea66b9f47d8cc52c01c52b6e191bc7d4786": "3999800000000000000000", + "0x3e3161f1ea2fbf126e79da1801da9512b37988c9": "49250000000000000000000", + "0x7e2ba86da52e785d8625334f3397ba1c4bf2e8d1": "197000000000000000000", + "0x7608f437b31f18bc0b64d381ae86fd978ed7b31f": "50000000000000000000", + "0x25a5a44d38a2f44c6a9db9cdbc6b1e2e97abb509": "17000000000000000000000", + "0x745ad3abc6eeeb2471689b539e789ce2b8268306": "1129977000000000000000", + "0x09e437d448861228a232b62ee8d37965a904ed9c": "21708305000000000000000", + "0xbe53322f43fbb58494d7cce19dda272b2450e827": "200018000000000000000", + "0x4166fc08ca85f766fde831460e9dc93c0e21aa6c": "1000000000000000000000", + "0x99c0174cf84e0783c220b4eb6ae18fe703854ad3": "2074800000000000000000", + "0x3cf484524fbdfadae26dc185e32b2b630fd2e726": "448798000000000000000", + "0xfdcd5d80b105897a57abc47865768b2900524295": "6400000000000000000000", + "0xf22f4078febbbaa8b0e78e642c8a42f35d433905": "1999944000000000000000", + "0xeac768bf14b8f9432e69eaa82a99fbeb94cd0c9c": "98500000000000000000000", + "0x2639eee9873ceec26fcc9454b548b9e7c54aa65c": "1000000000000000000000", + "0xc3c3c2510d678020485a63735d1307ec4ca6302b": "1000000000000000000000", + "0xb73d6a77559c86cf6574242903394bacf96e3570": "91200000000000000000", + "0x5ce2e7ceaaa18af0f8aafa7fbad74cc89e3cd436": "20000000000000000000000", + "0x03377c0e556b640103289a6189e1aeae63493467": "20000000000000000000000", + "0x6eb0a5a9ae96d22cf01d8fd6483b9f38f08c2c8b": "4000000000000000000000", + "0xfc8215a0a69913f62a43bf1c8590b9ddcd0d8ddb": "2000000000000000000000", + "0x4a835c25824c47ecbfc79439bf3f5c3481aa75cd": "1400000000000000000000", + "0xb5493ef173724445cf345c035d279ba759f28d51": "20000000000000000000", + "0xb9e90c1192b3d5d3e3ab0700f1bf655f5dd4347a": "499928000000000000000", + "0x419bde7316cc1ed295c885ace342c79bf7ee33ea": "6000000000000000000000", + "0xe4625501f52b7af52b19ed612e9d54fdd006b492": "209440000000000000000", + "0xe9d599456b2543e6db80ea9b210e908026e2146e": "200000000000000000000", + "0x2c06dd922b61514aafedd84488c0c28e6dcf0e99": "100000000000000000000000", + "0x06b5ede6fdf1d6e9a34721379aeaa17c713dd82a": "2000000000000000000000", + "0xd8930a39c77357c30ad3a060f00b06046331fd62": "820000000000000000000", + "0xb2a2c2111612fb8bbb8e7dd9378d67f1a384f050": "20000000000000000000", + "0x1f174f40a0447234e66653914d75bc003e5690dc": "160000000000000000000", + "0xe06cb6294704eea7437c2fc3d30773b7bf38889a": "20094000000000000000", + "0xcd06f8c1b5cdbd28e2d96b6346c3e85a0483ba24": "1000000000000000000000", + "0xf316ef1df2ff4d6c1808dba663ec8093697968e0": "1794400000000000000000", + "0x1e6915ebd9a19c81b692ad99b1218a592c1ac7b1": "4000000000000000000000", + "0x885493bda36a0432976546c1ddce71c3f4570021": "216700000000000000000", + "0x18b0407cdad4ce52600623bd5e1f6a81ab61f026": "319489000000000000000", + "0x187d9f0c07f8eb74faaad15ebc7b80447417f782": "20000000000000000000", + "0x5d6ccf806738091042ad97a6e095fe8c36aa79c5": "188000000000000000000", + "0x53437fecf34ab9d435f4deb8ca181519e2592035": "188000000000000000000", + "0xfd1faa347b0fcc804c2da86c36d5f1d18b7087bb": "52380000000000000000", + "0x650cf67db060cce17568d5f2a423687c49647609": "100000000000000000000", + "0xbcd95ef962462b6edfa10fda87d72242fe3edb5c": "334133000000000000000", + "0x3b5e8b3c77f792decb7a8985df916efb490aac23": "2000000000000000000000", + "0xf13b083093ba564e2dc631568cf7540d9a0ec719": "1999944000000000000000", + "0x373c547e0cb5ce632e1c5ad66155720c01c40995": "4691588000000000000000", + "0x7313461208455455465445a459b06c3773b0eb30": "2000000000000000000000", + "0x441f37e8a029fd02482f289c49b5d06d00e408a4": "333333000000000000000", + "0xd30d4c43adcf55b2cb53d68323264134498d89ce": "1000000000000000000000", + "0xf648ea89c27525710172944e79edff847803b775": "100000000000000000000000", + "0x0c7f869f8e90d53fdc03e8b2819b016b9d18eb26": "20000000000000000000000", + "0xc71f92a3a54a7b8c2f5ea44305fccb84eee23148": "49980000000000000000", + "0x7988901331e387f713faceb9005cb9b65136eb14": "1970000000000000000000", + "0xe9a39a8bac0f01c349c64cedb69897f633234ed2": "3980000000000000000000", + "0xad2a5c00f923aaf21ab9f3fb066efa0a03de2fb2": "999996000000000000000", + "0xf25259a5c939cd25966c9b6303d3731c53ddbc4c": "200000000000000000000", + "0xd1682c2159018dc3d07f08240a8c606daf65f8e1": "200000000000000000000000", + "0xa99991cebd98d9c838c25f7a7416d9e244ca250d": "1000000000000000000000", + "0x5a285755391e914e58025faa48cc685f4fd4f5b8": "26000000000000000000000", + "0x4d24b7ac47d2f27de90974ba3de5ead203544bcd": "100000000000000000000", + "0x21b182f2da2b384493cf5f35f83d9d1ee14f2a21": "2000000000000000000000", + "0x31ab088966ecc7229258f6098fce68cf39b38485": "1000000000000000000000", + "0x4977a7939d0939689455ce2639d0ee5a4cd910ed": "1820000000000000000000", + "0x07af938c1237a27c9030094dcf240750246e3d2c": "500000000000000000000", + "0x4e2bfa4a466f82671b800eee426ad00c071ba170": "4000000000000000000000", + "0x107379d4c467464f235bc18e55938aad3e688ad7": "50000000000000000000", + "0xf7b29b82195c882dab7897c2ae95e77710f57875": "2199000000000000000000", + "0x56586391040c57eec6f5affd8cd4abde10b50acc": "4000000000000000000000", + "0xac608e2bac9dd20728d2947effbbbf900a9ce94b": "6000600000000000000000", + "0x48548b4ba62bcb2f0d34a88dc69a680e539cf046": "100084000000000000000", + "0x1665ab1739d71119ee6132abbd926a279fe67948": "100000000000000000000", + "0xaf4493e8521ca89d95f5267c1ab63f9f45411e1b": "200000000000000000000", + "0xbf6925c00751008440a6739a02bf2b6cdaab5e3a": "1000000000000000000000", + "0x3fe40fbd919aad2818df01ee4df46c46842ac539": "6000000000000000000000", + "0x455b9296921a74d1fc41617f43b8303e6f3ed76c": "4200000000000000000000", + "0x7086b4bde3e35d4aeb24b825f1a215f99d85f745": "1999800000000000000000", + "0xd4ee4919fb37f2bb970c3fff54aaf1f3dda6c03f": "40000000000000000000000", + "0xa4489a50ead5d5445a7bee4d2d5536c2a76c41f8": "200000000000000000000", + "0x505e4f7c275588c533a20ebd2ac13b409bbdea3c": "17600000000000000000", + "0x3bb53598cc20e2055dc553b049404ac9b7dd1e83": "615020000000000000000", + "0x52cd20403ba7eda6bc307a3d63b5911b817c1263": "20000000000000000000", + "0xa211da03cc0e31ecce5309998718515528a090df": "200000000000000000000", + "0xbcb422dc4dd2aae94abae95ea45dd1731bb6b0ba": "447500000000000000000", + "0xcbde9734b8e6aa538c291d6d7facedb0f338f857": "2000000000000000000000", + "0x171ca02a8b6d62bf4ca47e906914079861972cb2": "200000000000000000000", + "0xd40d0055fd9a38488aff923fd03d35ec46d711b3": "4999711000000000000000", + "0x3887192c7f705006b630091276b39ac680448d6b": "60000000000000000000", + "0x3f3c8e61e5604cef0605d436dd22accd862217fc": "1337000000000000000000", + "0x4258fd662fc4ce3295f0d4ed8f7bb1449600a0a9": "6719600000000000000000", + "0x4571de672b9904bad8743692c21c4fdcea4c2e01": "4000000000000000000000", + "0x5be045512a026e3f1cebfd5a7ec0cfc36f2dc16b": "120000000000000000000", + "0xd6300b3215b11de762ecde4b70b7927d01291582": "2000000000000000000000", + "0xf9e37447406c412197b2e2aebc001d6e30c98c60": "8346700000000000000000", + "0xbd047ff1e69cc6b29ad26497a9a6f27a903fc4dd": "865000000000000000000", + "0x23fa7eb51a48229598f97e762be0869652dffc66": "1000000000000000000000", + "0x6679aeecd87a57a73f3356811d2cf49d0c4d96dc": "600000000000000000000", + "0x23c55aeb5739876f0ac8d7ebea13be729685f000": "1337000000000000000000", + "0x757b65876dbf29bf911d4f0692a2c9beb1139808": "4124263000000000000000", + "0xe8fc36b0131ec120ac9e85afc10ce70b56d8b6ba": "200000000000000000000", + "0x1a89899cbebdbb64bb26a195a63c08491fcd9eee": "2000000000000000000000", + "0x6edf7f5283725c953ee64317f66188af1184b033": "8050000000000000000000", + "0x297385e88634465685c231a314a0d5dcd146af01": "1550000000000000000000", + "0x018f20a27b27ec441af723fd9099f2cbb79d6263": "2167000000000000000000", + "0xa5a4227f6cf98825c0d5baff5315752ccc1a1391": "10000000000000000000000", + "0x69517083e303d4fbb6c2114514215d69bc46a299": "100000000000000000000", + "0x1dab172effa6fbee534c94b17e794edac54f55f8": "1970000000000000000000", + "0xc6ee35934229693529dc41d9bb71a2496658b88e": "19700000000000000000000", + "0xa8ee1df5d44b128469e913569ef6ac81eeda4fc8": "500000000000000000000", + "0x35bd246865fab490ac087ac1f1d4f2c10d0cda03": "400000000000000000000", + "0x4bf8bf1d35a231315764fc8001809a949294fc49": "66850000000000000000", + "0xc70fa45576bf9c865f983893002c414926f61029": "400400000000000000000", + "0xfdeaac2acf1d138e19f2fc3f9fb74592e3ed818a": "668500000000000000000", + "0xbfbfbcb656c2992be8fcde8219fbc54aadd59f29": "9999924000000000000000", + "0x1722c4cbe70a94b6559d425084caeed4d6e66e21": "4000000000000000000000", + "0x00e681bc2d10db62de85848324492250348e90bf": "20000000000000000000000", + "0x5c308bac4857d33baea074f3956d3621d9fa28e1": "4999711000000000000000", + "0x68c08490c89bf0d6b6f320b1aca95c8312c00608": "4000000000000000000000", + "0xce1884ddbbb8e10e4dba6e44feeec2a7e5f92f05": "4000000000000000000000", + "0x427417bd16b1b3d22dbb902d8f9657016f24a61c": "2000000000000000000000", + "0x5ff93de6ee054cad459b2d5eb0f6870389dfcb74": "220000000000000000000", + "0x71946b7117fc915ed107385f42d99ddac63249c2": "2000000000000000000000", + "0x11ec00f849b6319cf51aa8dd8f66b35529c0be77": "2000000000000000000000", + "0x610fd6ee4eebab10a8c55d0b4bd2e7d6ef817156": "20002000000000000000", + "0xa422e4bf0bf74147cc895bed8f16d3cef3426154": "349281000000000000000", + "0x745aecbaf9bb39b74a67ea1ce623de368481baa6": "10000000000000000000000", + "0x9f496cb2069563144d0811677ba0e4713a0a4143": "1122000000000000000000", + "0xc500b720734ed22938d78c5e48b2ba9367a575ba": "33400000000000000000000", + "0xcd072e6e1833137995196d7bb1725fef8761f655": "6000000000000000000000", + "0x94644ad116a41ce2ca7fbec609bdef738a2ac7c7": "5000000000000000000000", + "0xe8d942d82f175ecb1c16a405b10143b3f46b963a": "568600000000000000000", + "0xf73dd9c142b71bce11d06e30e7e7d032f2ec9c9e": "1970000000000000000000", + "0x1327d759d56e0ab87af37ecf63fe01f310be100a": "659200000000000000000", + "0x28fa2580f9ebe420f3e5eefdd371638e3b7af499": "6000000000000000000000", + "0x024bdd2c7bfd500ee7404f7fb3e9fb31dd20fbd1": "180000000000000000000", + "0xb4b14bf45455d0ab0803358b7524a72be1a2045b": "500000000000000000000", + "0xb1e2dd95e39ae9775c55aeb13f12c2fa233053ba": "2000000000000000000000", + "0x35b03ea4245736f57b85d2eb79628f036ddcd705": "4000000000000000000000", + "0xeb2ef3d38fe652403cd4c9d85ed7f0682cd7c2de": "42784000000000000000000", + "0x690594d306613cd3e2fd24bca9994ad98a3d73f8": "2000000000000000000000", + "0x8397a1bc47acd647418159b99cea57e1e6532d6e": "9169160000000000000000", + "0xb44815a0f28e569d0e921a4ade8fb2642526497a": "55500000000000000000", + "0xe24109be2f513d87498e926a286499754f9ed49e": "886500000000000000000", + "0x37ac29bda93f497bc4aeaab935452c431510341e": "985000000000000000000", + "0x4a81abe4984c7c6bef63d69820e55743c61f201c": "16011846000000000000000", + "0x66dcc5fb4ee7fee046e141819aa968799d644491": "1337000000000000000000", + "0x43ff38743ed0cd43308c066509cc8e7e72c862aa": "1940000000000000000000", + "0xb8f20005b61352ffa7699a1b52f01f5ab39167f1": "10000000000000000000000", + "0x1cda411bd5163baeca1e558563601ce720e24ee1": "18200000000000000000", + "0x86245f596691093ece3f3d3ca2263eace81941d9": "188000000000000000000", + "0xf52a5882e8927d944b359b26366ba2b9cacfbae8": "25000080000000000000000", + "0x118c18b2dce170e8f445753ba5d7513cb7636d2d": "8800000000000000000000", + "0x7168b3bb8c167321d9bdb023a6e9fd11afc9afd9": "1790000000000000000000", + "0xd9103bb6b67a55a7fece2d1af62d457c2178946d": "1000000000000000000000", + "0x8b9fda7d981fe9d64287f85c94d83f9074849fcc": "14000000000000000000000", + "0x91211712719f2b084d3b3875a85069f466363141": "1000000000000000000000", + "0x4863849739265a63b0a2bf236a5913e6f959ce15": "1520000000000000000000", + "0xc2d1778ef6ee5fe488c145f3586b6ebbe3fbb445": "1146000000000000000000", + "0x2b77a4d88c0d56a3dbe3bae04a05f4fcd1b757e1": "300000000000000000000", + "0xfe9c0fffefb803081256c0cf4d6659e6d33eb4fb": "1528000000000000000000", + "0x893017ff1adad499aa065401b4236ce6e92b625a": "1999944000000000000000", + "0x073c67e09b5c713c5221c8a0c7f3f74466c347b0": "19400000000000000000000", + "0x93e303411afaf6c107a44101c9ac5b36e9d6538b": "66000000000000000000000", + "0x0ec50aa823f465b9464b0bc0c4a57724a555f5d6": "59100000000000000000000", + "0xa3e3a6ea509573e21bd0239ece0523a7b7d89b2f": "1970000000000000000000", + "0xc069ef0eb34299abd2e32dabc47944b272334824": "120000000000000000000", + "0x28a3da09a8194819ae199f2e6d9d1304817e28a5": "2000000000000000000000", + "0xe9495ba5842728c0ed97be37d0e422b98d69202c": "2000000000000000000000", + "0xbba976f1a1215f7512871892d45f7048acd356c8": "2000000000000000000000", + "0x887cac41cd706f3345f2d34ac34e01752a6e5909": "595366000000000000000", + "0xe0e0b2e29dde73af75987ee4446c829a189c95bc": "149000000000000000000", + "0x4a5fae3b0372c230c125d6d470140337ab915656": "1600000000000000000000", + "0x425177eb74ad0a9d9a5752228147ee6d6356a6e6": "13370000000000000000", + "0x5db7bba1f9573f24115d8c8c62e9ce8895068e9f": "49984000000000000000", + "0xfa6a37f018e97967937fc5e8617ba1d786dd5f77": "19999800000000000000000", + "0x45e3a93e72144ada860cbc56ff85145ada38c6da": "1610000000000000000000", + "0x67da922effa472a6b124e84ea8f86b24e0f515aa": "20000000000000000000", + "0xaa9bd4589535db27fa2bc903ca17d679dd654806": "2000000000000000000000", + "0x16a9e9b73ae98b864d1728798b8766dbc6ea8d12": "957480000000000000000", + "0xd6580ab5ed4c7dfa506fa6fe64ad5ce129707732": "4000000000000000000000", + "0x984a7985e3cc7eb5c93691f6f8cc7b8f245d01b2": "6000000000000000000000", + "0x7746b6c6699c8f34ca2768a820f1ffa4c207fe05": "4000086000000000000000", + "0x2fa491fb5920a6574ebd289f39c1b2430d2d9a6a": "2000000000000000000000", + "0xfae76719d97eac41870428e940279d97dd57b2f6": "98500000000000000000000", + "0x41b2dbd79dda9b864f6a7030275419c39d3efd3b": "3200000000000000000000", + "0xdd8254121a6e942fc90828f2431f511dad7f32e6": "3018000000000000000000", + "0x37fac1e6bc122e936dfb84de0c4bef6e0d60c2d7": "2000000000000000000000", + "0x3a10888b7e149cae272c01302c327d0af01a0b24": "17000000000000000000", + "0x401354a297952fa972ad383ca07a0a2811d74a71": "14000000000000000000", + "0x51865db148881951f51251710e82b9be0d7eadb2": "2000000000000000000000", + "0xbbbd6ecbb5752891b4ceb3cce73a8f477059376f": "36000000000000000000", + "0x3f236108eec72289bac3a65cd283f95e041d144c": "999925000000000000000", + "0xdc83b6fd0d512131204707eaf72ea0c8c9bef976": "2000000000000000000000", + "0x036eeff5ba90a6879a14dff4c5043b18ca0460c9": "100000000000000000000", + "0xfac5ca94758078fbfccd19db3558da7ee8a0a768": "1017500000000000000000", + "0xd0d62c47ea60fb90a3639209bbfdd4d933991cc6": "194000000000000000000", + "0x891cb8238c88e93a1bcf61db49bd82b47a7f4f84": "2680000000000000000000", + "0xdf53003346d65c5e7a646bc034f2b7d32fcbe56a": "2000000000000000000000", + "0x6e89c51ea6de13e06cdc748b67c4410fe9bcab03": "4000000000000000000000", + "0xa61cdbadf04b1e54c883de6005fcdf16beb8eb2f": "2000000000000000000000", + "0xe3951de5aefaf0458768d774c254f7157735e505": "1600930000000000000000", + "0xf2732cf2c13b8bb8e7492a988f5f89e38273ddc8": "600000000000000000000", + "0x4752218e54de423f86c0501933917aea08c8fed5": "20000000000000000000000", + "0x152f4e860ef3ee806a502777a1b8dbc91a907668": "600000000000000000000", + "0x15b96f30c23b8664e7490651066b00c4391fbf84": "410650000000000000000", + "0x8693e9b8be94425eef7969bc69f9d42f7cad671e": "1000090000000000000000", + "0xf41557dfdfb1a1bdcefefe2eba1e21fe0a4a9942": "1970000000000000000000", + "0x38458e0685573cb4d28f53098829904570179266": "40000000000000000000", + "0x53e4d9696dcb3f4d7b3f70dcaa4eecb71782ff5c": "200000000000000000000", + "0x2dca0e449ab646dbdfd393a96662960bcab5ae1e": "40000000000000000000000", + "0x87d7ac0653ccc67aa9c3469eef4352193f7dbb86": "200000000000000000000000", + "0xae9f5c3fbbe0c9bcbf1af8ff74ea280b3a5d8b08": "1730000000000000000000", + "0x7751f363a0a7fd0533190809ddaf9340d8d11291": "20000000000000000000", + "0x708a2af425ceb01e87ffc1be54c0f532b20eacd6": "134159000000000000000", + "0xac122a03cd058c122e5fe17b872f4877f9df9572": "1969606000000000000000", + "0x5da4ca88935c27f55c311048840e589e04a8a049": "80000000000000000000", + "0xe67c2c1665c88338688187629f49e99b60b2d3ba": "200000000000000000000", + "0xdec82373ade8ebcf2acb6f8bc2414dd7abb70d77": "200000000000000000000", + "0x47c247f53b9fbeb17bba0703a00c009fdb0f6eae": "20000000000000000000000", + "0x9a522e52c195bfb7cf5ffaaedb91a3ba7468161d": "1000000000000000000000", + "0x3159e90c48a915904adfe292b22fa5fd5e72796b": "1008800000000000000000", + "0xdefddfd59b8d2c154eecf5c7c167bf0ba2905d3e": "93588000000000000000", + "0xad1d68a038fd2586067ef6d135d9628e79c2c924": "4686168000000000000000", + "0x038e45eadd3d88b87fe4dab066680522f0dfc8f9": "10000000000000000000000", + "0x2561ec0f379218fe5ed4e028a3f744aa41754c72": "13370000000000000000", + "0xb95396daaa490df2569324fcc6623be052f132ca": "2000000000000000000000", + "0x2376ada90333b1d181084c97e645e810aa5b76f1": "750000000000000000000", + "0x07800d2f8068e448c79a4f69b1f15ef682aae5f6": "19400000000000000000000", + "0xadeb204aa0c38e179e81a94ed8b3e7d53047c26b": "608000000000000000000", + "0x0dc100b107011c7fc0a1339612a16ccec3285208": "2000000000000000000000", + "0xf0b1340b996f6f0bf0d9561c849caf7f4430befa": "100000000000000000000", + "0xe1443dbd95cc41237f613a48456988a04f683282": "4000086000000000000000", + "0xd3c6f1e0f50ec3d2a67e6bcd193ec7ae38f1657f": "6618150000000000000000", + "0xb68899e7610d4c93a23535bcc448945ba1666f1c": "200000000000000000000", + "0xa7253763cf4a75df92ca1e766dc4ee8a2745147b": "10740000000000000000000", + "0x75d67ce14e8d29e8c2ffe381917b930b1aff1a87": "3000000000000000000000", + "0x493d48bda015a9bfcf1603936eab68024ce551e0": "22528000000000000000", + "0x7ddd57165c87a2707f025dcfc2508c09834759bc": "1400000000000000000000", + "0xcff7f89a4d4219a38295251331568210ffc1c134": "1760000000000000000000", + "0x168d30e53fa681092b52e9bae15a0dcb41a8c9bb": "100000000000000000000", + "0x99b743d1d9eff90d9a1934b4db21d519d89b4a38": "100000000000000000000", + "0xa3d0b03cffbb269f796ac29d80bfb07dc7c6ad06": "2000000000000000000000", + "0x816d9772cf11399116cc1e72c26c6774c9edd739": "200000000000000000000", + "0xa880e2a8bf88a1a82648b4013c49c4594c433cc8": "4728000000000000000000", + "0x2a44a7218fe44d65a1b4b7a7d9b1c2c52c8c3e34": "62221355000000000000000", + "0xcb86edbc8bbb1f9131022be649565ebdb09e32a1": "2000000000000000000000", + "0x3915eab5ab2e5977d075dec47d96b68b4b5cf515": "61520000000000000000000", + "0x8165cab0eafb5a328fc41ac64dae715b2eef2c65": "1000000000000000000000", + "0x416c86b72083d1f8907d84efd2d2d783dffa3efb": "1999944000000000000000", + "0xc524086d46c8112b128b2faf6f7c7d8160a8386c": "400000000000000000000", + "0x902d74a157f7d2b9a3378b1f56703730e03a1719": "4000000000000000000000", + "0x74ef2869cbe608856045d8c2041118579f2236ea": "59724000000000000000", + "0xaf992dd669c0883e5515d3f3112a13f617a4c367": "2000000000000000000000", + "0x4c6a248fc97d705def495ca20759169ef0d36471": "760000000000000000000", + "0x974d2f17895f2902049deaaecf09c3046507402d": "14707000000000000000", + "0x0239b4f21f8e05cd01512b2be7a0e18a6d974607": "1000000000000000000000", + "0xb97a6733cd5fe99864b3b33460d1672434d5cafd": "1999579000000000000000", + "0xf558a2b2dd26dd9593aae04531fd3c3cc3854b67": "198000000000000000000", + "0xb577b6befa054e9c040461855094b002d7f57bd7": "114000000000000000000000", + "0x73bfe7710f31cab949b7a2604fbf5239cee79015": "2000000000000000000000", + "0x5717f2d8f18ffcc0e5fe247d3a4219037c3a649c": "3998000000000000000000", + "0x20707e425d2a11d2c89f391b2b809f556c592421": "2000000000000000000000", + "0x9a6708ddb8903c289f83fe889c1edcd61f854423": "1000000000000000000000", + "0xfa27cc49d00b6c987336a875ae39da58fb041b2e": "10000000000000000000000", + "0xd688e785c98f00f84b3aa1533355c7a258e87948": "500000000000000000000", + "0x927cb7dc187036b5427bc7e200c5ec450c1d27d4": "216000000000000000000", + "0xb2bfaa58b5196c5cb7f89de15f479d1838de713d": "21000000000000000000", + "0xe180de9e86f57bafacd7904f9826b6b4b26337a3": "830400000000000000000", + "0xa1204dad5f560728a35c0d8fc79481057bf77386": "1000000000000000000000", + "0x6b0da25af267d7836c226bcae8d872d2ce52c941": "6000000000000000000000", + "0x0517448dada761cc5ba4033ee881c83037036400": "1998000000000000000000", + "0x7ed0a5a847bef9a9da7cba1d6411f5c316312619": "39842000000000000000", + "0x5b5d517029321562111b43086d0b043591109a70": "2600000000000000000000", + "0x56fc1a7bad4047237ce116146296238e078f93ad": "178000000000000000000", + "0x6c5422fb4b14e6d98b6091fdec71f1f08640419d": "400000000000000000000", + "0x108fe8ee2a13da487b22c6ab6d582ea71064d98c": "399800000000000000000", + "0x0ad3e44d3c001fa290b393617030544108ac6eb9": "1969019000000000000000", + "0x25aee68d09afb71d8817f3f184ec562f7897b734": "2000000000000000000000", + "0xc2340a4ca94c9678b7494c3c852528ede5ee529f": "48669000000000000000", + "0x44901e0d0e08ac3d5e95b8ec9d5e0ff5f12e0393": "417500000000000000000", + "0x8775a610c502b9f1e6ad4cdadb8ce29bff75f6e4": "600000000000000000000", + "0x682897bc4f8e89029120fcffb787c01a93e64184": "10000000000000000000000", + "0xf7acff934b84da0969dc37a8fcf643b7d7fbed41": "1999944000000000000000", + "0xf05fcd4c0d73aa167e5553c8c0d6d4f2faa39757": "13334000000000000000000", + "0xc981d312d287d558871edd973abb76b979e5c35e": "1970000000000000000000", + "0x9da61ccd62bf860656e0325d7157e2f160d93bb5": "4999980000000000000000", + "0xd284a50382f83a616d39b8a9c0f396e0ebbfa95d": "1000070000000000000000", + "0xd6cf5c1bcf9da662bcea2255905099f9d6e84dcc": "8349332000000000000000", + "0xc71b2a3d7135d2a85fb5a571dcbe695e13fc43cd": "1000000000000000000000", + "0xb22dadd7e1e05232a93237baed98e0df92b1869e": "2000000000000000000000", + "0xb09fe6d4349b99bc37938054022d54fca366f7af": "200000000000000000000000", + "0x427e4751c3babe78cff8830886febc10f9908d74": "1970000000000000000000", + "0x60b358cb3dbefa37f47df2d7365840da8e3bc98c": "20000000000000000000", + "0xdcd5bca2005395b675fde5035659b26bfefc49ee": "197000000000000000000", + "0x81186931184137d1192ac88cd3e1e5d0fdb86a74": "2900000000000000000000", + "0xde212293f8f1d231fa10e609470d512cb8ffc512": "2000000000000000000000", + "0x1937c5c515057553ccbd46d5866455ce66290284": "1000000000000000000000000", + "0x592777261e3bd852c48eca95b3a44c5b7f2d422c": "20000000000000000000000", + "0xbbf84292d954acd9e4072fb860b1504106e077ae": "1500000000000000000000", + "0x3b4100e30a73b0c734b18ffa8426d19b19312f1a": "55300000000000000000000", + "0xa03a3dc7c533d1744295be955d61af3f52b51af5": "40000000000000000000", + "0x4aa148c2c33401e66a2b586e6577c4b292d3f240": "216200000000000000000", + "0xff850e3be1eb6a4d726c08fa73aad358f39706da": "1940000000000000000000", + "0x743651b55ef8429df50cf81938c2508de5c8870f": "2000000000000000000000", + "0x3700e3027424d939dbde5d42fb78f6c4dbec1a8f": "40000000000000000000", + "0xc1cbd2e2332a524cf219b10d871ccc20af1fb0fa": "1000000000000000000000", + "0xe25b9f76b8ad023f057eb11ad94257a0862e4e8c": "2000000000000000000000", + "0x719e891fbcc0a33e19c12dc0f02039ca05b801df": "6185800000000000000000", + "0x39636b25811b176abfcfeeca64bc87452f1fdff4": "400000000000000000000", + "0x631030a5b27b07288a45696f189e1114f12a81c0": "499970000000000000000", + "0xbcc84597b91e73d5c5b4d69c80ecf146860f779a": "4380000000000000000000", + "0x095e0174829f34c3781be1a5e38d1541ea439b7f": "6000000000000000000000", + "0x2e7e05e29edda7e4ae25c5173543efd71f6d3d80": "6000000000000000000000", + "0xdbb6ac484027041642bbfd8d80f9d0c1cf33c1eb": "2000000000000000000000", + "0x153c08aa8b96a611ef63c0253e2a4334829e579d": "394000000000000000000", + "0x10f4bff0caa5027c0a6a2dcfc952824de2940909": "2000000000000000000000", + "0x2ef869f0350b57d53478d701e3fee529bc911c75": "50000000000000000000", + "0x70ab34bc17b66f9c3b63f151274f2a727c539263": "2000000000000000000000", + "0x3201259caf734ad7581c561051ba0bca7fd6946b": "180000000000000000000000", + "0x84e9cf8166c36abfa49053b7a1ad4036202681ef": "2000000000000000000000", + "0x4ebc5629f9a6a66b2cf3363ac4895c0348e8bf87": "1000090000000000000000", + "0xe50b464ac9de35a5618b7cbf254674182b81b97e": "4100000000000000000000", + "0x2abdf1a637ef6c42a7e2fe217773d677e804ebdd": "5000000000000000000000", + "0x7a0a78a9cc393f91c3d9e39a6b8c069f075e6bf5": "1337000000000000000000", + "0x2d9c5fecd2b44fbb6a1ec732ea059f4f1f9d2b5c": "1010694000000000000000", + "0x7b712c7af11676006a66d2fc5c1ab4c479ce6037": "8000000000000000000000", + "0x3466f67e39636c01f43b3a21a0e8529325c08624": "842864000000000000000", + "0xfdd502a74e813bcfa355ceda3c176f6a6871af7f": "400000000000000000000", + "0x26475419c06d5f147aa597248eb46cf7befa64a5": "1640000000000000000000", + "0x9243d7762d77287b12638688b9854e88a769b271": "1000000000000000000000", + "0x723d8baa2551d2addc43c21b45e8af4ca2bfb2c2": "1760000000000000000000", + "0xf2fbb6d887f8b8cc3a869aba847f3d1f643c53d6": "3999000000000000000000", + "0x2cdb3944650616e47cb182e060322fa1487978ce": "1820000000000000000000", + "0xf0d21663d8b0176e05fde1b90ef31f8530fda95f": "1999944000000000000000", + "0x77cc02f623a9cf98530997ea67d95c3b491859ae": "1354900000000000000000", + "0xd1b5a454ac3405bb4179208c6c84de006bcb9be9": "500000000000000000000", + "0xb9920fd0e2c735c256463caa240fb7ac86a93dfa": "1760000000000000000000", + "0xed1f1e115a0d60ce02fb25df014d289e3a0cbe7d": "500000000000000000000", + "0x23e2c6a8be8e0acfa5c4df5e36058bb7cbac5a81": "2000000000000000000000", + "0xf0be0faf4d7923fc444622d1980cf2d990aab307": "2000000000000000000000", + "0x0829d0f7bb7c446cfbb0deadb2394d9db7249a87": "40110000000000000000", + "0x2ecac504b233866eb5a4a99e7bd2901359e43b3d": "20000000000000000000000", + "0x06d6cb308481c336a6e1a225a912f6e6355940a1": "1760000000000000000000", + "0xd4879fd12b1f3a27f7e109761b23ca343c48e3d8": "666000000000000000000", + "0x857f100b1a5930225efc7e9020d78327b41c02cb": "2000000000000000000000", + "0x3aa42c21b9b31c3e27ccd17e099af679cdf56907": "8000000000000000000000", + "0x764d5212263aff4a2a14f031f04ec749dc883e45": "1850000000000000000000", + "0xd03a2da41e868ed3fef5745b96f5eca462ff6fda": "3000000000000000000000", + "0x4f26690c992b7a312ab12e1385d94acd58288e7b": "14000000000000000000000", + "0x7b122162c913e7146cad0b7ed37affc92a0bf27f": "1506799000000000000000", + "0xc87352dba582ee2066b9c002a962e003134f78b1": "500000000000000000000", + "0x9f4ac9c9e7e24cb2444a0454fa5b9ad9d92d3853": "835000000000000000000", + "0xccf62a663f1353ba2ef8e6521dc1ecb673ec8ef7": "152000000000000000000", + "0x557f5e65e0da33998219ad4e99570545b2a9d511": "11024000000000000000000", + "0xa5f0077b351f6c505cd515dfa6d2fa7f5c4cd287": "40000000000000000000000", + "0x79c6002f8452ca157f1317e80a2faf24475559b7": "20000000000000000000", + "0x3aa07a34a1afc8967d3d1383b96b62cf96d5fa90": "20000000000000000000000", + "0x7f389c12f3c6164f6446566c77669503c2792527": "98500000000000000000", + "0xac4cc256ae74d624ace80db078b2207f57198f6b": "2001000000000000000000", + "0x823ba7647238d113bce9964a43d0a098118bfe4d": "200000000000000000000", + "0xf5a7676ad148ae9c1ef8b6f5e5a0c2c473be850b": "200000000000000000000", + "0x7d34803569e00bd6b59fff081dfa5c0ab4197a62": "1712700000000000000000", + "0x061ea4877cd08944eb64c2966e9db8dedcfec06b": "1000000000000000000000", + "0xdf37c22e603aedb60a627253c47d8ba866f6d972": "24000000000000000000000", + "0x529aa002c6962a3a8545027fd8b05f22b5bf9564": "1670000000000000000000", + "0xeb89a882670909cf377e9e78286ee97ba78d46c2": "802200000000000000000", + "0x9ac85397792a69d78f286b86432a07aeceb60e64": "14300000000000000000", + "0x9610592202c282ab9bd8a884518b3e0bd4758137": "268000000000000000000", + "0x73932709a97f02c98e51b091312865122385ae8e": "1430000000000000000000", + "0x5ef8c96186b37984cbfe04c598406e3b0ac3171f": "9400000000000000000000", + "0xb6f78da4f4d041b3bc14bc5ba519a5ba0c32f128": "172326253000000000000000", + "0x6f0edd23bcd85f6015f9289c28841fe04c83efeb": "19100000000000000000", + "0xa8a43c009100616cb4ae4e033f1fc5d7e0b6f152": "3939015000000000000000", + "0x7081fa6baad6cfb7f51b2cca16fb8970991a64ba": "233953000000000000000", + "0x9de7386dde401ce4c67b71b6553f8aa34ea5a17d": "60000000000000000000", + "0x54ec7300b81ac84333ed1b033cd5d7a33972e234": "200000000000000000000", + "0x67a80e0190721f94390d6802729dd12c31a895ad": "1999964000000000000000", + "0x3a4297da3c555e46c073669d0478fce75f2f790e": "1969606000000000000000", + "0xc2e0584a71348cc314b73b2029b6230b92dbb116": "2000000000000000000000", + "0x0a2ade95b2e8c66d8ae6f0ba64ca57d783be6d44": "4000000000000000000000", + "0x544b5b351d1bc82e9297439948cf4861dac9ae11": "22000000000000000000000", + "0x3ae62bd271a760637fad79c31c94ff62b4cd12f7": "2000000000000000000000", + "0x0d8023929d917234ae40512b1aabb5e8a4512771": "148000000000000000000", + "0x2858acacaf21ea81cab7598fdbd86b452e9e8e15": "666000000000000000000", + "0xc033b1325a0af45472c25527853b1f1c21fa35de": "2000000000000000000000", + "0xbbf85aaaa683738f073baef44ac9dc34c4c779ea": "2000000000000000000000", + "0x6ae57f27917c562a132a4d1bf7ec0ac785832926": "6000000000000000000000", + "0x88e6f9b247f988f6c0fc14c56f1de53ec69d43cc": "100000000000000000000", + "0xb72c2a011c0df50fbb6e28b20ae1aad217886790": "4000000000000000000000", + "0x161caf5a972ace8379a6d0a04ae6e163fe21df2b": "100000000000000000000000", + "0x2a63590efe9986c3fee09b0a0a338b15bed91f21": "6458400000000000000000", + "0x50e1c8ec98415bef442618708799437b86e6c205": "6000000000000000000000", + "0x33f4a6471eb1bca6a9f85b3b4872e10755c82be1": "2000000000000000000000", + "0x9c49deff47085fc09704caa2dca8c287a9a137da": "8000000000000000000000", + "0xe1173a247d29d8238df0922f4df25a05f2af77c3": "40007051000000000000000", + "0x51891b2ccdd2f5a44b2a8bc49a5d9bca6477251c": "310000000000000000000", + "0xecaf3350b7ce144d068b186010852c84dd0ce0f0": "2000000000000000000000", + "0x72393d37b451effb9e1ff3b8552712e2a970d8c2": "985000000000000000000", + "0x1bbc60bcc80e5cdc35c5416a1f0a40a83dae867b": "2000000000000000000000", + "0xb8ab39805bd821184f6cbd3d2473347b12bf175c": "118200000000000000000", + "0xc55a6b4761fd11e8c85f15174d74767cd8bd9a68": "133700000000000000000", + "0x99d1b585965f406a42a49a1ca70f769e765a3f98": "16700000000000000000000", + "0x9ab988b505cfee1dbe9cd18e9b5473b9a2d4f536": "320000000000000000000", + "0x7fef8c38779fb307ec6f044bebe47f3cfae796f1": "168561000000000000000", + "0x322d6f9a140d213f4c80cd051afe25c620bf4c7d": "20000000000000000000", + "0x3bd9a06d1bd36c4edd27fc0d1f5b088ddae3c72a": "499970000000000000000", + "0x5dcdb6b87a503c6d8a3c65c2cf9a9aa883479a1e": "9200000000000000000000", + "0x6e84c2fd18d8095714a96817189ca21cca62bab1": "340935000000000000000", + "0xa5bad86509fbe0e0e3c0e93f6d381f1af6e9d481": "6000000000000000000000", + "0x3954bdfe0bf587c695a305d9244c3d5bdddac9bb": "19187461000000000000000", + "0x63f0e5a752f79f67124eed633ad3fd2705a397d4": "3940000000000000000000", + "0x33fd718f0b91b5cec88a5dc15eecf0ecefa4ef3d": "432500000000000000000", + "0x68027d19558ed7339a08aee8de3559be063ec2ea": "2000000000000000000000", + "0x96f0462ae6f8b96088f7e9c68c74b9d8ad34b347": "1790000000000000000000", + "0xf1f391ca92808817b755a8b8f4e2ca08d1fd1108": "6000000000000000000000", + "0x7fcf5ba6666f966c5448c17bf1cb0bbcd8019b06": "99999000000000000000", + "0xe9b9a2747510e310241d2ece98f56b3301d757e0": "2000000000000000000000", + "0x2100381d60a5b54adc09d19683a8f6d5bb4bfbcb": "10000000000000000000000", + "0x7495ae78c0d90261e2140ef2063104731a60d1ed": "34250000000000000000", + "0xdc911cf7dc5dd0813656670528e9338e67034786": "2000000000000000000000", + "0x262aed4bc0f4a4b2c6fb35793e835a49189cdfec": "10000000000000000000000", + "0x9ee93f339e6726ec65eea44f8a4bfe10da3d3282": "2000000000000000000000", + "0xa3a57b0716132804d60aac281197ff2b3d237b01": "1400000000000000000000", + "0xc799e34e88ff88be7de28e15e4f2a63d0b33c4cb": "200000000000000000000", + "0xc7506c1019121ff08a2c8c1591a65eb4bdfb4a3f": "600000000000000000000", + "0x795ebc2626fc39b0c86294e0e837dcf523553090": "1000000000000000000000", + "0x441aca82631324acbfa2468bda325bbd78477bbf": "6000000000000000000000", + "0x9f271d285500d73846b18f733e25dd8b4f5d4a8b": "722000000000000000000", + "0xd77892e2273b235d7689e430e7aeed9cbce8a1f3": "2000000000000000000000", + "0x4f8972838f70c903c9b6c6c46162e99d6216d451": "4610000000000000000000", + "0x4c85ed362f24f6b9f04cdfccd022ae535147cbb9": "1500000000000000000000", + "0x3807eff43aa97c76910a19752dd715ee0182d94e": "250190000000000000000", + "0x3a9e5441d44b243be55b75027a1ceb9eacf50df2": "1000000000000000000000", + "0x3deae43327913f62808faa1b6276a2bd6368ead9": "2000000000000000000000", + "0xc270456885342b640b4cfc1b520e1a544ee0d571": "1820000000000000000000", + "0x77798f201257b9c35204957057b54674aefa51df": "149000000000000000000", + "0x225f9eb3fb6ff3e9e3c8447e14a66e8d4f3779f6": "2000000000000000000000", + "0x78df2681d6d602e22142d54116dea15d454957aa": "298000000000000000000", + "0x283396ce3cac398bcbe7227f323e78ff96d08767": "400000000000000000000", + "0x747ff7943b71dc4dcdb1668078f83dd7cc4520c2": "60000000000000000000", + "0xa4ed11b072d89fb136759fc69b428c48aa5d4ced": "262800000000000000000", + "0xcc043c4388d345f884c6855e71142a9f41fd6935": "20000000000000000000", + "0xab14d221e33d544629198cd096ed63dfa28d9f47": "6000000000000000000000", + "0x251e6838f7cec5b383c1d90146341274daf8e502": "147510000000000000000", + "0x36a0e61e1be47fa87e30d32888ee0330901ca991": "20000000000000000000", + "0xbcfc98e5c82b6adb180a3fcb120b9a7690c86a3f": "1970000000000000000000", + "0x18a6d2fc52be73084023c91802f05bc24a4be09f": "2000000000000000000000", + "0x80591a42179f34e64d9df75dcd463b28686f5574": "20000000000000000000000", + "0x881230047c211d2d5b00d8de4c5139de5e3227c7": "10000000000000000000000", + "0x9eb1ff71798f28d6e989fa1ea0588e27ba86cb7d": "140800000000000000000", + "0xa01fd1906a908506dedae1e208128872b56ee792": "3000000000000000000000", + "0x1b05ea6a6ac8af7cb6a8b911a8cce8fe1a2acfc8": "2000000000000000000000", + "0x6add932193cd38494aa3f03aeccc4b7ab7fabca2": "89600000000000000000", + "0x2aaa35274d742546670b7426264521032af4f4c3": "10000000000000000000000", + "0x67b8a6e90fdf0a1cac441793301e8750a9fa7957": "895000000000000000000", + "0x5b5be0d8c67276baabd8edb30d48ea75640b8b29": "824480000000000000000", + "0x28d7e5866f1d85fd1ceb32bfbe1dfc36db434566": "7199000000000000000000", + "0x98e3e90b28fccaee828779b8d40a5568c4116e21": "40000000000000000000", + "0x2dd578f7407dfbd548d05e95ccc39c485429626a": "4200000000000000000000", + "0x8ca6989746b06e32e2487461b1ce996a273acfd7": "20000000000000000000", + "0xa6f93307f8bce03195fece872043e8a03f7bd11a": "2886000000000000000000", + "0xefbd52f97da5fd3a673a46cbf330447b7e8aad5c": "100033000000000000000", + "0x52bdd9af5978850bc24110718b3723759b437e59": "1730000000000000000000", + "0x6e073b66d1b8c66744d88096a8dd99ec7e0228da": "4000000000000000000000", + "0xa29d661a6376f66d0b74e2fe9d8f26c0247ec84c": "4117300000000000000000", + "0x7d34ff59ae840a7413c6ba4c5bb2ba2c75eab018": "3000000000000000000000", + "0x2eca6a3c5d9f449d0956bd43fa7b4d7be8435958": "2000020000000000000000", + "0xf59f9f02bbc98efe097eabb78210979021898bfd": "9999800000000000000000", + "0x90e300ac71451e401f887f6e7728851647a80e07": "400000000000000000000", + "0x05ae7fd4bbcc80ca11a90a1ec7a301f7cccc83db": "910000000000000000000", + "0xe54102534de8f23effb093b31242ad3b233facfd": "4000000000000000000000", + "0xc127aab59065a28644a56ba3f15e2eac13da2995": "600000000000000000000", + "0xed60c4ab6e540206317e35947a63a9ca6b03e2cb": "57275000000000000000", + "0xd855b03ccb029a7747b1f07303e0a664793539c8": "2000000000000000000000", + "0x1178501ff94add1c5881fe886136f6dfdbe61a94": "158000000000000000000", + "0xf447108b98df64b57e871033885c1ad71db1a3f9": "6916709000000000000000", + "0xdeee2689fa9006b59cf285237de53b3a7fd01438": "450034000000000000000", + "0x7f01dc7c3747ca608f983dfc8c9b39e755a3b914": "206980000000000000000", + "0x9edeac4c026b93054dc5b1d6610c6f3960f2ad73": "1200000000000000000000", + "0xe3cffe239c64e7e20388e622117391301b298696": "500000000000000000000", + "0xebbb4f2c3da8be3eb62d1ffb1f950261cf98ecda": "2000000000000000000000", + "0x38c10b90c859cbb7815692f99dae520ab5febf5e": "13169000000000000000000", + "0x23f9ecf3e5dddca38815d3e59ed34b5b90b4a353": "204608000000000000000", + "0xd7fa5ffb6048f96fb1aba09ef87b1c11dd7005e4": "1000000000000000000000", + "0x9ca42ee7a0b898f6a5cc60b5a5d7b1bfa3c33231": "2000000000000000000000", + "0x8b9577920053b1a00189304d888010d9ef2cb4bf": "500000000000000000000", + "0xfcd0b4827cd208ffbf5e759dba8c3cc61d8c2c3c": "8000000000000000000000", + "0x01ff1eb1dead50a7f2f9638fdee6eccf3a7b2ac8": "600000000000000000000", + "0xabde147b2af789eaa586547e66c4fa2664d328a4": "247545000000000000000", + "0x64042ba68b12d4c151651ca2813b7352bd56f08e": "600000000000000000000", + "0xdccca42045ec3e16508b603fd936e7fd7de5f36a": "19700000000000000000", + "0xe77a89bd45dc04eeb4e41d7b596b707e6e51e74c": "12000000000000000000000", + "0xf77c7b845149efba19e261bc7c75157908afa990": "2000000000000000000000", + "0xfa5201fe1342af11307b9142a041243ca92e2f09": "152150000000000000000000", + "0x40df495ecf3f8b4cef2a6c189957248fe884bc2b": "12000000000000000000000", + "0x3d79a853d71be0621b44e29759656ca075fdf409": "2000000000000000000000", + "0x6de02f2dd67efdb7393402fa9eaacbcf589d2e56": "1182000000000000000000", + "0x729aad4627744e53f5d66309aa74448b3acdf46f": "2000000000000000000000", + "0x4e4318f5e13e824a54edfe30a7ed4f26cd3da504": "2000000000000000000000", + "0xc6a286e065c85f3af74812ed8bd3a8ce5d25e21d": "18200000000000000000", + "0xfd686de53fa97f99639e2568549720bc588c9efc": "1969606000000000000000", + "0x06b0ff834073cce1cbc9ea557ea87b605963e8b4": "300000000000000000000", + "0x72b5633fe477fe542e742facfd690c137854f216": "1670000000000000000000", + "0x8bf373d076814cbc57e1c6d16a82c5be13c73d37": "200000000000000000000", + "0xcf264e6925130906c4d7c18591aa41b2a67f6f58": "2000000000000000000000", + "0x0ea2a210312b3e867ee0d1cc682ce1d666f18ed5": "10000000000000000000000", + "0xd02afecf8e2ec2b62ac8ad204161fd1fae771d0e": "2000000000000000000000", + "0xe6b20f980ad853ad04cbfc887ce6601c6be0b24c": "4000000000000000000000", + "0x4280a58f8bb10b9440de94f42b4f592120820191": "2000000000000000000000", + "0xa914cdb571bfd93d64da66a4e108ea134e50d000": "1430143000000000000000", + "0x60864236930d04d8402b5dcbeb807f3caf611ea2": "4000000000000000000000", + "0xf9dd239008182fb519fb30eedd2093fed1639be8": "500000000000000000000", + "0x18e53243981aabc8767da10c73449f1391560eaa": "6000000000000000000000", + "0xc3a9226ae275df2cab312b911040634a9c9c9ef6": "4000000000000000000000", + "0x4fcc19ea9f4c57dcbce893193cfb166aa914edc5": "7001380000000000000000", + "0xc1e1409ca52c25435134d006c2a6a8542dfb7273": "34380000000000000000", + "0x981ddf0404e4d22dda556a0726f00b2d98ab9569": "999972000000000000000", + "0xe5bcc88c3b256f6ed5fe550e4a18198b943356ad": "2000000000000000000000", + "0x74a17f064b344e84db6365da9591ff1628257643": "20000000000000000000", + "0x2720f9ca426ef2f2cbd2fecd39920c4f1a89e16d": "2000000000000000000000", + "0x8d04a5ebfb5db409db0617c9fa5631c192861f4a": "970000000000000000000", + "0xf18b14cbf6694336d0fe12ac1f25df2da0c05dbb": "3999800000000000000000", + "0x56ac20d63bd803595cec036da7ed1dc66e0a9e07": "63927000000000000000", + "0x92c94c2820dfcf7156e6f13088ece7958b3676fd": "95500000000000000000", + "0x968dea60df3e09ae3c8d3505e9c080454be0e819": "6000000000000000000000", + "0x9268d62646563611dc3b832a30aa2394c64613e3": "2000000000000000000000", + "0x5a192b964afd80773e5f5eda6a56f14e25e0c6f3": "500000000000000000000", + "0xdf8d48b1eb07b3c217790e6c2df04dc319e7e848": "500000000000000000000", + "0x7f61fa6cf5f898b440dac5abd8600d6d691fdef9": "280000000000000000000", + "0x929d368eb46a2d1fbdc8ffa0607ede4ba88f59ad": "2000000000000000000000", + "0x9982a5890ffb5406d3aca8d2bfc1dd70aaa80ae0": "2000000000000000000000", + "0xbf2aea5a1dcf6ed3b5e8323944e983fedfd1acfb": "1580000000000000000000", + "0x46aa501870677e7f0a504876b4e8801a0ad01c46": "800000000000000000000", + "0x8f473d0ab876ddaa15608621d7013e6ff714b675": "470400000000000000000", + "0x02290fb5f9a517f82845acdeca0fc846039be233": "2000000000000000000000", + "0x8a5831282ce14a657a730dc18826f7f9b99db968": "4330268000000000000000", + "0x0328510c09dbcd85194a98d67c33ac49f2f94d60": "11000000000000000000000", + "0xcf883a20329667ea226a1e3c765dbb6bab32219f": "3038972000000000000000", + "0x2615100ea7e25bba9bca746058afbbb4ffbe4244": "500000000000000000000", + "0xb115ee3ab7641e1aa6d000e41bfc1ec7210c2f32": "13000000000000000000000", + "0x5cfa8d568575658ca4c1a593ac4c5d0e44c60745": "291000000000000000000", + "0xd3c24d4b3a5e0ff8a4622d518edd73f16ab28610": "20000000000000000000", + "0xa639acd96b31ba53b0d08763229e1f06fd105e9d": "8000000000000000000000", + "0xffa4aff1a37f984b0a67272149273ae9bd41e3bc": "10000000000000000000000", + "0xcf684dfb8304729355b58315e8019b1aa2ad1bac": "432500000000000000000", + "0x5797b60fd2894ab3c2f4aede86daf2e788d745ad": "6000000000000000000000", + "0xa6a0de421ae54f6d17281308f5646d2f39f7775d": "2000000000000000000000", + "0x08504f05643fab5919f5eea55925d7a3ed7d807a": "20000000000000000000", + "0x7a7068e1c3375c0e599db1fbe6b2ea23b8f407d2": "2000000000000000000000", + "0x1078d7f61b0e56c74ee6635b2e1819ef1e3d8785": "1000000000000000000000", + "0x6e12b51e225b4a4372e59ad7a2a1a13ea3d3a137": "14172200000000000000000", + "0x6a2e86469a5bf37cee82e88b4c3863895d28fcaf": "519000000000000000000", + "0x197672fd39d6f246ce66a790d13aa922d70ea109": "1000000000000000000000", + "0x8009a7cbd192b3aed4adb983d5284552c16c7451": "4000000000000000000000", + "0xf6c3c48a1ac0a34799f04db86ec7a975fe7768f3": "1970000000000000000000", + "0x16be75e98a995a395222d00bd79ff4b6e638e191": "36000000000000000000000", + "0x6c05e34e5ef2f42ed09deff1026cd66bcb6960bb": "2000000000000000000000", + "0x5d6ae8cbd6b3393c22d16254100d0238e808147c": "719992000000000000000", + "0x1a376e1b2d2f590769bb858d4575320d4e149970": "4841200000000000000000", + "0xf6ead67dbf5b7eb13358e10f36189d53e643cfcf": "40000000000000000000000", + "0x467d5988249a68614716659840ed0ae6f6f457bc": "387500000000000000000", + "0xaa960e10c52391c54e15387cc67af827b5316dcc": "2000000000000000000000", + "0x483ba99034e900e3aedf61499d3b2bce39beb7aa": "985000000000000000000", + "0x86f23e9c0aafc78b9c404dcd60339a925bffa266": "400000000000000000000", + "0xd05a447c911dbb275bfb2e5a37e5a703a56f9997": "200000000000000000000", + "0xedb71ec41bda7dce86e766e6e8c3e9907723a69b": "20000000000000000000", + "0xf86a3ea8071f7095c7db8a05ae507a8929dbb876": "336000000000000000000", + "0x323b3cfe3ee62bbde2a261e53cb3ecc05810f2c6": "13790000000000000000000", + "0x936f3813f5f6a13b8e4ffec83fe7f826186a71cd": "520000000000000000000", + "0x6db72bfd43fef465ca5632b45aab7261404e13bf": "2000000000000000000000", + "0x9bb76204186af2f63be79168601687fc9bad661f": "300000000000000000000", + "0x28ab165ffb69eda0c549ae38e9826f5f7f92f853": "1296890000000000000000", + "0xc73e2112282215dc0762f32b7e807dcd1a7aae3e": "6900000000000000000000", + "0xf8086e42661ea929d2dda1ab6c748ce3055d111e": "1000000000000000000000", + "0x4db21284bcd4f787a7556500d6d7d8f36623cf35": "1939806000000000000000", + "0xc48651c1d9c16bff4c9554886c3f3f26431f6f68": "658000000000000000000", + "0x9bdbdc9b973431d13c89a3f9757e9b3b6275bfc7": "499971000000000000000", + "0x560da37e956d862f81a75fd580a7135c1b246352": "10000000000000000000000", + "0x4b60a3e253bf38c8d5662010bb93a473c965c3e5": "1490000000000000000000", + "0x64e02abb016cc23a2934f6bcddb681905021d563": "1000000000000000000000", + "0xac2c8e09d06493a63858437bd20be01962450365": "1910000000000000000000", + "0x9bf9b3b2f23cf461eb591f28340bc719931c8364": "1000000000000000000000", + "0x9b5c39f7e0ac168c8ed0ed340477117d1b682ee9": "98000000000000000000", + "0xf75bb39c799779ebc04a336d260da63146ed98d0": "25000000000000000000", + "0xa7966c489f4c748a7ae980aa27a574251767caf9": "3000000000000000000000", + "0xea53c954f4ed97fd4810111bdab69ef981ef25b9": "17300000000000000000000", + "0x03a26cfc4c18316f70d59e9e1a79ee3e8b962f4c": "2000000000000000000000", + "0x3e63ce3b24ca2865b4c5a687b7aea3597ef6e548": "2000000000000000000000", + "0x500c902958f6421594d1b6ded712490d52ed6c44": "1970000000000000000000", + "0x6f44ca09f0c6a8294cbd519cdc594ad42c67579f": "50000000000000000000", + "0x3616fb46c81578c9c8eb4d3bf880451a88379d7d": "200000000000000000000", + "0x57bc20e2d62b3d19663cdb4c309d5b4f2fc2db8f": "100000000000000000000", + "0x1cebf0985d7f680aaa915c44cc62edb49eab269e": "1000000000000000000000", + "0xc0cbf6032fa39e7c46ff778a94f7d445fe22cf30": "310000000000000000000", + "0xc58b9cc61dedbb98c33f224d271f0e228b583433": "3880000000000000000000", + "0xe9c6dfae97f7099fc5f4e94b784db802923a1419": "48800000000000000000", + "0x9bacd3d40f3b82ac91a264d9d88d908eac8664b9": "20000000000000000000000", + "0x63d80048877596e0c28489e650cd4ac180096a49": "280000000000000000000", + "0xe6a6f6dd6f70a456f4ec15ef7ad5e5dbb68bd7dc": "200000000000000000000", + "0xd418870bc2e4fa7b8a6121ae0872d55247b62501": "1580000000000000000000", + "0xe2f9383d5810ea7b43182b8704b62b27f5925d39": "400000000000000000000", + "0xbd5e473abce8f97a6932f77c2facaf9cc0a00514": "1117350000000000000000", + "0x2ff1ca55fd9cec1b1fe9f0a9abb74c513c1e2aaa": "3000000000000000000000", + "0x9d99b189bbd9a48fc2e16e8fcda33bb99a317bbb": "1126900000000000000000", + "0x6e96faeda3054302c45f58f161324c99a3eebb62": "20000000000000000000", + "0xef93818f684db0c3675ec81332b3183ecc28a495": "1550000000000000000000", + "0x2659facb1e83436553b5b42989adb8075f9953ed": "29356000000000000000", + "0xc4ffadaaf2823fbea7bff702021bffc4853eb5c9": "42233000000000000000", + "0xe9864c1afc8eaad37f3ba56fcb7477cc622009b7": "79000000000000000000", + "0x87ef6d8b6a7cbf9b5c8c97f67ee2adc2a73b3f77": "200400000000000000000", + "0xc043f2452dcb9602ef62bd360e033dd23971fe84": "2000000000000000000000", + "0x0fdd65402395df9bd19fee4507ef5345f745104c": "5000000000000000000000", + "0x939c4313d2280edf5e071bced846063f0a975d54": "120000000000000000000000", + "0xb28245037cb192f75785cb86cbfe7c930da258b0": "16000000000000000000000", + "0xa80cb1738bac08d4f9c08b4deff515545fa8584f": "500000000000000000000", + "0x62971bf2634cee0be3c9890f51a56099dbb9519b": "656000000000000000000", + "0xf2efe96560c9d97b72bd36447843885c1d90c231": "2000000000000000000000", + "0x0e390f44053ddfcef0d608b35e4d9c2cbe9871bb": "1970000000000000000000", + "0x61d101a033ee0e2ebb3100ede766df1ad0244954": "500000000000000000000", + "0x6785513cf732e47e87670770b5419be10cd1fc74": "2000000000000000000000", + "0x167699f48a78c615512515739958993312574f07": "39000000000000000000", + "0x68ec79d5be7155716c40941c79d78d17de9ef803": "500600000000000000000", + "0xa0e8ba661b48154cf843d4c2a5c0f792d528ee29": "400000000000000000000", + "0x1a201b4327cea7f399046246a3c87e6e03a3cda8": "1000000000000000000000", + "0xf60f62d73937953fef35169e11d872d2ea317eec": "5348000000000000000000", + "0xc0c04d0106810e3ec0e54a19f2ab8597e69a573d": "50000000000000000000", + "0xef47cf073e36f271d522d7fa4e7120ad5007a0bc": "2500000000000000000000", + "0xa44fe800d96fcad73b7170d0f610cb8c0682d6ce": "4000000000000000000000", + "0x010f4a98dfa1d9799bf5c796fb550efbe7ecd877": "8023366000000000000000", + "0x708fa11fe33d85ad1befcbae3818acb71f6a7d7e": "18200000000000000000", + "0xb38c4e537b5df930d65a74d043831d6b485bbde4": "400000000000000000000", + "0x250a69430776f6347703f9529783955a6197b682": "1940000000000000000000", + "0x2d35a9df62757f7ffad1049afb06ca4afc464c51": "20000000000000000000", + "0x6aff1466c2623675e3cb0e75e423d37a25e442eb": "1730000000000000000000", + "0xfc15cb99a8d1030b12770add033a79ee0d0c908c": "350056000000000000000", + "0xe784dcc873aa8c1513ec26ff36bc92eac6d4c968": "200000000000000000000", + "0xb1c328fb98f2f19ab6646f0a7c8c566fda5a8540": "2500000000000000000000", + "0x247a0a11c57f0383b949de540b66dee68604b0a1": "1069600000000000000000", + "0x1af60343360e0b2d75255210375720df21db5c7d": "1000000000000000000000", + "0x8794bf47d54540ece5c72237a1ffb511ddb74762": "2000000000000000000000", + "0xe76d945aa89df1e457aa342b31028a5e9130b2ce": "1015200000000000000000", + "0xa30e0acb534c9b3084e8501da090b4eb16a2c0cd": "2000000000000000000000", + "0x7099d12f6ec656899b049a7657065d62996892c8": "400000000000000000000", + "0x7be7f2456971883b9a8dbe4c91dec08ac34e8862": "3000000000000000000000", + "0x42746aeea14f27beff0c0da64253f1e7971890a0": "1550000000000000000000", + "0x736b44503dd2f6dd5469ff4c5b2db8ea4fec65d0": "313950000000000000000", + "0x822edff636563a6106e52e9a2598f7e6d0ef2782": "36099000000000000000", + "0x03c647a9f929b0781fe9ae01caa3e183e876777e": "445800000000000000000", + "0x63612e7862c27b587cfb6daf9912cb051f030a9f": "43458000000000000000", + "0xd46bae61b027e5bb422e83a3f9c93f3c8fc77d27": "2000000000000000000000", + "0x5f23ba1f37a96c45bc490259538a54c28ba3b0d5": "1200000000000000000000", + "0xd41d7fb49fe701baac257170426cc9b38ca3a9b2": "176000000000000000000", + "0x1ebacb7844fdc322f805904fbf1962802db1537c": "10000000000000000000000", + "0x9c80bc18e9f8d4968b185da8c79fa6e11ffc3e23": "240000000000000000000", + "0xe4ca0a5238564dfc91e8bf22bade2901619a1cd4": "1000000000000000000000", + "0x1ad72d20a76e7fcc6b764058f48d417d496fa6cd": "2000000000000000000000", + "0xd3bc730937fa75d8452616ad1ef1fe7fffe0d0e7": "83363000000000000000", + "0xeac1482826acb6111e19d340a45fb851576bed60": "32177000000000000000", + "0x01e40521122530d9ac91113c06a0190b6d63850b": "1337000000000000000000", + "0x9e20e5fd361eabcf63891f5b87b09268b8eb3793": "100000000000000000000", + "0x69ff429074cb9b6c63bc914284bce5f0c8fbf7d0": "500000000000000000000", + "0x0d3265d3e7bdb93d5e8e8b1ca47f210a793ecc8e": "200000000000000000000", + "0x5b4ea16db6809b0352d4b6e81c3913f76a51bb32": "400000000000000000000", + "0xd8fe088fffce948f5137ee23b01d959e84ac4223": "227942000000000000000", + "0x7e4e9409704121d1d77997026ff06ea9b19a8b90": "2602600000000000000000", + "0x96b434fe0657e42acc8212b6865139dede15979c": "4000000000000000000000", + "0x22f004df8de9e6ebf523ccace457accb26f97281": "10000000000000000000000", + "0xd8f9240c55cff035523c6d5bd300d370dc8f0c95": "285000000000000000000", + "0x9d9e57fde30e5068c03e49848edce343b7028358": "1730000000000000000000", + "0x317cf4a23cb191cdc56312c29d15e210b3b9b784": "144000000000000000000", + "0x79f08e01ce0988e63c7f8f2908fade43c7f9f5c9": "18200000000000000000", + "0x04e5f5bc7c923fd1e31735e72ef968fd67110c6e": "1611000000000000000000", + "0x1ec4ec4b77bf19d091a868e6f49154180541f90e": "2000000000000000000000", + "0x8737dae671823a8d5917e0157ace9c43468d946b": "1999944000000000000000", + "0xf998ca3411730a6cd10e7455b0410fb0f6d3ff80": "2000000000000000000000", + "0x6e2eab85dc89fe29dc0aa1853247dab43a523d56": "80000000000000000000", + "0x72c083beadbdc227c5fb43881597e32e83c26056": "20000000000000000000000", + "0x5902e44af769a87246a21e079c08bf36b06efeb3": "1000000000000000000000", + "0xcc2d04f0a4017189b340ca77198641dcf6456b91": "3940000000000000000000", + "0xbde4c73f969b89e9ceae66a2b51844480e038e9a": "1000000000000000000000", + "0xadff0d1d0b97471e76d789d2e49c8a74f9bd54ff": "1880000000000000000000", + "0x397cdb8c80c67950b18d654229610e93bfa6ee1a": "1172938000000000000000", + "0xa3e051fb744aa3410c3b88f899f5d57f168df12d": "2955000000000000000000", + "0x810db25675f45ea4c7f3177f37ce29e22d67999c": "200000000000000000000", + "0x1e13ec51142cebb7a26083412c3ce35144ba56a1": "5000000000000000000000", + "0x25bdfa3ee26f3849617b230062588a97e3cae701": "1000008000000000000000", + "0xae538c73c5b38d8d584d7ebdadefb15cabe48357": "999000000000000000000", + "0xa2ecce2c49f72a0995a0bda57aacf1e9f001e22a": "4000000000000000000000", + "0x7e24fbdad290175eb2df6d180a19b9a9f41370be": "1000000000000000000000", + "0xe8cc43bc4f8acf39bff04ebfbf42aac06a328470": "400000000000000000000", + "0xc2779771f0536d79a8708f6931abc44b3035e999": "20002000000000000000000", + "0xab27ba78c8e5e3daef31ad05aef0ff0325721e08": "468000000000000000000", + "0x563cb8803c1d32a25b27b64114852bd04d9c20cd": "204400000000000000000", + "0x08d4267feb15da9700f7ccc3c84a8918bf17cfde": "1790000000000000000000", + "0xd1778c13fbd968bc083cb7d1024ffe1f49d02caa": "4020000000000000000000", + "0x1796bcc97b8abc717f4b4a7c6b1036ea2182639f": "355242000000000000000", + "0xbeecd6af900c8b064afcc6073f2d85d59af11956": "2000000000000000000000", + "0x045ed7f6d9ee9f252e073268db022c6326adfc5b": "100000000000000000000", + "0xb88a37c27f78a617d5c091b7d5b73a3761e65f2a": "2000000000000000000000", + "0x72fb49c29d23a18950c4b2dc0ddf410f532d6f53": "2000000000000000000000", + "0x6ecaefa6fc3ee534626db02c6f85a0c395571e77": "600000000000000000000", + "0xd1811c55976980f083901d8a0db269222dfb5cfe": "1550000000000000000000", + "0x98855c7dfbee335344904a12c40c731795b13a54": "1069600000000000000000", + "0x92a898d46f19719c38126a8a3c27867ae2cee596": "2000000000000000000000", + "0xca428863a5ca30369892d612183ef9fb1a04bcea": "1520000000000000000000", + "0x797427e3dbf0feae7a2506f12df1dc40326e8505": "1000000000000000000000", + "0x3d574fcf00fae1d98cc8bf9ddfa1b3953b9741bc": "1970000000000000000000", + "0x28818e18b610001321b31df6fe7d2815cdadc9f5": "1000000000000000000000", + "0x5f3e1e6739b0c62200e00a003691d9efb238d89f": "3000000000000000000000", + "0xd9d370fec63576ab15b318bf9e58364dc2a3552a": "100000000000000000000", + "0xb223bf1fbf80485ca2b5567d98db7bc3534dd669": "4000000000000000000000", + "0x7b27d0d1f3dd3c140294d0488b783ebf4015277d": "400000000000000000000", + "0x7930c2d9cbfa87f510f8f98777ff8a8448ca5629": "199955000000000000000", + "0x820c19291196505b65059d9914b7090be1db87de": "140000000000000000000", + "0xe545ee84ea48e564161e9482d59bcf406a602ca2": "1850000000000000000000", + "0xaf4cf41785161f571d0ca69c94f8021f41294eca": "9850000000000000000000", + "0x7a4f9b850690c7c94600dbee0ca4b0a411e9c221": "1910000000000000000000", + "0xddab6b51a9030b40fb95cf0b748a059c2417bec7": "2000000000000000000000", + "0x315ef2da620fd330d12ee55de5f329a696e0a968": "150000000000000000000", + "0x4db1c43a0f834d7d0478b8960767ec1ac44c9aeb": "872870000000000000000", + "0x2fef81478a4b2e8098db5ff387ba2153f4e22b79": "999000000000000000000", + "0x6c6aa0d30b64721990b9504a863fa0bfb5e57da7": "2700000000000000000000", + "0x33380c6fff5acd2651309629db9a71bf3f20c5ba": "16100000000000000000000", + "0x4eebf1205d0cc20cee6c7f8ff3115f56d48fba26": "19400000000000000000", + "0x03cc9d2d21f86b84ac8ceaf971dba78a90e62570": "1610000000000000000000", + "0x728f9ab080157db3073156dbca1a169ef3179407": "500000000000000000000", + "0x30ed11b77bc17e5e6694c8bc5b6e4798f68d9ca7": "143731500000000000000000", + "0xf617b967b9bd485f7695d2ef51fb7792d898f500": "500000000000000000000", + "0xc0cbad3ccdf654da22cbcf5c786597ca1955c115": "2000000000000000000000", + "0x80522ddf944ec52e27d724ed4c93e1f7be6083d6": "200000000000000000000", + "0x4e90ccb13258acaa9f4febc0a34292f95991e230": "15800000000000000000", + "0xff207308ced238a6c01ad0213ca9eb4465d42590": "1999944000000000000000", + "0x35f2949cf78bc219bb4f01907cf3b4b3d3865482": "289800000000000000000", + "0x68f525921dc11c329b754fbf3e529fc723c834cd": "1610000000000000000000", + "0x81139bfdcca656c430203f72958c543b6580d40c": "2000000000000000000000", + "0x9d511543b3d9dc60d47f09d49d01b6c498d82078": "11245000000000000000000", + "0x084d103254759b343cb2b9c2d8ff9e1ac5f14596": "7600000000000000000000", + "0xb323dcbf2eddc5382ee4bbbb201ca3931be8b438": "2000000000000000000000", + "0x349d2c918fd09e2807318e66ce432909176bd50b": "1120000000000000000000", + "0xb535f8db879fc67fec58824a5cbe6e5498aba692": "1910000000000000000000", + "0x824074312806da4748434266ee002140e3819ac2": "1507000000000000000000", + "0xe8ef100d7ce0895832f2678df72d4acf8c28b8e3": "500038000000000000000", + "0x84af1b157342d54368260d17876230a534b54b0e": "985000000000000000000", + "0x419a71a36c11d105e0f2aef5a3e598078e85c80b": "5000000000000000000000", + "0x55af092f94ba6a79918b0cf939eab3f01b3f51c7": "149940000000000000000", + "0x35a549e8fd6c368d6dcca6d2e7d18e4db95f5284": "499938000000000000000", + "0xf0e2649c7e6a3f2c5dfe33bbfbd927ca3c350a58": "2000000000000000000000", + "0xf4b759cc8a1c75f80849ebbcda878dc8f0d66de4": "400000000000000000000", + "0x21846f2fdf5a41ed8df36e5ed8544df75988ece3": "1999944000000000000000", + "0x229ff80bf5708009a9f739e0f8b560914016d5a6": "333333000000000000000", + "0xda505537537ffb33c415fec64e69bae090c5f60f": "160000000000000000000", + "0xb91d9e916cd40d193db60e79202778a0087716fc": "404800000000000000000", + "0xbb6823a1bd819f13515538264a2de052b4442208": "25610000000000000000", + "0x459393d63a063ef3721e16bd9fde45ee9dbd77fb": "1968818000000000000000", + "0x95f62d0243ede61dad9a3165f53905270d54e242": "1610000000000000000000", + "0xb0bb29a861ea1d424d45acd4bfc492fb8ed809b7": "80000000000000000000", + "0x5e74ed80e9655788e1bb269752319667fe754e5a": "56000000000000000000", + "0xa276b058cb98d88beedb67e543506c9a0d9470d8": "2668652000000000000000", + "0x8ae9ef8c8a8adfa6ab798ab2cdc405082a1bbb70": "2000000000000000000000", + "0xe5102c3b711b810344197419b1cd8a7059f13e32": "299999000000000000000", + "0xc32038ca52aee19745be5c31fcdc54148bb2c4d0": "49984000000000000000", + "0x13e321728c9c57628058e93fc866a032dd0bda90": "714580000000000000000", + "0xc2bae4a233c2d85724f0dabebda0249d833e37d3": "5000000000000000000000", + "0x10d32416722ca4e648630548ead91edd79c06aff": "100000000000000000000", + "0xd5f07552b5c693c20067b378b809cee853b8f136": "505540000000000000000", + "0x8668af868a1e98885f937f2615ded6751804eb2d": "20000000000000000000", + "0x139d3531c9922ad56269f6309aa789fb2485f98c": "4000000000000000000000", + "0x1d29c7aab42b2048d2b25225d498dba67a03fbb2": "200000000000000000000", + "0xd35075ca61fe59d123969c36a82d1ab2d918aa38": "2674000000000000000000", + "0xd6fc0446c6a8d40ae3551db7e701d1fa876e4a49": "2000000000000000000000", + "0xfccd0d1ecee27addea95f6857aeec8c7a04b28ee": "10000000000000000000000", + "0xc12cfb7b3df70fceca0ede263500e27873f8ed16": "1000000000000000000000", + "0xd0db456178206f5c4430fe005063903c3d7a49a7": "706245000000000000000", + "0x73cf80ae9688e1580e68e782cd0811f7aa494d2c": "7760000000000000000000", + "0xd60651e393783423e5cc1bc5f889e44ef7ea243e": "398800000000000000000", + "0x048a8970ea4145c64d5517b8de5b46d0595aad06": "20000000000000000000000", + "0xdd9b485a3b1cd33a6a9c62f1e5bee92701856d25": "225073000000000000000", + "0x5b287c7e734299e727626f93fb1187a60d5057fe": "101230000000000000000", + "0x635c00fdf035bca15fa3610df3384e0fb79068b1": "9000000000000000000000", + "0x630a913a9031c9492abd4c41dbb15054cfec4416": "5688000000000000000000", + "0xaf3614dcb68a36e45a4e911e62796247222d595b": "2259800000000000000000", + "0x335e22025b7a77c3a074c78b8e3dfe071341946e": "10178744000000000000000", + "0xf0e1dfa42adeac2f17f6fdf584c94862fd563393": "500000000000000000000", + "0x1a9e702f385dcd105e8b9fa428eea21c57ff528a": "1400000000000000000000", + "0x8ce4949d8a16542d423c17984e6739fa72ceb177": "24999975000000000000000", + "0x5f29c9de765dde25852af07d33f2ce468fd20982": "2000000000000000000000", + "0xdbf5f061a0f48e5e69618739a77d2ec19768d201": "152000000000000000000", + "0xb247cf9c72ec482af3eaa759658f793d670a570c": "912000000000000000000", + "0x99f4147ccc6bcb80cc842e69f6d00e30fa4133d9": "400000000000000000000", + "0xba6d31b9a261d640b5dea51ef2162c3109f1eba8": "5000000000000000000000", + "0xf05ba8d7b68539d933300bc9289c3d9474d0419e": "126400000000000000000", + "0x682e96276f518d31d7e56e30dfb009c1218201bd": "20000000000000000000", + "0x0927220492194b2eda9fc4bbe38f25d681dfd36c": "6000000000000000000000", + "0xa3c33afc8cb4704e23153de2049d35ae71332472": "799600000000000000000", + "0x05c736d365aa37b5c0be9c12c8ad5cd903c32cf9": "6002000000000000000000", + "0xd8eef4cf4beb01ee20d111748b61cb4d3f641a01": "2740000000000000000000", + "0x16c1bf5b7dc9c83c179efacbcf2eb174e3561cb3": "1000000000000000000000", + "0xd79db5ab43621a7a3da795e58929f3dd25af67d9": "1999944000000000000000", + "0x28efae6356509edface89fc61a7fdcdb39eea8e5": "5348000000000000000000", + "0xc55005a6c37e8ca7e543ce259973a3cace961a4a": "2000000000000000000000", + "0xab3d86bc82927e0cd421d146e07f919327cdf6f9": "1910000000000000000000", + "0xb74ed2666001c16333cf7af59e4a3d4860363b9c": "193600000000000000000", + "0x1899f69f653b05a5a6e81f480711d09bbf97588c": "1955000000000000000000", + "0x27fc85a49cff90dbcfdadc9ddd40d6b9a2210a6c": "100000000000000000000", + "0xcd1ed263fbf6f6f7b48aef8f733d329d4382c7c7": "18500000000000000000", + "0xd97fe6f53f2a58f6d76d752adf74a8a2c18e9074": "309990000000000000000", + "0x80da2fdda29a9e27f9e115975e69ae9cfbf3f27e": "200000000000000000000", + "0x09146ea3885176f07782e1fe30dce3ce24c49e1f": "20000000000000000000", + "0x393ff4255e5c658f2e7f10ecbd292572671bc2d2": "2000000000000000000000", + "0xa390ca122b8501ee3e5e07a8ca4b419f7e4dae15": "100000000000000000000", + "0x6d9193996b194617211106d1635eb26cc4b66c6c": "399640000000000000000", + "0x999c49c174ca13bc836c1e0a92bff48b271543ca": "3280000000000000000000", + "0x7421ce5be381738ddc83f02621974ff0686c79b8": "1632000000000000000000", + "0x6be9030ee6e2fbc491aca3de4022d301772b7b7d": "26740000000000000000", + "0x81bd75abd865e0c3f04a0b4fdbcb74d34082fbb7": "4000000000000000000000", + "0x8bc1ff8714828bf286ff7e8a7709106548ed1b18": "10000000000000000000000", + "0xa0aadbd9509722705f6d2358a5c79f37970f00f6": "200000000000000000000", + "0x3d881433f04a7d0d27f84944e08a512da3555287": "1200000000000000000000", + "0xcc1d6ead01aada3e8dc7b95dca25df26eefa639d": "2000000000000000000000", + "0x35106ba94e8563d4b3cb3c5c692c10e604b7ced8": "2000000000000000000000", + "0x4d8697af0fbf2ca36e8768f4af22133570685a60": "20000000000000000000", + "0x1afcc585896cd0ede129ee2de5c19ea811540b64": "3231259000000000000000", + "0xe5215631b14248d45a255296bed1fbfa0330ff35": "1310000000000000000000", + "0xe3878f91ca86053fced5444686a330e09cc388fb": "194000000000000000000", + "0x555df19390c16d01298772bae8bc3a1152199cbd": "200000000000000000000", + "0xdc3dae59ed0fe18b58511e6fe2fb69b219689423": "100000000000000000000", + "0x74648caac748dd135cd91ea14c28e1bd4d7ff6ae": "3100000000000000000000", + "0xcf2e2ad635e9861ae95cb9bafcca036b5281f5ce": "35200000000000000000000", + "0x14eec09bf03e352bd6ff1b1e876be664ceffd0cf": "20094000000000000000", + "0x856e5ab3f64c9ab56b009393b01664fc0324050e": "1790000000000000000000", + "0x632b9149d70178a7333634275e82d5953f27967b": "700000000000000000000", + "0x2a39190a4fde83dfb3ddcb4c5fbb83ac6c49755c": "1000000000000000000000", + "0x369ef761195f3a373e24ece6cd22520fe0b9e86e": "534933000000000000000", + "0x16afa787fc9f94bdff6976b1a42f430a8bf6fb0f": "2000000000000000000000", + "0x1b0b31afff4b6df3653a94d7c87978ae35f34aae": "354600000000000000000", + "0xb4d82f2e69943f7de0f5f7743879406fac2e9cec": "40000000000000000000", + "0x09d6cefd75b0c4b3f8f1d687a522c96123f1f539": "6000000000000000000000", + "0x01577afd4e50890247c9b10d44af73229aec884f": "680000000000000000000", + "0xa35606d51220ee7f2146d411582ee4ee4a45596e": "3996800000000000000000", + "0x352e77c861696ef96ad54934f894aa8ea35151dd": "1000000000000000000000", + "0xb87f5376c2de0b6cc3c179c06087aa473d6b4674": "1337000000000000000000", + "0x5b49afcd75447838f6e7ceda8d21777d4fc1c3c0": "4000000000000000000000", + "0xb884add88d83dc564ab8e0e02cbdb63919aea844": "2000000000000000000000", + "0x5c312a56c784b122099b764d059c21ece95e84ca": "95000000000000000000", + "0x4697baaf9ccb603fd30430689d435445e9c98bf5": "199600000000000000000", + "0xc625f8c98d27a09a1bcabd5128b1c2a94856af30": "200000000000000000000", + "0x19f5caf4c40e6908813c0745b0aea9586d9dd931": "664000000000000000000", + "0x1e596a81b357c6f24970cc313df6dbdaabd0d09e": "2000000000000000000000", + "0xc1631228efbf2a2e3a4092ee8900c639ed34fbc8": "955000000000000000000", + "0x6f6cf20649a9e973177ac67dbadee4ebe5c7bdda": "5080000000000000000000", + "0x5fa7bfe043886127d4011d8356a47e947963aca8": "1820000000000000000000", + "0x6af8e55969682c715f48ad4fc0fbb67eb59795a3": "2000000000000000000000", + "0x122f56122549d168a5c5e267f52662e5c5cce5c8": "185000000000000000000", + "0x7713ab8037411c09ba687f6f9364f0d3239fac28": "10000000000000000000000", + "0x31ccc616b3118268e75d9ab8996c8858ebd7f3c3": "399924000000000000000", + "0x09c88f917e4d6ad473fa12e98ea3c4472a5ed6da": "10000000000000000000000", + "0xe796fd4e839b4c95d7510fb7c5c72b83c6c3e3c7": "512200000000000000000", + "0xa8285539869d88f8a961533755717d7eb65576ae": "200000000000000000000", + "0xd929c65d69d5bbaea59762662ef418bc21ad924a": "1000000000000000000000", + "0xf7418aa0e713d248228776b2e7434222ae75e3a5": "2000000000000000000000", + "0x7f0b90a1fdd48f27b268feb38382e55ddb50ef0f": "940000000000000000000", + "0x34a0431fff5ead927f3c69649616dc6e97945f6f": "400000000000000000000", + "0x1b3cb81e51011b549d78bf720b0d924ac763a7c2": "560000000000000000000000", + "0x155b3779bb6d56342e2fda817b5b2d81c7f41327": "50200000000000000000", + "0xecd486fc196791b92cf612d348614f9156488b7e": "12000000000000000000000", + "0x82a8cbbfdff02b2e38ae4bbfca15f1f0e83b1aea": "84999000000000000000", + "0x06b0c1e37f5a5ec4bbf50840548f9d3ac0288897": "4000098000000000000000", + "0xe6d49f86c228f47367a35e886caacb271e539429": "412656000000000000000", + "0x704a6eb41ba34f13addde7d2db7df04915c7a221": "1820000000000000000000", + "0x745ccf2d819edbbddea8117b5c49ed3c2a066e93": "4000000000000000000000", + "0x6d3b7836a2b9d899721a4d237b522385dce8dfcd": "1000070000000000000000", + "0x856aa23c82d7215bec8d57f60ad75ef14fa35f44": "20000000000000000000000", + "0xea79057dabef5e64e7b44f7f18648e7e533718d2": "200000000000000000000", + "0x9df057cd03a4e27e8e032f857985fd7f01adc8d7": "2000000000000000000000", + "0x5f2f07d2d697e8c567fcfdfe020f49f360be2139": "2000000000000000000000", + "0x5efbdfe5389999633c26605a5bfc2c1bb5959393": "69200000000000000000", + "0x047e87c8f7d1fce3b01353a85862a948ac049f3e": "1490000000000000000000", + "0x265383d68b52d034161bfab01ae1b047942fbc32": "21000600000000000000000", + "0x760ff3354e0fde938d0fb5b82cef5ba15c3d2916": "10000000000000000000000", + "0xbc46d537cf2edd403565bde733b2e34b215001bd": "20000000000000000000000", + "0xee58fb3db29070d0130188ce472be0a172b89055": "10021400000000000000000", + "0x75abe5270f3a78ce007cf37f8fbc045d489b7bb1": "1999944000000000000000", + "0x5fc6c11426b4a1eae7e51dd512ad1090c6f1a85b": "2730000000000000000000", + "0x26cfffd052152bb3f957b478d5f98b233a7c2b92": "4000000000000000000000", + "0x0a4a011995c681bc999fdd79754e9a324ae3b379": "41350300000000000000000", + "0x6fa60df818a5446418b1bbd62826e0b9825e1318": "13200000000000000000000", + "0x63d55ad99b9137fd1b20cc2b4f03d42cbaddf334": "400000000000000000000", + "0x679b9a109930517e8999099ccf2a914c4c8dd934": "60000000000000000000", + "0x3e83544f0082552572c782bee5d218f1ef064a9d": "100076000000000000000", + "0x968b14648f018333687cd213fa640aec04ce6323": "1000000000000000000000", + "0x427b462ab84e5091f48a46eb0cdc92ddcb26e078": "2000000000000000000000", + "0xdf8510793eee811c2dab1c93c6f4473f30fbef5b": "1000000000000000000000", + "0x362fbcb10662370a068fc2652602a2577937cce6": "200000000000000000000", + "0x5d83b21bd2712360436b67a597ee3378db3e7ae4": "2000000000000000000000", + "0x5777441c83e03f0be8dd340bde636850847c620b": "10000000000000000000000", + "0xc94a585203da7bbafd93e15884e660d4b1ead854": "7000000000000000000000", + "0x35a08081799173e001cc5bd46a02406dc95d1787": "10000000000000000000000", + "0x21d13f0c4024e967d9470791b50f22de3afecf1b": "4452210000000000000000", + "0xfdfd6134c04a8ab7eb16f00643f8fed7daaaecb2": "400000000000000000000", + "0xfd812bc69fb170ef57e2327e80affd14f8e4b6d2": "2000000000000000000000", + "0x7148aef33261d8031fac3f7182ff35928daf54d9": "4100000000000000000000", + "0x0b06390f2437b20ec4a3d3431b3279c6583e5ed7": "194000000000000000000", + "0x4909b31998ead414b8fb0e846bd5cbde393935be": "4000000000000000000000", + "0xb70dba9391682b4a364e77fe99256301a6c0bf1f": "200000000000000000000", + "0x6b83bae7b565244558555bcf4ba8da2011891c17": "2000000000000000000000", + "0x70a03549aa6168e97e88a508330a5a0bea74711a": "1337000000000000000000", + "0x0fc9a0e34145fbfdd2c9d2a499b617d7a02969b9": "180000000000000000000", + "0x2ddf40905769bcc426cb2c2938ffe077e1e89d98": "3000000000000000000000", + "0x794b51c39e53d9e762b0613b829a44b472f4fff3": "667965000000000000000", + "0xd062588171cf99bbeb58f126b870f9a3728d61ec": "4500000000000000000000", + "0x8db185fe1b70a94a6a080e7e23a8bedc4acbf34b": "1400000000000000000000", + "0xe73bfeada6f0fd016fbc843ebcf6e370a65be70c": "1970000000000000000000", + "0x79ed10cf1f6db48206b50919b9b697081fbdaaf3": "2000000000000000000000", + "0x276b0521b0e68b277df0bb32f3fd48326350bfb2": "50000000000000000000", + "0x2e439348df8a4277b22a768457d1158e97c40904": "776970000000000000000", + "0x6c25327f8dcbb2f45e561e86e35d8850e53ab059": "1103200000000000000000", + "0x04d73896cf6593a691972a13a6e4871ff2c42b13": "2000000000000000000000", + "0xb10fd2a647102f881f74c9fbc37da632949f2375": "40000000000000000000", + "0x615f82365c5101f071e7d2cb6af14f7aad2c16c6": "20000000000000000000", + "0x93aa8f92ebfff991fc055e906e651ac768d32bc8": "940000000000000000000", + "0x0cbf8770f0d1082e5c20c5aead34e5fca9ae7ae2": "1000000000000000000000", + "0xffc9cc3094b041ad0e076f968a0de3b167255866": "432400000000000000000", + "0x46531e8b1bde097fdf849d6d119885608a008df7": "200000000000000000000", + "0x23cd2598a20e149ead2ad69379576ecedb60e38e": "2000000000000000000000", + "0x85ca8bc6da2803d0725f5e1a456c89f9bc774e2f": "600000000000000000000", + "0xc0725ec2bdc33a1d826071dea29d62d4385a8c25": "40740000000000000000000", + "0x0e4765790352656bc656682c24fc5ef3e76a23c7": "46610000000000000000", + "0x2ef9e465716acacfb8c8252fa8e7bc7969ebf6e4": "2760000000000000000000", + "0x0ec5308b31282e218fc9e759d4fec5db3708cec4": "1001000000000000000000", + "0xbf7701fc6225d5a17815438a8941d21ebc5d059d": "1880000000000000000000", + "0xc489c83ffbb0252ac0dbe3521217630e0f491f14": "4000000000000000000000", + "0x8eb51774af206b966b8909c45aa6722748802c0c": "500000000000000000000", + "0x7b9226d46fe751940bc416a798b69ccf0dfab667": "4200000000000000000000", + "0x8f660f8b2e4c7cc2b4ac9c47ed28508d5f8f8650": "20000000000000000000000", + "0x9f19fac8a32437d80ac6837a0bb7841729f4972e": "650100000000000000000", + "0x201864a8f784c2277b0b7c9ee734f7b377eab648": "4467000000000000000000", + "0xa6101c961e8e1c15798ffcd0e3201d7786ec373a": "6000000000000000000000", + "0xd4ff46203efa23064b1caf00516e28704a82a4f8": "1337000000000000000000", + "0xaa136b47962bb8b4fb540db4ccf5fdd042ffb8cf": "500038000000000000000", + "0x704ae21d762d6e1dde28c235d13104597236db1a": "2000000000000000000000", + "0xf17a92e0361dbacecdc5de0d1894955af6a9b606": "2000000000000000000000", + "0x8b48e19d39dd35b66e6e1bb6b9c657cb2cf59d04": "17844175000000000000000", + "0x9ad47fdcf9cd942d28effd5b84115b31a658a13e": "3290000000000000000000", + "0xdf0d08617bd252a911df8bd41a39b83ddf809673": "10000000000000000000000", + "0x4c666b86f1c5ee8ca41285f5bde4f79052081406": "500000000000000000000", + "0x88dec5bd3f4eba2d18b8aacefa7b721548c319ba": "1370000000000000000000", + "0x9f9fe0c95f10fee87af1af207236c8f3614ef02f": "6000000000000000000000", + "0xf7d0d310acea18406138baaabbfe0571e80de85f": "1337000000000000000000", + "0x9569c63a9284a805626db3a32e9d236393476151": "1970000000000000000000", + "0x5d5c2c1099bbeefb267e74b58880b444d94449e0": "253574000000000000000", + "0x8c6ae7a05a1de57582ae2768204276c0ff47ed03": "208000000000000000000000", + "0x432d884bd69db1acc0d89c64ade4cb4fc3a88b7a": "2483000000000000000000", + "0x672cbca8440a8577097b19aff593a2ad9d28a756": "80000000000000000000", + "0x19df9445a81c1b3d804aeaeb6f6e204e4236663f": "37387000000000000000", + "0x1cb5f33b4d488936d13e3161da33a1da7df70d1b": "200000000000000000000", + "0xdf60f18c812a11ed4e2776e7a80ecf5e5305b3d6": "900000000000000000000", + "0xc99a9cd6c9c1be3534eecd92ecc22f5c38e9515b": "4821030000000000000000", + "0x00c40fe2095423509b9fd9b754323158af2310f3": "0", + "0xda4a5f557f3bab390a92f49b9b900af30c46ae80": "10000000000000000000000", + "0xf36df02fbd89607347afce2969b9c4236a58a506": "2000000000000000000000", + "0xc549df83c6f65eec0f1dc9a0934a5c5f3a50fd88": "2910000000000000000000", + "0x9f662e95274121f177566e636d23964cf1fd686f": "2000000000000000000000", + "0x5a267331facb262daaecd9dd63a9700c5f5259df": "100000000000000000000", + "0x117d9aa3c4d13bee12c7500f09f5dd1c66c46504": "206000000000000000000", + "0x1b4d07acd38183a61bb2783d2b7b178dd502ac8d": "200000000000000000000", + "0x3c0c3defac9cea7acc319a96c30b8e1fedab4574": "1940000000000000000000", + "0xe4dc22ed595bf0a337c01e03cc6be744255fc9e8": "191000000000000000000", + "0x8f067c7c1bbd57780b7b9eeb9ec0032f90d0dcf9": "20000000000000000000000", + "0x40e2440ae142c880366a12c6d4102f4b8434b62a": "1000000000000000000000", + "0xf9ece022bccd2c92346911e79dd50303c01e0188": "1000000000000000000000", + "0xf70328ef97625fe745faa49ee0f9d4aa3b0dfb69": "1000000000000000000000", + "0xb6aacb8cb30bab2ae4a2424626e6e12b02d04605": "8000000000000000000000", + "0x154459fa2f21318e3434449789d826cdc1570ce5": "2000000000000000000000", + "0x684a44c069339d08e19a75668bdba303be855332": "70000000000000000000000", + "0x9fe501aa57ead79278937cd6308c5cfa7a5629fe": "50003000000000000000", + "0x3e45bd55db9060eced923bb9cb733cb3573fb531": "1640000000000000000000", + "0x9c9f3b8a811b21f3ff3fe20fe970051ce66a824f": "1157740000000000000000", + "0xe99aece90541cae224b87da673965e0aeb296afd": "920000000000000000000", + "0x2f6dce1330c59ef921602154572d4d4bacbd048a": "1000000000000000000000", + "0x6a6353b971589f18f2955cba28abe8acce6a5761": "3000000000000000000000", + "0x98c10ebf2c4f97cba5a1ab3f2aafe1cac423f8cb": "300000000000000000000", + "0x8077c3e4c445586e094ce102937fa05b737b568c": "100000000000000000000", + "0x13371f92a56ea8381e43059a95128bdc4d43c5a6": "1000000000000000000000", + "0x35a6885083c899dabbf530ed6c12f4dd3a204cf5": "200000000000000000000", + "0x36b2c85e3aeeebb70d63c4a4730ce2e8e88a3624": "10000000000000000000000", + "0x5ce44068b8f4a3fe799e6a8311dbfdeda29dee0e": "2000000000000000000000", + "0x6fa6388d402b30afe59934c3b9e13d1186476018": "670000000000000000000", + "0x8251358ca4e060ddb559ca58bc0bddbeb4070203": "2000000000000000000000", + "0x17e86f3b5b30c0ba59f2b2e858425ba89f0a10b0": "2000000000000000000000", + "0x298ec76b440d8807b3f78b5f90979bee42ed43db": "30000000000000000000000", + "0xce4b065dbcb23047203262fb48c1188364977470": "500000000000000000000", + "0xc8e2adeb545e499d982c0c117363ceb489c5b11f": "985000000000000000000", + "0x9928ff715afc3a2b60f8eb4cc4ba4ee8dab6e59d": "440000000000000000000", + "0xc76130c73cb9210238025c9df95d0be54ac67fbe": "1500000000000000000000", + "0x72d03d4dfab3500cf89b86866f15d4528e14a195": "4488000000000000000000", + "0xd193e583d6070563e7b862b9614a47e99489f3e5": "999972000000000000000", + "0x4df140ba796585dd5489315bca4bba680adbb818": "2674000000000000000000", + "0x009eef0a0886056e3f69211853b9b7457f3782e4": "3000512000000000000000", + "0x6e255b700ae7138a4bacf22888a9e2c00a285eec": "4000000000000000000000", + "0xaa47a4ffc979363232c99b99fada0f2734b0aeee": "8121800000000000000000", + "0x9d069197d1de50045a186f5ec744ac40e8af91c6": "2000000000000000000000", + "0xb514882c979bb642a80dd38754d5b8c8296d9a07": "955000000000000000000", + "0x17c0478657e1d3d17aaa331dd429cecf91f8ae5d": "999942000000000000000", + "0x5f9616c47b4a67f406b95a14fe6fc268396f1721": "200000000000000000000", + "0xf70a998a717b338d1dd99854409b1a338deea4b0": "2000000000000000000000", + "0xd1ee905957fe7cc70ec8f2868b43fe47b13febff": "44000000000000000000", + "0xfc018a690ad6746dbe3acf9712ddca52b6250039": "10000000000000000000000", + "0x5118557d600d05c2fcbf3806ffbd93d02025d730": "11360000000000000000000", + "0x1ef5c9c73650cfbbde5c885531d427c7c3fe5544": "6000000000000000000000", + "0xd1a396dcdab2c7494130b3fd307820340dfd8c1f": "17952000000000000000", + "0x2d8e061892a5dcce21966ae1bb0788fd3e8ba059": "250066000000000000000", + "0x8834b2453471f324fb26be5b25166b5b5726025d": "573000000000000000000", + "0x14f221159518783bc4a706676fc4f3c5ee405829": "200000000000000000000", + "0xc056d4bd6bf3cbacac65f8f5a0e3980b852740ae": "100000000000000000000", + "0x560536794a9e2b0049d10233c41adc5f418a264a": "1000000000000000000000", + "0xbc9e0ec6788f7df4c7fc210aacd220c27e45c910": "500000000000000000000", + "0x54bcb8e7f73cda3d73f4d38b2d0847e600ba0df8": "1078000000000000000000", + "0x4361d4846fafb377b6c0ee49a596a78ddf3516a3": "3580000000000000000000", + "0x41c3c2367534d13ba2b33f185cdbe6ac43c2fa31": "4000000000000000000000", + "0x5dc6f45fef26b06e3302313f884daf48e2746fb9": "500000000000000000000", + "0xad414d29cb7ee973fec54e22a388491786cf5402": "14000000000000000000000", + "0x802dc3c4ff2d7d925ee2859f4a06d7ba60f1308c": "98040000000000000000", + "0x2aed2ce531c056b0097efc3c6de10c4762004ed9": "10430000000000000000000", + "0x39782ffe06ac78822a3c3a8afe305e50a56188ce": "10000000000000000000000", + "0xec73833de4b810bb027810fc8f69f544e83c12d1": "1000000000000000000000", + "0x8d51a4cc62011322c696fd725b9fb8f53feaaa07": "1000000000000000000000", + "0x29298ccbdff689f87fe41aa6e98fdfb53deaf37a": "19800000000000000000000", + "0x827531a6c5817ae35f82b00b9754fcf74c55e232": "3600000000000000000000", + "0x9c581a60b61028d934167929b22d70b313c34fd0": "50000000000000000000000", + "0x0a077db13ffeb09484c217709d5886b8bf9c5a8b": "4000000000000000000000", + "0x07b7a57033f8f11330e4665e185d234e83ec140b": "4325683000000000000000", + "0x17f523f117bc9fe978aa481eb4f5561711371bc8": "1999884000000000000000", + "0xde42fcd24ce4239383304367595f068f0c610740": "45120000000000000000", + "0x2a46d353777176ff8e83ffa8001f4f70f9733aa5": "106000000000000000000", + "0x92e4392816e5f2ef5fb65837cec2c2325cc64922": "10000000000000000000000", + "0x9a3da65023a13020d22145cfc18bab10bd19ce4e": "456516000000000000000", + "0x1a085d43ec92414ea27b914fe767b6d46b1eef44": "29550000000000000000000", + "0x3b2367f8494b5fe18d683c055d89999c9f3d1b34": "10000000000000000000000", + "0x84244fc95a6957ed7c1504e49f30b8c35eca4b79": "2000000000000000000000", + "0x5e031b0a724471d476f3bcd2eb078338bf67fbef": "18200000000000000000", + "0x97e5cc6127c4f885be02f44b42d1c8b0ac91e493": "200000000000000000000", + "0xeb1cea7b45d1bd4d0e2a007bd3bfb354759e2c16": "198000000000000000000", + "0x72feaf124579523954645b7fafff0378d1c8242e": "1000000000000000000000", + "0x8d07d42d831c2d7c838aa1872b3ad5d277176823": "349200000000000000000", + "0x9637dc12723d9c78588542eab082664f3f038d9d": "1000000000000000000000", + "0xe84b55b525f1039e744b918cb3332492e45eca7a": "200000000000000000000", + "0xb1d6b01b94d854fe8b374aa65e895cf22aa2560e": "940000000000000000000", + "0x8161d940c3760100b9080529f8a60325030f6edc": "300000000000000000000", + "0xd30ee9a12b4d68abace6baca9ad7bf5cd1faf91c": "1499936000000000000000", + "0x057949e1ca0570469e4ce3c690ae613a6b01c559": "200000000000000000000", + "0x4bf8e26f4c2790da6533a2ac9abac3c69a199433": "200000000000000000000", + "0x36fec62c2c425e219b18448ad757009d8c54026f": "400000000000000000000", + "0x77bfe93ccda750847e41a1affee6b2da96e7214e": "300000000000000000000", + "0xcc48414d2ac4d42a5962f29eee4497092f431352": "161000000000000000000", + "0xddbddd1bbd38ffade0305d30f02028d92e9f3aa8": "2000000000000000000000", + "0x30c01142907acb1565f70438b9980ae731818738": "2000000000000000000000", + "0xcffc49c1787eebb2b56cabe92404b636147d4558": "5679305000000000000000", + "0xf99eeece39fa7ef5076d855061384009792cf2e0": "500000000000000000000", + "0xe9b6a790009bc16642c8d820b7cde0e9fd16d8f5": "3640000000000000000000", + "0x03b41b51f41df20dd279bae18c12775f77ad771c": "1000000000000000000000", + "0x787d313fd36b053eeeaedbce74b9fb0678333289": "27160000000000000000000", + "0x35d2970f49dcc81ea9ee707e9c8a0ab2a8bb7463": "1440000000000000000000", + "0x4c0aca508b3caf5ee028bc707dd1e800b838f453": "18200000000000000000", + "0x514632efbd642c04de6ca342315d40dd90a2dba6": "2674000000000000000000", + "0x36810ff9d213a271eda2b8aa798be654fa4bbe06": "2000000000000000000000", + "0x0c088006c64b30c4ddafbc36cb5f05469eb62834": "2000000000000000000000", + "0x568df31856699bb5acfc1fe1d680df9960ca4359": "1379999000000000000000", + "0xd48e3f9357e303513841b3f84bda83fc89727587": "1000000000000000000000", + "0x953ef652e7b769f53d6e786a58952fa93ee6abe7": "2860000000000000000000", + "0x7c60a05f7a4a5f8cf2784391362e755a8341ef59": "1892300000000000000000", + "0x7a6b26f438d9a352449155b8876cbd17c9d99b64": "6000000000000000000000", + "0x68f719ae342bd7fef18a05cbb02f705ad38ed5b2": "1050000000000000000000", + "0x45ca8d956608f9e00a2f9974028640888465668f": "2000000000000000000000", + "0x3eaf316b87615d88f7adc77c58e712ed4d77966b": "100141000000000000000", + "0x1f0412bfedcd964e837d092c71a5fcbaf30126e2": "20000000000000000000", + "0x7471f72eeb300624eb282eab4d03723c649b1b58": "8000000000000000000000", + "0x9bf71f7fb537ac54f4e514947fa7ff6728f16d2f": "33400000000000000000", + "0x1098c774c20ca1daac5ddb620365316d353f109c": "100000000000000000000", + "0x7dd8d7a1a34fa1f8e73ccb005fc2a03a15b8229c": "200000000000000000000", + "0x0151fa5d17a2dce2d7f1eb39ef7fe2ad213d5d89": "4000000000000000000000", + "0xad6628352ed3390bafa86d923e56014cfcb360f4": "2000000000000000000000", + "0x02af2459a93d0b3f4d062636236cd4b29e3bcecf": "1910000000000000000000", + "0xace2abb63b0604409fbde3e716d2876d44e8e5dd": "152000000000000000000", + "0xe710dcd09b8101f9437bd97db90a73ef993d0bf4": "386100000000000000000", + "0xd43ee438d83de9a37562bb4e286cb1bd19f4964d": "1000000000000000000000", + "0xea3779d14a13f6c78566bcde403591413a6239db": "197000000000000000000000", + "0x6704f169e0d0b36b57bbc39f3c45437b5ee3d28d": "394000000000000000000", + "0x5584423050e3c2051f0bbd8f44bd6dbc27ecb62c": "3000000000000000000000", + "0x2f315d9016e8ee5f536681202f9084b032544d4d": "1037400000000000000000", + "0xe1b63201fae1f129f95c7a116bd9dde5159c6cda": "22837462000000000000000", + "0x2bbe62eac80ca7f4d6fdee7e7d8e28b63acf770e": "2396000000000000000000", + "0x38da1ba2de9e2c954b092dd9d81204fd016ba016": "10156000000000000000000", + "0x8a86e4a51c013b1fb4c76bcf30667c78d52eedef": "2000000000000000000000", + "0x8f717ec1552f4c440084fba1154a81dc003ebdc0": "10000000000000000000000", + "0xc760971bbc181c6a7cf77441f24247d19ce9b4cf": "2000000000000000000000", + "0x7f150afb1a77c2b45928c268c1e9bdb4641d47d8": "2000000000000000000000", + "0x1ea334b5750807ea74aac5ab8694ec5f28aa77cf": "492500000000000000000", + "0x2afb058c3d31032b353bf24f09ae20d54de57dbe": "1100000000000000000000", + "0xcaef027b1ab504c73f41f2a10979b474f97e309f": "200000000000000000000", + "0x5dd112f368c0e6ceff77a9df02a5481651a02fb7": "169800000000000000000", + "0xbd93e550403e2a06113ed4c3fba1a8913b19407e": "2000000000000000000000", + "0x500c16352e901d48ba8d04e2c767121772790b02": "30239000000000000000", + "0xd2a80327cbe55c4c7bd51ff9dde4ca648f9eb3f8": "50000000000000000000", + "0x355ccfe0e77d557b971be1a558bc02df9eee0594": "1759120000000000000000", + "0x5aed0e6cfe95f9d680c76472a81a2b680a7f93e2": "197000000000000000000", + "0xf56442f60e21691395d0bffaa9194dcaff12e2b7": "260000000000000000000", + "0x7db9eacc52e429dc83b461c5f4d86010e5383a28": "1000000000000000000000", + "0x4b984ef26c576e815a2eaed2f5177f07dbb1c476": "1560000000000000000000", + "0x9846648836a307a057184fd51f628a5f8c12427c": "19100000000000000000000", + "0x4af0db077bb9ba5e443e21e148e59f379105c592": "600000000000000000000", + "0xe96e2d3813efd1165f12f602f97f4a62909d3c66": "2300000000000000000000", + "0x30e789b3d2465e946e6210fa5b35de4e8c93085f": "2000000000000000000000", + "0x97f99b6ba31346cd98a9fe4c308f87c5a58c5151": "6000000000000000000000", + "0x595e23d788a2d4bb85a15df7136d264a635511b3": "3940000000000000000000", + "0x2f61efa5819d705f2b1e4ee754aeb8a819506a75": "1460000000000000000000", + "0x3554947b7b947b0040da52ca180925c6d3b88ffe": "66850000000000000000", + "0x8feffadb387a1547fb284da9b8147f3e7c6dc6da": "837200000000000000000", + "0x258939bbf00c9de9af5338f5d714abf6d0c1c671": "1550000000000000000000", + "0x5b333696e04cca1692e71986579c920d6b2916f9": "500000000000000000000", + "0x5381448503c0c702542b1de7cc5fb5f6ab1cf6a5": "8000000000000000000000", + "0x7e81f6449a03374191f3b7cb05d938b72e090dff": "100000000000000000000", + "0x4ef1c214633ad9c0703b4e2374a2e33e3e429291": "1337000000000000000000", + "0xfed8476d10d584b38bfa6737600ef19d35c41ed8": "1820000000000000000000", + "0x1a95c9b7546b5d1786c3858fb1236446bc0ca4ce": "1970000000000000000000", + "0x3b07db5a357f5af2484cbc9d77d73b1fd0519fc7": "500000000000000000000", + "0x5f68a24c7eb4117667737b33393fb3c2148a53b6": "51800000000000000000", + "0xd8f665fd8cd5c2bcc6ddc0a8ae521e4dc6aa6060": "1700000000000000000000", + "0xd66acc0d11b689cea6d9ea5ff4014c224a5dc7c4": "18200000000000000000", + "0x6e72b2a1186a8e2916543b1cb36a68870ea5d197": "186000000000000000000", + "0x5102a4a42077e11c58df4773e3ac944623a66d9f": "2000325000000000000000", + "0x72480bede81ad96423f2228b5c61be44fb523100": "6400000000000000000000", + "0xe076db30ab486f79194ebbc45d8fab9a9242f654": "4840000000000000000000", + "0x8ceea15eec3bdad8023f98ecf25b2b8fef27db29": "2000000000000000000000", + "0x40652360d6716dc55cf9aab21f3482f816cc2cbd": "10000000000000000000000", + "0x13e02fb448d6c84ae17db310ad286d056160da95": "2000000000000000000000", + "0xd6598b1386e93c5ccb9602ff4bbbecdbd3701dc4": "224096000000000000000", + "0xd5ea472cb9466018110af00c37495b5c2c713112": "4997800000000000000000", + "0xbb75cb5051a0b0944b4673ca752a97037f7c8c15": "200000000000000000000", + "0x8af626a5f327d7506589eeb7010ff9c9446020d2": "1400000000000000000000", + "0x318c76ecfd8af68d70555352e1f601e35988042d": "501600000000000000000", + "0x5c3d19441d196cb443662020fcad7fbb79b29e78": "14300000000000000000", + "0x27101a0f56d39a88c5a84f9b324cdde33e5cb68c": "2000000000000000000000", + "0xe229e746a83f2ce253b0b03eb1472411b57e5700": "5730000000000000000000", + "0x604cdf18628dbfa8329194d478dd5201eecc4be7": "23000000000000000000", + "0x657473774f63ac3d6279fd0743d5790c4f161503": "200000000000000000000", + "0x1ddefefd35ab8f658b2471e54790bc17af98dea4": "1000000000000000000000", + "0xac3900298dd14d7cc96d4abb428da1bae213ffed": "24730250000000000000000", + "0x944f07b96f90c5f0d7c0c580533149f3f585a078": "74000000000000000000", + "0x232c6d03b5b6e6711efff190e49c28eef36c82b0": "1337000000000000000000", + "0xc87c77e3c24adecdcd1038a38b56e18dead3b702": "8800000000000000000000", + "0xc4b6e5f09cc1b90df07803ce3d4d13766a9c46f4": "6000000000000000000000", + "0xd44334b4e23a169a0c16bd21e866bba52d970587": "2600000000000000000000", + "0x7757a4b9cc3d0247ccaaeb9909a0e56e1dd6dcc2": "20000000000000000000", + "0xcf694081c76d18c64ca71382be5cd63b3cb476f8": "1000000000000000000000", + "0x133e4f15e1e39c53435930aaedf3e0fe56fde843": "20000000000000000000", + "0xf067fb10dfb293e998abe564c055e3348f9fbf1e": "2000000000000000000000", + "0x94449c01b32a7fa55af8104f42cdd844aa8cbc40": "16548000000000000000000", + "0x0e2094ac1654a46ba1c4d3a40bb8c17da7f39688": "358000000000000000000", + "0x738ca94db7ce8be1c3056cd6988eb376359f3353": "25500000000000000000000", + "0x0cfb172335b16c87d519cd1475530d20577f5e0e": "100000000000000000000000", + "0x3cb561ce86424b359891e364ec925ffeff277df7": "200000000000000000000", + "0x5f981039fcf50225e2adf762752112d1cc26b6e3": "499954000000000000000", + "0xb43657a50eecbc3077e005d8f8d94f377876bad4": "35460000000000000000", + "0xd07e511864b1cf9969e3560602829e32fc4e71f5": "50000000000000000000", + "0x11306c7d57588637780fc9fde8e98ecb008f0164": "1999944000000000000000", + "0x45ca9862003b4e40a3171fb5cafa9028cac8de19": "13790000000000000000000", + "0x231d94155dbcfe2a93a319b6171f63b20bd2b6fa": "3819952000000000000000", + "0xe7533e270cc61fa164ac1553455c105d04887e14": "121550000000000000000", + "0x070d5d364cb7bbf822fc2ca91a35bdd441b215d5": "2000000000000000000000", + "0xd475477fa56390d33017518d6711027f05f28dbf": "1975032000000000000000", + "0xcea34a4dd93dd9aefd399002a97d997a1b4b89cd": "1500000000000000000000", + "0x560becdf52b71f3d8827d927610f1a980f33716f": "429413000000000000000", + "0xf632adff490da4b72d1236d04b510f74d2faa3cd": "1400000000000000000000", + "0x2fdd9b79df8df530ad63c20e62af431ae99216b8": "21000000000000000000", + "0x535201a0a1d73422801f55ded4dfaee4fbaa6e3b": "39641000000000000000", + "0x409d5a962edeeebea178018c0f38b9cdb213f289": "20000000000000000000", + "0x9d911f3682f32fe0792e9fb6ff3cfc47f589fca5": "4000000000000000000000", + "0x9f7a0392f857732e3004a375e6b1068d49d83031": "2000000000000000000000", + "0x6a04f5d53fc0f515be942b8f12a9cb7ab0f39778": "3129800000000000000000", + "0xbe478e8e3dde6bd403bb2d1c657c4310ee192723": "492500000000000000000", + "0x007622d84a234bb8b078230fcf84b67ae9a8acae": "698800000000000000000", + "0x9475c510ec9a26979247744c3d8c3b0e0b5f44d3": "10000000000000000000000", + "0xdf47a8ef95f2f49f8e6f58184154145d11f72797": "1910000000000000000000", + "0x13ce332dff65a6ab933897588aa23e000980fa82": "258400000000000000000", + "0x9c4bbcd5f1644a6f075824ddfe85c571d6abf69c": "1800000000000000000000", + "0xd42b20bd0311608b66f8a6d15b2a95e6de27c5bf": "2000000000000000000000", + "0xa4dd59ab5e517d398e49fa537f899fed4c15e95d": "20000000000000000000000", + "0x1a8a5ce414de9cd172937e37f2d59cff71ce57a0": "10000000000000000000000", + "0x55c564664166a1edf3913e0169f1cd451fdb5d0c": "2399800000000000000000", + "0x58ae2ddc5f4c8ada97e06c0086171767c423f5d7": "1610000000000000000000", + "0xfb79abdb925c55b9f98efeef64cfc9eb61f51bb1": "1794000000000000000000", + "0xe7a42f59fee074e4fb13ea9e57ecf1cc48282249": "20000000000000000000000", + "0x07e2b4cdeed9d087b12e556d9e770c13c099615f": "668500000000000000000", + "0x68473b7a7d965904bedba556dfbc17136cd5d434": "100000000000000000000", + "0x6c5c3a54cda7c2f118edba434ed81e6ebb11dd7a": "200000000000000000000", + "0x24c117d1d2b3a97ab11a4679c99a774a9eade8d1": "1000000000000000000000", + "0xf68c5e33fa97139df5b2e63886ce34ebf3e4979c": "3320000000000000000000", + "0xbd7419dc2a090a46e2873d7de6eaaad59e19c479": "6802000000000000000000", + "0x1a0a1ddfb031e5c8cc1d46cf05842d50fddc7130": "1000000000000000000000", + "0x2b3a68db6b0cae8a7c7a476bdfcfbd6205e10687": "2400000000000000000000", + "0x426d15f407a01135b13a6b72f8f2520b3531e302": "20000000000000000000", + "0x0394b90fadb8604f86f43fc1e35d3124b32a5989": "764000000000000000000", + "0x7412c9bc30b4df439f023100e63924066afd53af": "500000000000000000000", + "0x80e7b3205230a566a1f061d922819bb4d4d2a0e1": "14000000000000000000000", + "0xff4fc66069046c525658c337a917f2d4b832b409": "2000000000000000000000", + "0xf5061ee2e5ee26b815503677130e1de07a52db07": "100000000000000000000", + "0x49793463e1681083d6abd6e725d5bba745dccde8": "545974000000000000000", + "0x23551f56975fe92b31fa469c49ea66ee6662f41e": "1910000000000000000000", + "0xfad96ab6ac768ad5099452ac4777bd1a47edc48f": "100000000000000000000", + "0x2a746cd44027af3ebd37c378c85ef7f754ab5f28": "394000000000000000000", + "0xb8d389e624a3a7aebce4d3e5dbdf6cdc29932aed": "200000000000000000000", + "0x7b761feb7fcfa7ded1f0eb058f4a600bf3a708cb": "4600000000000000000000", + "0x5435c6c1793317d32ce13bba4c4ffeb973b78adc": "250070000000000000000", + "0xdd04eee74e0bf30c3f8d6c2c7f52e0519210df93": "80000000000000000000", + "0x4331ab3747d35720a9d8ca25165cd285acd4bda8": "2000000000000000000000", + "0xb84c8b9fd33ece00af9199f3cf5fe0cce28cd14a": "3820000000000000000000", + "0x393f783b5cdb86221bf0294fb714959c7b45899c": "5910000000000000000000", + "0x259ec4d265f3ab536b7c70fa97aca142692c13fc": "20400000000000000000", + "0x5d2f7f0b04ba4be161e19cb6f112ce7a5e7d7fe4": "35200000000000000000", + "0xd54ba2d85681dc130e5b9b02c4e8c851391fd9b9": "3940000000000000000000", + "0x5cd8af60de65f24dc3ce5730ba92653022dc5963": "1790000000000000000000", + "0x3b42a66d979f582834747a8b60428e9b4eeccd23": "620400000000000000000", + "0x4b19eb0c354bc1393960eb06063b83926f0d67b2": "29000000000000000000", + "0x8cf3546fd1cda33d58845fc8fcfecabca7c5642a": "574027000000000000000", + "0x113612bc3ba0ee4898b49dd20233905f2f458f62": "14000000000000000000000", + "0x1f2afc0aed11bfc71e77a907657b36ea76e3fb99": "4000000000000000000000", + "0x03714b41d2a6f751008ef8dd4d2b29aecab8f36e": "6000000000000000000000", + "0x25721c87b0dc21377c7200e524b14a22f0af69fb": "4000000000000000000000", + "0x335858f749f169cabcfe52b796e3c11ec47ea3c2": "200000000000000000000", + "0x52fb46ac5d00c3518b2c3a1c177d442f8165555f": "1500000000000000000000", + "0x7a8c89c014509d56d7b68130668ff6a3ecec7370": "300000000000000000000", + "0x7d5d2f73949dadda0856b206989df0078d51a1e5": "10560000000000000000000", + "0xbe538246dd4e6f0c20bf5ad1373c3b463a131e86": "200000000000000000000", + "0x62680a15f8ccb8bdc02f7360c25ad8cfb57b8ccd": "1000000000000000000000", + "0xaa0ca3737337178a0caac3099c584b056c56301c": "880000000000000000000", + "0x1d341fa5a3a1bd051f7db807b6db2fc7ba4f9b45": "18200000000000000000", + "0x6463f715d594a1a4ace4bb9c3b288a74decf294d": "1970000000000000000000", + "0xe00d153b10369143f97f54b8d4ca229eb3e8f324": "152000000000000000000", + "0x8d0b9ea53fd263415eac11391f7ce9123c447062": "2000000000000000000000", + "0xcacb675e0996235404efafbb2ecb8152271b55e0": "700000000000000000000", + "0xb615e940143eb57f875893bc98a61b3d618c1e8c": "20000000000000000000", + "0x606f177121f7855c21a5062330c8762264a97b31": "4000000000000000000000", + "0xe3925509c8d0b2a6738c5f6a72f35314491248ce": "1012961000000000000000", + "0x3f08d9ad894f813e8e2148c160d24b353a8e74b0": "60000000000000000000000", + "0x40f4f4c06c732cd35b119b893b127e7d9d0771e4": "10000000000000000000000", + "0x1406854d149e081ac09cb4ca560da463f3123059": "1337000000000000000000", + "0xecf05d07ea026e7ebf4941002335baf2fed0f002": "200000000000000000000", + "0x9a990b8aeb588d7ee7ec2ed8c2e64f7382a9fee2": "33518000000000000000", + "0xa2e0683a805de6a05edb2ffbb5e96f0570b637c3": "20000000000000000000", + "0xfba5486d53c6e240494241abf87e43c7600d413a": "1987592000000000000000", + "0xd81bd54ba2c44a6f6beb1561d68b80b5444e6dc6": "1163806000000000000000", + "0x5298ab182a19359ffcecafd7d1b5fa212dede6dd": "20000000000000000000", + "0xd1acb5adc1183973258d6b8524ffa28ffeb23de3": "4000000000000000000000", + "0x4e7aa67e12183ef9d7468ea28ad239c2eef71b76": "4925000000000000000000", + "0x509a20bc48e72be1cdaf9569c711e8648d957334": "2000000000000000000000", + "0x949f84f0b1d7c4a7cf49ee7f8b2c4a134de32878": "685000000000000000000", + "0xedbac9527b54d6df7ae2e000cca3613ba015cae3": "1970000000000000000000", + "0xc697b70477cab42e2b8b266681f4ae7375bb2541": "5577200000000000000000", + "0x86c934e38e53be3b33f274d0539cfca159a4d0d1": "970000000000000000000", + "0x0877eeaeab78d5c00e83c32b2d98fa79ad51482f": "439420000000000000000", + "0x5e11ecf69d551d7f4f84df128046b3a13240a328": "20000000000000000000", + "0x43ff8853e98ed8406b95000ada848362d6a0392a": "22100000000000000000000", + "0xf11cf5d363746fee6864d3ca336dd80679bb87ae": "40000000000000000000000", + "0xfb223c1e22eac1269b32ee156a5385922ed36fb8": "2000000000000000000000", + "0x4e6600806289454acda330a2a3556010dfacade6": "6000000000000000000000", + "0xcfe2caaf3cec97061d0939748739bffe684ae91f": "10000000000000000000000", + "0xadeb52b604e5f77faaac88275b8d6b49e9f9f97f": "2089268000000000000000", + "0xd53c567f0c3ff2e08b7d59e2b5c73485437fc58d": "600000000000000000000", + "0xfbf75933e01b75b154ef0669076be87f62dffae1": "78000000000000000000000", + "0x7dfd2962b575bcbeee97f49142d63c30ab009f66": "4000000000000000000000", + "0xdf6485c4297ac152b289b19dde32c77ec417f47d": "1000000000000000000000", + "0xffb974673367f5c07be5fd270dc4b7138b074d57": "2470407000000000000000", + "0xf7d7af204c56f31fd94398e40df1964bd8bf123c": "150011000000000000000", + "0x4506fe19fa4b006baa3984529d8516db2b2b50ab": "2000000000000000000000", + "0xf4dc7ba85480bbb3f535c09568aaa3af6f3721c6": "7214962000000000000000", + "0xd171c3f2258aef35e599c7da1aa07300234da9a6": "2000000000000000000000", + "0x33581cee233088c0860d944e0cf1ceabb8261c2e": "13370000000000000000", + "0x1c2e3607e127caca0fbd5c5948adad7dd830b285": "19700000000000000000000", + "0xfd7ede8f5240a06541eb699d782c2f9afb2170f6": "1337000000000000000000", + "0x368c5414b56b8455171fbf076220c1cba4b5ca31": "557940000000000000000", + "0x3e8745ba322f5fd6cb50124ec46688c7a69a7fae": "4925000000000000000000", + "0x76506eb4a780c951c74a06b03d3b8362f0999d71": "500000000000000000000", + "0x96d62dfd46087f62409d93dd606188e70e381257": "2000000000000000000000", + "0x37eada93c475ded2f7e15e7787d400470fa52062": "200000000000000000000", + "0x26babf42b267fdcf3861fdd4236a5e474848b358": "1000000000000000000000", + "0x3526eece1a6bdc3ee7b400fe935b48463f31bed7": "82400000000000000000", + "0x27b62816e1e3b8d19b79d1513d5dfa855b0c3a2a": "99941000000000000000", + "0xb3e3c439069880156600c2892e448d4136c92d9b": "850000000000000000000", + "0x574ad9355390e4889ef42acd138b2a27e78c00ae": "1557000000000000000000", + "0xf0b9d683cea12ba600baace219b0b3c97e8c00e4": "100000000000000000000", + "0xa437fe6ec103ca8d158f63b334224eccac5b3ea3": "8000000000000000000000", + "0x7a48d877b63a8f8f9383e9d01e53e80c528e955f": "8000000000000000000000", + "0xe965daa34039f7f0df62375a37e5ab8a72b301e7": "4796000000000000000000", + "0x72cd048a110574482983492dfb1bd27942a696ba": "2000000000000000000000", + "0x6611ce59a98b072ae959dc49ad511daaaaa19d6b": "200000000000000000000", + "0x0d92582fdba05eabc3e51538c56db8813785b328": "191000000000000000000", + "0xe87e9bbfbbb71c1a740c74c723426df55d063dd9": "7998000000000000000000", + "0x9c99a1da91d5920bc14e0cb914fdf62b94cb8358": "20000000000000000000000", + "0xfe8e6e3665570dff7a1bda697aa589c0b4e9024a": "2000000000000000000000", + "0x811461a2b0ca90badac06a9ea16e787b33b196cc": "164000000000000000000", + "0xd211b21f1b12b5096181590de07ef81a89537ead": "2000000000000000000000", + "0x01155057002f6b0d18acb9388d3bc8129f8f7a20": "1340000000000000000000", + "0x8ce22f9fa372449a420610b47ae0c8d565481232": "2000000000000000000000", + "0xe02b74a47628be315b1f76b315054ad44ae9716f": "4000000000000000000000", + "0x92a7c5a64362e9f842a23deca21035857f889800": "1999944000000000000000", + "0x5213f459e078ad3ab95a0920239fcf1633dc04ca": "2599989000000000000000", + "0xc9957ba94c1b29e5277ec36622704904c63dc023": "1923000000000000000000", + "0x6ac40f532dfee5118117d2ad352da77d4f6da2c8": "400000000000000000000", + "0xea1efb3ce789bedec3d67c3e1b3bc0e9aa227f90": "734000000000000000000", + "0xb01e389b28a31d8e4995bdd7d7c81beeab1e4119": "1000000000000000000000", + "0xee97aa8ac69edf7a987d6d70979f8ec1fbca7a94": "376000000000000000000", + "0x0fad05507cdc8f24b2be4cb7fa5d927ddb911b88": "3004447000000000000000", + "0xb6e8afd93dfa9af27f39b4df06076710bee3dfab": "25000000000000000000", + "0x7d0b255efb57e10f7008aa22d40e9752dfcf0378": "29944000000000000000", + "0xaef5b12258a18dec07d5ec2e316574919d79d6d6": "2000000000000000000000", + "0x63666755bd41b5986997783c13043008242b3cb5": "500000000000000000000", + "0x921f5261f4f612760706892625c75e7bce96b708": "2000000000000000000000", + "0x10e1e3377885c42d7df218522ee7766887c05e6a": "300031000000000000000", + "0x134163be9fbbe1c5696ee255e90b13254395c318": "200000000000000000000", + "0x870f15e5df8b0eabd02569537a8ef93b56785c42": "388000000000000000000", + "0x68eec1e288ac31b6eaba7e1fbd4f04ad579a6b5d": "2000000000000000000000", + "0x1a2694ec07cf5e4d68ba40f3e7a14c53f3038c6e": "1000073000000000000000", + "0xcd9b4cef73390c83a8fd71d7b540a7f9cf8b8c92": "90000000000000000000", + "0xc8de7a564c7f4012a6f6d10fd08f47890fbf07d4": "300000000000000000000", + "0xc0345b33f49ce27fe82cf7c84d141c68f590ce76": "1000000000000000000000", + "0xfe53b94989d89964da2061539526bbe979dd2ea9": "1930600000000000000000", + "0x14410fb310711be074a80883c635d0ef6afb2539": "2000000000000000000000", + "0x1d344e962567cb27e44db9f2fac7b68df1c1e6f7": "1940000000000000000000", + "0xfe016ec17ec5f10e3bb98ff4a1eda045157682ab": "375804000000000000000", + "0xe89da96e06beaf6bd880b378f0680c43fd2e9d30": "601400000000000000000", + "0x0fee81ac331efd8f81161c57382bb4507bb9ebec": "400030000000000000000", + "0x40cf90ef5b768c5da585002ccbe6617650d8e837": "999800000000000000000", + "0x256fa150cc87b5056a07d004efc84524739e62b5": "200000000000000000000", + "0x1b9b2dc2960e4cb9408f7405827c9b59071612fd": "1000000000000000000000", + "0x0efd1789eb1244a3dede0f5de582d8963cb1f39f": "1500000000000000000000", + "0x049c5d4bc6f25d4e456c697b52a07811ccd19fb1": "300048000000000000000", + "0x02b7b1d6b34ce053a40eb65cd4a4f7dddd0e9f30": "685000000000000000000", + "0xc1827686c0169485ec15b3a7c8c01517a2874de1": "40000000000000000000", + "0xd8e5c9675ef4deed266b86956fc4590ea7d4a27d": "1000000000000000000000", + "0x48f883e567b436a27bb5a3124dbc84dec775a800": "771840000000000000000", + "0xa34076f84bd917f20f8342c98ba79e6fb08ecd31": "4200000000000000000000", + "0x21ce6d5b9018cec04ad6967944bea39e8030b6b8": "20000000000000000000", + "0x0596a27dc3ee115fce2f94b481bc207a9e261525": "1000000000000000000000", + "0x717cf9beab3638308ded7e195e0c86132d163fed": "15097428000000000000000", + "0xd5ce55d1b62f59433c2126bcec09bafc9dfaa514": "197000000000000000000", + "0x7dd46da677e161825e12e80dc446f58276e1127c": "820000000000000000000", + "0x98c5494a03ac91a768dffc0ea1dde0acbf889019": "200000000000000000000000", + "0x617ff2cc803e31c9082233b825d025be3f7b1056": "1970000000000000000000", + "0x1091176be19b9964a8f72e0ece6bf8e3cfad6e9c": "10020000000000000000000", + "0x4ea56e1112641c038d0565a9c296c463afefc17e": "182000000000000000000", + "0xe303167f3d4960fe881b32800a2b4aeff1b088d4": "2000000000000000000000", + "0x773141127d8cf318aebf88365add3d5527d85b6a": "1000076000000000000000", + "0xb916b1a01cdc4e56e7657715ea37e2a0f087d106": "2406017000000000000000", + "0x46a430a2d4a894a0d8aa3feac615361415c3f81f": "2000000000000000000000", + "0xe6a3010f0201bc94ff67a2f699dfc206f9e76742": "879088000000000000000", + "0xd7ad09c6d32657685355b5c6ec8e9f57b4ebb982": "1970000000000000000000", + "0x95e80a82c20cbe3d2060242cb92d735810d034a2": "32511000000000000000", + "0x9a390162535e398877e416787d6239e0754e937c": "1000000000000000000000", + "0xd85fdeaf2a61f95db902f9b5a53c9b8f9266c3ac": "2010000000000000000000", + "0xc3e20c96df8d4e38f50b265a98a906d61bc51a71": "2000000000000000000000", + "0x2949fd1def5c76a286b3872424809a07db3966f3": "5236067000000000000000", + "0x86cdb7e51ac44772be3690f61d0e59766e8bfc18": "4000000000000000000000", + "0x749a4a768b5f237248938a12c623847bd4e688dc": "72000000000000000000", + "0x3524a000234ebaaf0789a134a2a417383ce5282a": "5635000000000000000000", + "0x7b43c7eea8d62355b0a8a81da081c6446b33e9e0": "4000000000000000000000", + "0x0eb189ef2c2d5762a963d6b7bdf9698ea8e7b48a": "1337000000000000000000", + "0x767fd7797d5169a05f7364321c19843a8c348e1e": "18800000000000000000", + "0x1b2639588b55c344b023e8de5fd4087b1f040361": "1500000000000000000000", + "0x1e33d1c2fb5e084f2f1d54bc5267727fec3f985d": "500000000000000000000", + "0x06b106649aa8c421ddcd1b8c32cd0418cf30da1f": "40000000000000000000000", + "0x3c5a241459c6abbf630239c98a30d20b8b3ac561": "157600000000000000000", + "0x0f4f94b9191bb7bb556aaad7c74ddb288417a50b": "1400000000000000000000", + "0xd6f4a7d04e8faf20e8c6eb859cf7f78dd23d7a15": "131784000000000000000", + "0x61adf5929a5e2981684ea243baa01f7d1f5e148a": "110302000000000000000", + "0x8f58d8348fc1dc4e0dd8343b6543c857045ee940": "13632400000000000000000", + "0xa6e3baa38e104a1e27a4d82869afb1c0ae6eff8d": "19690000000000000000", + "0x67350b5331926f5e28f3c1e986f96443809c8b8c": "352000000000000000000", + "0x0b5d66b13c87b392e94d91d5f76c0d450a552843": "2000000000000000000000", + "0x562a8dcbbeeef7b360685d27303bd69e094accf6": "10000000000000000000000", + "0xb5d9934d7b292bcf603b2880741eb760288383a0": "16700000000000000000", + "0x6fc53662371dca587b59850de78606e2359df383": "180000000000000000000", + "0xe069c0173352b10bf6834719db5bed01adf97bbc": "18894000000000000000", + "0x10a93457496f1108cd98e140a1ecdbae5e6de171": "399600000000000000000", + "0x69ff8901b541763f817c5f2998f02dcfc1df2997": "40000000000000000000", + "0x00c27d63fde24b92ee8a1e7ed5d26d8dc5c83b03": "2000000000000000000000", + "0x77f81b1b26fc84d6de97ef8b9fbd72a33130cc4a": "1000000000000000000000", + "0x6d20ef9704670a500bb269b5832e859802049f01": "130000000000000000000", + "0x186afdc085f2a3dce4615edffbadf71a11780f50": "200000000000000000000", + "0x7ff0c63f70241bece19b737e5341b12b109031d8": "346000000000000000000", + "0x9d4174aa6af28476e229dadb46180808c67505c1": "1219430000000000000000", + "0x5fec49c665e64ee89dd441ee74056e1f01e92870": "6320000000000000000000", + "0x6cd228dc712169307fe27ceb7477b48cfc8272e5": "77600000000000000000", + "0xfd918536a8efa6f6cefe1fa1153995fef5e33d3b": "500000000000000000000", + "0x2fbb504a5dc527d3e3eb0085e2fc3c7dd538cb7a": "1249961000000000000000", + "0x6ab323ae5056ed0a453072c5abe2e42fcf5d7139": "880000000000000000000", + "0x67d682a282ef73fb8d6e9071e2614f47ab1d0f5e": "1000000000000000000000", + "0x1858cf11aea79f5398ad2bb22267b5a3c952ea74": "9850000000000000000000", + "0x39d6caca22bccd6a72f87ee7d6b59e0bde21d719": "2002000000000000000000", + "0xdaa63cbda45dd487a3f1cd4a746a01bb5e060b90": "4797800000000000000000", + "0xa90476e2efdfee4f387b0f32a50678b0efb573b5": "10000000000000000000000", + "0xae5aa1e6c2b60f6fd3efe721bb4a719cbe3d6f5d": "795860000000000000000", + "0xac2e766dac3f648f637ac6713fddb068e4a4f04d": "197000000000000000000", + "0x6191ddc9b64a8e0890b4323709d7a07c48b92a64": "775000000000000000000", + "0xcc4f0ff2aeb67d54ce3bc8c6510b9ae83e9d328b": "400000000000000000000", + "0xca23f62dff0d6460036c62e840aec5577e0befd2": "140800000000000000000", + "0x97dc26ec670a31e0221d2a75bc5dc9f90c1f6fd4": "50000000000000000000", + "0x848c994a79003fe7b7c26cc63212e1fc2f9c19eb": "2000000000000000000000", + "0x20c284ba10a20830fc3d699ec97d2dfa27e1b95e": "2000000000000000000000", + "0x4fa3f32ef4086448b344d5f0a9890d1ce4d617c3": "1500000000000000000000", + "0x255abc8d08a096a88f3d6ab55fbc7352bddcb9ce": "82161000000000000000", + "0x7c60e51f0be228e4d56fdd2992c814da7740c6bc": "200000000000000000000", + "0x1c356cfdb95febb714633b28d5c132dd84a9b436": "25000000000000000000", + "0x5062e5134c612f12694dbd0e131d4ce197d1b6a4": "1000000000000000000000", + "0xed862616fcbfb3becb7406f73c5cbff00c940755": "1700000000000000000000", + "0x62c9b271ffd5b770a5eee4edc9787b5cdc709714": "2000000000000000000000", + "0x3c925619c9b33144463f0537d896358706c520b0": "2000000000000000000000", + "0xffe2e28c3fb74749d7e780dc8a5d422538e6e451": "253319000000000000000", + "0x37195a635dcc62f56a718049d47e8f9f96832891": "1970000000000000000000", + "0x90e9a9a82edaa814c284d232b6e9ba90701d4952": "100007000000000000000", + "0xe0c4ab9072b4e6e3654a49f8a8db026a4b3386a9": "2000000000000000000000", + "0x439dee3f7679ff1030733f9340c096686b49390b": "2000000000000000000000", + "0x548558d08cfcb101181dac1eb6094b4e1a896fa6": "1999944000000000000000", + "0x3090f8130ec44466afadb36ed3c926133963677b": "4000000000000000000000", + "0xd1648503b1ccc5b8be03fa1ec4f3ee267e6adf7b": "5828000000000000000000", + "0x65b42faecc1edfb14283ca979af545f63b30e60c": "18200000000000000000", + "0x6420f8bcc8164a6152a99d6b99693005ccf7e053": "999972000000000000000", + "0x84b4b74e6623ba9d1583e0cfbe49643f16384149": "20000000000000000000", + "0xb8310a16cc6abc465007694b930f978ece1930bd": "740000000000000000000", + "0x16019a4dafab43f4d9bf4163fae0847d848afca2": "25060000000000000000", + "0x479298a9de147e63a1c7d6d2fce089c7e64083bd": "9999999000000000000000", + "0x030973807b2f426914ad00181270acd27b8ff61f": "5348000000000000000000", + "0xb07bcf1cc5d4462e5124c965ecf0d70dc27aca75": "1600000000000000000000", + "0xa2f798e077b07d86124e1407df32890dbb4b6379": "200000000000000000000", + "0x0cbd921dbe121563b98a6871fecb14f1cc7e88d7": "200000000000000000000", + "0x6042276df2983fe2bc4759dc1943e18fdbc34f77": "1970000000000000000000", + "0xbe2b2280523768ea8ac35cd9e888d60a719300d4": "2000000000000000000000", + "0x2f4da753430fc09e73acbccdcde9da647f2b5d37": "200000000000000000000", + "0x734223d27ff23e5906caed22595701bb34830ca1": "2000000000000000000000", + "0x5b430d779696a3653fc60e74fbcbacf6b9c2baf1": "14000000000000000000000", + "0x84232107932b12e03186583525ce023a703ef8d9": "2000000000000000000000", + "0x4ed14d81b60b23fb25054d8925dfa573dcae6168": "340000000000000000000", + "0x8b338411f26ccf37658cc75521d77629099e467d": "2000000000000000000000", + "0xa37622ac9bbdc4d82b75015d745b9f8de65a28ec": "2910000000000000000000", + "0x1dd77441844afe9cc18f15d8c77bccfb655ee034": "4850000000000000000000", + "0x65849be1af20100eb8a3ba5a5be4d3ae8db5a70e": "400000000000000000000", + "0xd5586da4e59583c8d86cccf71a86197f17996749": "2000000000000000000000", + "0x4b53ae59c784b6b5c43616b9a0809558e684e10c": "1200000000000000000000", + "0x55d42eb495bf46a634997b5f2ea362814918e2b0": "106128000000000000000", + "0x959ff17f1d51b473b44010052755a7fa8c75bd54": "1970000000000000000000", + "0x5a2daab25c31a61a92a4c82c9925a1d2ef58585e": "225400000000000000000", + "0x24c0c88b54a3544709828ab4ab06840559f6c5e2": "2674000000000000000000", + "0x7e8649e690fc8c1bfda1b5e186581f649b50fe33": "98500000000000000000", + "0x4acfa9d94eda6625c9dfa5f9f4f5d107c4031fdf": "39400000000000000000", + "0x5778ffdc9b94c5a59e224eb965b6de90f222d170": "335320000000000000000", + "0x825a7f4e10949cb6f8964268f1fa5f57e712b4c4": "20000000000000000000", + "0x6f39cc37caaa2ddc9b610f6131e0619fae772a3c": "500000000000000000000", + "0x5b437365ae3a9a2ff97c68e6f90a7620188c7d19": "2002000000000000000000", + "0x6710c2c03c65992b2e774be52d3ab4a6ba217ef7": "11600000000000000000000", + "0x896e335ca47af57962fa0f4dbf3e45e688cba584": "1368500000000000000000", + "0xb57549bfbc9bdd18f736b22650e48a73601fa65c": "446000000000000000000", + "0x85ca1e727e9d1a87991cc2c41840ebb9edf21d1b": "13370000000000000000", + "0xcf4166746e1d3bc1f8d0714b01f17e8a62df1464": "1004700000000000000000", + "0x4a75c3d4fa6fccbd5dd5a703c15379a1e783e9b7": "1820000000000000000000", + "0x9e5811b40be1e2a1e1d28c3b0774acde0a09603d": "3000000000000000000000", + "0x763886e333c56feff85be3951ab0b889ce262e95": "2000000000000000000000", + "0x2b101e822cd962962a06800a2c08d3b15d82b735": "152000000000000000000", + "0xa01e9476df84431825c836e8803a97e22fa5a0cd": "6000000000000000000000", + "0xbe4e7d983f2e2a636b1102ec7039efebc842e98d": "66000000000000000000", + "0x9e427272516b3e67d4fcbf82f59390d04c8e28e5": "4000000000000000000000", + "0xe0d231e144ec9107386c7c9b02f1702ceaa4f700": "5000057000000000000000", + "0x6a0f056066c2d56628850273d7ecb7f8e6e9129e": "5000016000000000000000", + "0xd1538e9a87e59ca9ec8e5826a5b793f99f96c4c3": "1000000000000000000000", + "0xf85bab1cb3710fc05fa19ffac22e67521a0ba21d": "2003000000000000000000", + "0xf7cbdba6be6cfe68dbc23c2b0ff530ee05226f84": "20000000000000000000", + "0x4eb87ba8788eba0df87e5b9bd50a8e45368091c1": "20000000000000000000", + "0x1479a9ec7480b74b5db8fc499be352da7f84ee9c": "1000000000000000000000", + "0xd311bcd7aa4e9b4f383ff3d0d6b6e07e21e3705d": "200000000000000000000", + "0x425c1816868f7777cc2ba6c6d28c9e1e796c52b3": "10000000000000000000000", + "0x8510ee934f0cbc900e1007eb38a21e2a5101b8b2": "106000000000000000000", + "0x01e864d354741b423e6f42851724468c74f5aa9c": "20000000000000000000000", + "0xa543a066fb32a8668aa0736a0c9cd40d78098727": "1000000000000000000000", + "0xf3eb1948b951e22df1617829bf3b8d8680ec6b68": "4000000000000000000000", + "0xf6b782f4dcd745a6c0e2e030600e04a24b25e542": "400000000000000000000", + "0x229f4f1a2a4f540774505b4707a81de44410255b": "2000000000000000000000", + "0xcff8d06b00e3f50c191099ad56ba6ae26571cd88": "1000000000000000000000", + "0x910b7d577a7e39aa23acf62ad7f1ef342934b968": "10000000000000000000000", + "0x392433d2ce83d3fb4a7602cca3faca4ec140a4b0": "51000000000000000000", + "0x8ff46045687723dc33e4d099a06904f1ebb584dc": "2000000000000000000000", + "0x9ca0429f874f8dcee2e9c062a9020a842a587ab9": "2000000000000000000000", + "0x160ceb6f980e04315f53c4fc988b2bf69e284d7d": "19100000000000000000", + "0xc340f9b91c26728c31d121d5d6fc3bb56d3d8624": "2000000000000000000000", + "0xafa1d5ad38fed44759c05b8993c1aa0dace19f40": "80000000000000000000", + "0x3969b4f71bb8751ede43c016363a7a614f76118e": "2000000000000000000000", + "0x2bb6f578adfbe7b2a116b3554facf9969813c319": "7400000000000000000000", + "0x8334764b7b397a4e578f50364d60ce44899bff94": "92500000000000000000", + "0x9dd2196624a1ddf14a9d375e5f07152baf22afa2": "1211747000000000000000", + "0xf242da845d42d4bf779a00f295b40750fe49ea13": "1000000000000000000000", + "0xc6234657a807384126f8968ca1708bb07baa493c": "20000000000000000000", + "0x94c055e858357aaa30cf2041fa9059ce164a1f91": "19999000000000000000000", + "0x74c73c90528a157336f1e7ea20620ae53fd24728": "8969310000000000000000", + "0x19e7f3eb7bf67f3599209ebe08b62ad3327f8cde": "2000000000000000000000", + "0xb2b516fdd19e7f3864b6d2cf1b252a4156f1b03b": "53720000000000000000", + "0x8164e78314ae16b28926cc553d2ccb16f356270d": "8450000000000000000000", + "0x4d828894752f6f25175daf2177094487954b6f9f": "1459683000000000000000", + "0xab84a0f147ad265400002b85029a41fc9ce57f85": "1000000000000000000000", + "0xf3fe51fde34413c73318b9c85437fe7e820f561a": "1003200000000000000000", + "0x16c7b31e8c376282ac2271728c31c95e35d952c3": "2000000000000000000000", + "0x80d5c40c59c7f54ea3a55fcfd175471ea35099b3": "1000000000000000000000", + "0x7abb10f5bd9bc33b8ec1a82d64b55b6b18777541": "20000000000000000000000", + "0x095b0ea2b218d82e0aea7c2889238a39c9bf9077": "20000000000000000000000", + "0x5d5cdbe25b2a044b7b9be383bcaa5807b06d3c6b": "2000000000000000000000", + "0x323749a3b971959e46c8b4822dcafaf7aaf9bd6e": "20064000000000000000", + "0xe0272213e8d2fd3e96bd6217b24b4ba01b617079": "20000000000000000000", + "0x00acbfb2f25a5485c739ef70a44eeeeb7c65a66f": "100000000000000000000", + "0x52f15423323c24f19ae2ab673717229d3f747d9b": "1026115000000000000000", + "0xcb4abfc282aed76e5d57affda542c1f382fcacf4": "8136100000000000000000", + "0xf71b4534f286e43093b1e15efea749e7597b8b57": "104410000000000000000000", + "0x44cd77535a893fa7c4d5eb3a240e79d099a72d2d": "820000000000000000000", + "0xeb3ce7fc381c51db7d5fbd692f8f9e058a4c703d": "200000000000000000000", + "0xf1c8c4a941b4628c0d6c30fda56452d99c7e1b64": "1449000000000000000000", + "0x277677aba1e52c3b53bfa2071d4e859a0af7e8e1": "1000000000000000000000", + "0xa5f075fd401335577b6683c281e6d101432dc6e0": "2680000000000000000000", + "0xe28dbc8efd5e416a762ec0e018864bb9aa83287b": "24533161000000000000000", + "0x2b717cd432a323a4659039848d3b87de26fc9546": "500000000000000000000000", + "0xb358e97c70b605b1d7d729dfb640b43c5eafd1e7": "20000000000000000000000", + "0x293c2306df3604ae4fda0d207aba736f67de0792": "200000000000000000000", + "0x74d366b07b2f56477d7c7077ac6fe497e0eb6559": "5000000000000000000000", + "0x490145afa8b54522bb21f352f06da5a788fa8f1d": "9231182000000000000000", + "0x862569211e8c6327b5415e3a67e5738b15baaf6e": "140000000000000000000", + "0x5a74ba62e7c81a3474e27d894fed33dd24ad95fe": "18200000000000000000", + "0x536e4d8029b73f5579dca33e70b24eba89e11d7e": "1970000000000000000000", + "0x25c6e74ff1d928df98137af4df8430df24f07cd7": "390000000000000000000", + "0x19b36b0c87ea664ed80318dc77b688dde87d95a5": "1948386000000000000000", + "0xabc4caeb474d4627cb6eb456ecba0ecd08ed8ae1": "3940000000000000000000", + "0x8ea656e71ec651bfa17c5a5759d86031cc359977": "100000000000000000000", + "0x8d620bde17228f6cbba74df6be87264d985cc179": "100000000000000000000", + "0xb2aa2f1f8e93e79713d92cea9ffce9a40af9c82d": "2000000000000000000000", + "0x198ef1ec325a96cc354c7266a038be8b5c558f67": "608334724000000000000000", + "0x6a13d5e32c1fd26d7e91ff6e053160a89b2c8aad": "53480000000000000000", + "0xe056bf3ff41c26256fef51716612b9d39ade999c": "100009000000000000000", + "0x2c128c95d957215101f043dd8fc582456d41016d": "835000000000000000000", + "0x2560b09b89a4ae6849ed5a3c9958426631714466": "1700000000000000000000", + "0xd3d6e9fb82542fd29ed9ea3609891e151396b6f7": "54000000000000000000000", + "0xa7607b42573bb6f6b4d4f23c7e2a26b3a0f6b6f0": "1610000000000000000000", + "0x020362c3ade878ca90d6b2d889a4cc5510eed5f3": "1042883000000000000000", + "0x14830704e99aaad5c55e1f502b27b22c12c91933": "620000000000000000000", + "0x8030b111c6983f0485ddaca76224c6180634789f": "80000000000000000000", + "0x2c5b7d7b195a371bf9abddb42fe04f2f1d9a9910": "200000000000000000000", + "0x77d43fa7b481dbf3db530cfbf5fdced0e6571831": "2000000000000000000000", + "0x2d90b415a38e2e19cdd02ff3ad81a97af7cbf672": "109800000000000000000", + "0x2fc82ef076932341264f617a0c80dd571e6ae939": "7160000000000000000000", + "0xdfe549fe8430e552c6d07cc3b92ccd43b12fb50f": "83620000000000000000", + "0x1e8e689b02917cdc29245d0c9c68b094b41a9ed6": "2000000000000000000000", + "0x21c3a8bba267c8cca27b1a9afabad86f607af708": "8940000000000000000000", + "0x143c639752caeecf6a997d39709fc8f19878c7e8": "1970000000000000000000", + "0x02603d7a3bb297c67c877e5d34fbd5b913d4c63a": "20000000000000000000", + "0xa166f911c644ac3213d29e0e1ae010f794d5ad26": "2000000000000000000000", + "0x6eb3819617404058268f0c3cff3596bfe9148c1c": "1670000000000000000000", + "0x7a67dd043a504fc2f2fc7194e9becf484cecb1fb": "250000000000000000000", + "0xf824ee331e4ac3cc587693395b57ecf625a6c0c2": "1600930000000000000000", + "0x1179c60dbd068b150b074da4be23033b20c68558": "680000000000000000000", + "0xd2a479404347c5543aab292ae1bb4a6f158357fa": "4000000000000000000000", + "0xb0d32bd7e4e695b7b01aa3d0416f80557dba9903": "16300000000000000000000", + "0xf734ec03724ddee5bb5279aa1afcf61b0cb448a1": "4238080000000000000000", + "0xc04069dfb18b096c7867f8bee77a6dc7477ad062": "2674000000000000000000", + "0x80c53ee7e3357f94ce0d7868009c208b4a130125": "2000000000000000000000", + "0x0f32d9cb4d0fdaa0150656bb608dcc43ed7d9301": "753978000000000000000", + "0x6ddb6092779d5842ead378e21e8120fd4c6bc132": "2000000000000000000000", + "0x82ea01e3bf2e83836e71704e22a2719377efd9c3": "3040000000000000000000", + "0x44c1110b18870ec81178d93d215838c551d48e64": "199958000000000000000", + "0x7727af101f0aaba4d23a1cafe17c6eb5dab1c6dc": "2000000000000000000000", + "0xa11a03c4bb26d21eff677d5d555c80b25453ee7a": "69979000000000000000", + "0x19e5dea3370a2c746aae34a37c531f41da264e83": "200000000000000000000", + "0xc325c352801ba883b3226c5feb0df9eae2d6e653": "3940000000000000000000", + "0xae5055814cb8be0c117bb8b1c8d2b63b4698b728": "32035000000000000000", + "0xdeb1bc34d86d4a4dde2580d8beaf074eb0e1a244": "1580000000000000000000", + "0x558360206883dd1b6d4a59639e5629d0f0c675d0": "2000000000000000000000", + "0xa9d6f871ca781a759a20ac3adb972cf12829a208": "925000000000000000000", + "0xb0ac4eff6680ee14169cdadbffdb30804f6d25f5": "2000000000000000000000", + "0xf1b58faffa8794f50af8e88309c7a6265455d51a": "999800000000000000000", + "0xa61a54df784a44d71b771b87317509211381f200": "1000000000000000000000", + "0xbaa4b64c2b15b79f5f204246fd70bcbd86e4a92a": "500000000000000000000", + "0xa20d8ff60caae31d02e0b665fa435d76f77c9442": "489600000000000000000", + "0xf3e74f470c7d3a3f0033780f76a89f3ef691e6cb": "3021800000000000000000", + "0xd330728131fe8e3a15487a34573c93457e2afe95": "4000000000000000000000", + "0x9af9dbe47422d177f945bdead7e6d82930356230": "3940000000000000000000", + "0x0eb5b662a1c718608fd52f0c25f9378830178519": "6091400000000000000000", + "0xfda6810ea5ac985d6ffbf1c511f1c142edcfddf7": "4000000000000000000000", + "0x832c54176bdf43d2c9bcd7b808b89556b89cbf31": "200000000000000000000", + "0x704d5de4846d39b53cd21d1c49f096db5c19ba29": "152000000000000000000", + "0x344a8db086faed4efc37131b3a22b0782dad7095": "500000000000000000000", + "0x8c7fa5cae82fedb69ab189d3ff27ae209293fb93": "400030000000000000000", + "0xad660dec825522a9f62fcec3c5b731980dc286ea": "3000000000000000000000", + "0x13b9b10715714c09cfd610cf9c9846051cb1d513": "1970000000000000000000", + "0x40467d80e74c35407b7db51789234615fea66818": "388000000000000000000", + "0x30e9d5a0088f1ddb2fd380e2a049192266c51cbf": "196910000000000000000", + "0xb2d1e99af91231858e7065dd1918330dc4c747d5": "16700000000000000000000", + "0x9f21302ca5096bea7402b91b0fd506254f999a3d": "1246832000000000000000", + "0xd24b6644f439c8051dfc64d381b8c86c75c17538": "2000000000000000000000", + "0x8228ebc087480fd64547ca281f5eace3041453b9": "1970000000000000000000", + "0x29da3e35b23bb1f72f8e2258cf7f553359d24bac": "20000000000000000000000", + "0xc8e558a3c5697e6fb23a2594c880b7a1b68f9860": "10000000000000000000000", + "0x6b951a43274eeafc8a0903b0af2ec92bf1efc839": "100000000000000000000", + "0xd015f6fcb84df7bb410e8c8f04894a881dcac237": "1038000000000000000000", + "0x6ccb03acf7f53ce87aadcc21a9932de915f89804": "8000000000000000000000", + "0x388c85a9b9207d8146033fe38143f6d34b595c47": "200000000000000000000", + "0x429c06b487e8546abdfc958a25a3f0fba53f6f00": "13503000000000000000", + "0x771507aeee6a255dc2cd9df55154062d0897b297": "334250000000000000000", + "0x5a2b1c853aeb28c45539af76a00ac2d8a8242896": "25000000000000000000", + "0xf4d67a9044b435b66e8977ff39a28dc4bd53729a": "200000000000000000000", + "0x063759dd1c4e362eb19398951ff9f8fad1d31068": "10000000000000000000000", + "0xcb58990bcd90cfbf6d8f0986f6fa600276b94e2d": "999925000000000000000", + "0x6df5c84f7b909aab3e61fe0ecb1b3bf260222ad2": "4000000000000000000000", + "0xdeb2495d6aca7b2a6a2d138b6e1a42e2dc311fdd": "2000000000000000000000", + "0x59203cc37599b648312a7cc9e06dacb589a9ae6a": "148689000000000000000", + "0xfc9b347464b2f9929d807e039dae48d3d98de379": "14000000000000000000000", + "0x48d2434b7a7dbbff08223b6387b05da2e5093126": "18000000000000000000000", + "0xc9d76446d5aadff80b68b91b08cd9bc8f5551ac1": "714000000000000000000", + "0x3d31587b5fd5869845788725a663290a49d3678c": "500000000000000000000", + "0xd8715ef9176f850b2e30eb8e382707f777a6fbe9": "2000000000000000000000", + "0x2c2147947ae33fb098b489a5c16bfff9abcd4e2a": "200000000000000000000", + "0xd6c0d0bc93a62e257174700e10f024c8b23f1f87": "2000000000000000000000", + "0xd1978f2e34407fab1dc2183d95cfda6260b35982": "788000000000000000000", + "0x1bf974d9904f45ce81a845e11ef4cbcf27af719e": "100000000000000000000", + "0x6e761eaa0f345f777b5441b73a0fa5b56b85f22d": "2000000000000000000000", + "0xea60436912de6bf187d3a472ff8f5333a0f7ed06": "19700000000000000000", + "0x94f8f057db7e60e675ad940f155885d1a477348e": "401100000000000000000", + "0x8933491760c8f0b4df8caac78ed835caee21046d": "20000000000000000000000", + "0xa7775e4af6a23afa201fb78b915e51a515b7a728": "120000000000000000000", + "0xd8d64384249b776794063b569878d5e3b530a4b2": "177569000000000000000", + "0xbe633a3737f68439bac7c90a52142058ee8e8a6f": "960000000000000000000", + "0x90bd62a050845261fa4a9f7cf241ea630b05efb8": "500000000000000000000", + "0x552987f0651b915b2e1e5328c121960d4bdd6af4": "1790000000000000000000", + "0x0baf6ecdb91acb3606a8357c0bc4f45cfd2d7e6f": "1000000000000000000000", + "0x9e5a311d9f69898a7c6a9d6360680438e67a7b2f": "1490000000000000000000", + "0x78859c5b548b700d9284cee4b6633c2f52e529c2": "2955000000000000000000", + "0xd572309169b1402ec8131a17a6aac3222f89e6eb": "13800000000000000000000", + "0x8e6d7485cbe990acc1ad0ee9e8ccf39c0c93440e": "955000000000000000000", + "0x75c11d024d12ae486c1095b7a7b9c4af3e8edeb9": "20000000000000000000", + "0x903413878aea3bc1086309a3fe768b65559e8cab": "8000000000000000000000", + "0x6d0569e5558fc7df2766f2ba15dc8aeffc5beb75": "4001070000000000000000", + "0x3815b0743f94fc8cc8654fd9d597ed7d8b77c57e": "738578000000000000000", + "0x0f26480a150961b8e30750713a94ee6f2e47fc00": "1000000000000000000000", + "0xede5de7c7fb7eee0f36e64530a41440edfbefacf": "617200000000000000000", + "0x763a7cbab70d7a64d0a7e52980f681472593490c": "600000000000000000000", + "0x6e270ad529f1f0b8d9cb6d2427ec1b7e2dc64a74": "200000000000000000000", + "0xeb3bdd59dcdda5a9bb2ac1641fd02180f5f36560": "6600000000000000000000", + "0xf4ebf50bc7e54f82e9b9bd24baef29438e259ce6": "10000000000000000000000", + "0x882c8f81872c79fed521cb5f950d8b032322ea69": "40000000000000000000000", + "0x394132600f4155e07f4d45bc3eb8d9fb72dcd784": "2941000000000000000000", + "0x0be2b94ad950a2a62640c35bfccd6c67dae450f6": "1940000000000000000000", + "0xd4c6ac742e7c857d4a05a04c33d4d05c1467571d": "200000000000000000000", + "0x1fddd85fc98be9c4045961f40f93805ecc4549e5": "164000000000000000000", + "0x534065361cb854fac42bfb5c9fcde0604ac919da": "2000000000000000000000", + "0x9a6ff5f6a7af7b7ae0ed9c20ecec5023d281b786": "2547000000000000000000", + "0x4f3a4854911145ea01c644044bdb2e5a960a982f": "4000000000000000000000", + "0x00497e92cdc0e0b963d752b2296acb87da828b24": "194800000000000000000", + "0x4ff67fb87f6efba9279930cfbd1b7a343c79fade": "400000000000000000000", + "0x62f2e5ccecd52cc4b95e0597df27cc079715608c": "143000000000000000000", + "0x1eda084e796500ba14c5121c0d90846f66e4be62": "534800000000000000000", + "0x9836b4d30473641ab56aeee19242761d72725178": "2000000000000000000000", + "0xde55de0458f850b37e4d78a641dd2eb2dd8f38ce": "4000000000000000000000", + "0x140ca28ff33b9f66d7f1fc0078f8c1eef69a1bc0": "1600000000000000000000", + "0x2014261f01089f53795630ba9dd24f9a34c2d942": "1337000000000000000000", + "0x11415fab61e0dfd4b90676141a557a869ba0bde9": "2048000000000000000000", + "0x88344909644c7ad4930fd873ca1c0da2d434c07f": "131970000000000000000", + "0x88b217ccb786a254cf4dc57f5d9ac3c455a30483": "925000000000000000000", + "0xdfdbcec1014b96da2158ca513e9c8d3b9af1c3d0": "2000000000000000000000", + "0x1ba9f7997e5387b6b2aa0135ac2452fe36b4c20d": "850000000000000000000", + "0xd70ad2c4e9eebfa637ef56bd486ad2a1e5bce093": "200000000000000000000", + "0x9ce27f245e02d1c312c1d500788c9def7690453b": "200000000000000000000", + "0x8234f463d18485501f8f85ace4972c9b632dbccc": "2000000000000000000000", + "0x994152fc95d5c1ca8b88113abbad4d710e40def6": "500000000000000000000", + "0xe5b980d28eece2c06fca6c9473068b37d4a6d6e9": "695200000000000000000", + "0x2d426912d059fad9740b2e390a2eeac0546ff01b": "1400000000000000000000", + "0x6d9997509882027ea947231424bedede2965d0ba": "2001600000000000000000", + "0x167ce7de65e84708595a525497a3eb5e5a665073": "575400000000000000000", + "0xe430c0024fdbf73a82e21fccf8cbd09138421c21": "4000000000000000000000", + "0x2e52912bc10ea39d54e293f7aed6b99a0f4c73be": "400000000000000000000", + "0x12cf8b0e465213211a5b53dfb0dd271a282c12c9": "15200000000000000000", + "0x06964e2d17e9189f88a8203936b40ac96e533c06": "18200000000000000000", + "0x66b1a63da4dcd9f81fe54f5e3fcb4055ef7ec54f": "201412000000000000000", + "0x0a77e7f72b437b574f00128b21f2ac265133528c": "2000000000000000000000", + "0x78f5c74785c5668a838072048bf8b453594ddaab": "400000000000000000000", + "0x58e554af3d87629620da61d538c7f5b4b54c4afe": "1297081000000000000000", + "0x37a10451f36166cf643dd2de6c1cbba8a011cfa3": "380000000000000000000", + "0xfe9ad12ef05d6d90261f96c8340a0381974df477": "2000000000000000000000", + "0x057f7f81cd7a406fc45994408b5049912c566463": "1700000000000000000000", + "0x55a3df57b7aaec16a162fd5316f35bec082821cf": "1970000000000000000000", + "0xc0e0b903088e0c63f53dd069575452aff52410c3": "3000000000000000000000", + "0x63e88e2e539ffb450386b4e46789b223f5476c45": "6292000000000000000000", + "0x3727341f26c12001e378405ee38b2d8464ec7140": "2000000000000000000000", + "0xc96751656c0a8ef4357b7344322134b983504aca": "2000000000000000000000", + "0x1e060dc6c5f1cb8cc7e1452e02ee167508b56542": "12715500000000000000000", + "0x18136c9df167aa17b6f18e22a702c88f4bc28245": "4000000000000000000000", + "0x116108c12084612eeda7a93ddcf8d2602e279e5c": "2000000000000000000000", + "0xbbb643d2187b364afc10a6fd368d7d55f50d1a3c": "1000000000000000000000", + "0xec83e798c396b7a55e2a2224abcd834b27ea459c": "12000000000000000000000", + "0x973f4e361fe5decd989d4c8f7d7cc97990385daf": "388500000000000000000", + "0xc0f29ed0076611b5e55e130547e68a48e26df5e4": "3000000000000000000000", + "0xfd4b551f6fdbcda6c511b5bb372250a6b783e534": "20600000000000000000", + "0x144b19f1f66cbe318347e48d84b14039466c5909": "2000000000000000000000", + "0xbf183641edb886ce60b8190261e14f42d93cce01": "25019000000000000000", + "0x94db807873860aac3d5aea1e885e52bff2869954": "3220000000000000000000", + "0x7a74cee4fa0f6370a7894f116cd00c1147b83e59": "800000000000000000000", + "0xcd32a4a8a27f1cc63954aa634f7857057334c7a3": "1085000000000000000000", + "0x7cbeb99932e97e6e02058cfc62d0b26bc7cca52b": "2000000000000000000000", + "0x8cde8b732e6023878eb23ed16229124b5f7afbec": "133700000000000000000", + "0x45c4ecb4ee891ea984a7c5cefd8dfb00310b2850": "1980000000000000000000", + "0x8b393fb0813ee101db1e14ecc7d322c72b8c0473": "455578000000000000000", + "0x7b66126879844dfa34fe65c9f288117fefb449ad": "6000000000000000000000", + "0x162ba503276214b509f97586bd842110d103d517": "9002000000000000000000", + "0x7dece6998ae1900dd3770cf4b93812bad84f0322": "100000000000000000000", + "0xec0927bac7dc36669c28354ab1be83d7eec30934": "2000000000000000000000", + "0x8d7f3e61299c2db9b9c0487cf627519ed00a9123": "1742400000000000000000", + "0x4fc46c396e674869ad9481638f0013630c87caac": "1000000000000000000000", + "0xbf68d28aaf1eeefef646b65e8cc8d190f6c6da9c": "2000000000000000000000", + "0x00969747f7a5b30645fe00e44901435ace24cc37": "1700000000000000000000", + "0x494dec4d5ee88a2771a815f1ee7264942fb58b28": "2000000000000000000000", + "0xffeac0305ede3a915295ec8e61c7f881006f4474": "98500000000000000000", + "0xb39139576194a0866195151f33f2140ad1cc86cf": "100000000000000000000000", + "0xfead1803e5e737a68e18472d9ac715f0994cc2be": "500000000000000000000", + "0x698ab9a2f33381e07c0c47433d0d21d6f336b127": "20000000000000000000", + "0xe5edc73e626f5d3441a45539b5f7a398c593edf6": "865000000000000000000", + "0xdd4f5fa2111db68f6bde3589b63029395b69a92d": "158400000000000000000", + "0x8c93c3c6db9d37717de165c3a1b4fe51952c08de": "400000000000000000000", + "0xf87bb07b289df7301e54c0efda6a2cf291e89200": "1400000000000000000000", + "0xe7a4560c84b20e0fb54c49670c2903b0a96c42a4": "598000000000000000000", + "0x00a5797f52c9d58f189f36b1d45d1bf6041f2f6b": "5456900000000000000000", + "0x9da3302240af0511c6fd1857e6ddb7394f77ab6b": "3100000000000000000000", + "0x2c2d15ff39561c1b72eda1cc027ffef23743a144": "3920000000000000000000", + "0x9b4c2715780ca4e99e60ebf219f1590c8cad500a": "1600000000000000000000", + "0xff5e7ee7d5114821e159dca5e81f18f1bfffbff9": "2000000000000000000000", + "0x0169c1c210eae845e56840412e1f65993ea90fb4": "2000000000000000000000", + "0xabc45f84db7382dde54c5f7d8938c42f4f3a3bc4": "200000000000000000000", + "0xd9383d4b6d17b3f9cd426e10fb944015c0d44bfb": "800000000000000000000", + "0xc090fe23dcd86b358c32e48d2af91024259f6566": "200000000000000000000", + "0x9ffedcc36b7cc312ad2a9ede431a514fccb49ba3": "669800000000000000000", + "0x2ffe93ec1a5636e9ee34af70dff52682e6ff7079": "2000000000000000000000", + "0x6e01e4ad569c95d007ada30d5e2db12888492294": "4000000000000000000000", + "0xd4d92c62b280e00f626d8657f1b86166cb1f740f": "200028000000000000000", + "0x1d36683063b7e9eb99462dabd569bddce71686f2": "1000000000000000000000", + "0x3a48e0a7098b06a905802b87545731118e89f439": "2000000000000000000000", + "0xbd9e56e902f4be1fc8768d8038bac63e2acbbf8e": "999972000000000000000", + "0x4d67f2ab8599fef5fc413999aa01fd7fce70b43d": "10000000000000000000000", + "0x8e74e0d1b77ebc823aca03f119854cb12027f6d7": "107200000000000000000000", + "0x7e5b19ae1be94ff4dee635492a1b012d14db0213": "100000000000000000000", + "0x5de9e7d5d1b667d095dd34099c85b0421a0bc681": "20000000000000000000", + "0x316eb4e47df71b42e16d6fe46825b7327baf3124": "4000000000000000000000", + "0x772c297f0ad194482ee8c3f036bdeb01c201d5cc": "200000000000000000000", + "0xd7052519756af42590f15391b723a03fa564a951": "4615591000000000000000", + "0x2c6846a1aa999a2246a287056000ba4dcba8e63d": "10020000000000000000000", + "0xde5b005fe8daae8d1f05de3eda042066c6c4691c": "1100000000000000000000", + "0x254c1ecc630c2877de8095f0a8dba1e8bf1f550c": "1700000000000000000000", + "0xf8f226142a428434ab17a1864a2597f64aab2f06": "172473000000000000000", + "0xa6c910ce4d494a919ccdaaa1fc3b82aa74ba06cf": "8000000000000000000000", + "0xe587b16abc8a74081e3613e14342c03375bf0847": "2000000000000000000000", + "0x6f176065e88e3c6fe626267d18a088aaa4db80bc": "3520000000000000000000", + "0x50dcbc27bcad984093a212a9b4178eabe9017561": "145512000000000000000", + "0xe1953c6e975814c571311c34c0f6a99cdf48ab82": "50000000000000000000", + "0xbe0a2f385f09dbfce96732e12bb40ac349871ba8": "1610348000000000000000", + "0x4712540265cbeec3847022c59f1b318d43400a9e": "3500000000000000000000", + "0x29bdc4f28de0180f433c2694eb74f5504ce94337": "2000000000000000000000", + "0x2f66bfbf2262efcc8d2bd0444fc5b0696298ff1e": "9940000000000000000000", + "0x506411fd79003480f6f2b6aac26b7ba792f094b2": "500000000000000000000", + "0x23ea669e3564819a83b0c26c00a16d9e826f6c46": "1430590000000000000000", + "0xe3ffb02cb7d9ea5243701689afd5d417d7ed2ece": "78000000000000000000", + "0x38e7dba8fd4f1f850dbc2649d8e84f0952e3eb3c": "50000000000000000000", + "0x8644cc281be332ccced36da483fb2a0746d9ba2e": "400000000000000000000", + "0xe8a91da6cf1b9d65c74a02ec1f96eecb6dd241f3": "1940000000000000000000", + "0x0631dc40d74e5095e3729eddf49544ecd4396f67": "160000000000000000000", + "0x83c897a84b695eebe46679f7da19d776621c2694": "500000000000000000000", + "0xdb73460b59d8e85045d5e752e62559875e42502e": "999800000000000000000", + "0x0dd4e674bbadb1b0dc824498713dce3b5156da29": "170000000000000000000", + "0xe3933d61b77dcdc716407f8250bc91e4ffaeb09d": "86600000000000000000000", + "0x58c90754d2f20a1cb1dd330625e04b45fa619d5c": "2000000000000000000000", + "0x895ec5545644e0b78330fffab8ddeac9e833156c": "600000000000000000000", + "0x7e1e29721d6cb91057f6c4042d8a0bbc644afe73": "159800000000000000000", + "0x72b90a4dc097239492c5b9777dcd1e52ba2be2c2": "6000000000000000000000", + "0x64241a7844290e0ab855f1d4aa75b55345032224": "1600000000000000000000", + "0x6fd4e0f3f32bee6d3767fdbc9d353a6d3aab7899": "695240000000000000000", + "0x3a035594c747476d42d1ee966c36224cdd224993": "355890000000000000000", + "0xde97f4330700b48c496d437c91ca1de9c4b01ba4": "2910840000000000000000", + "0x716ad3c33a9b9a0a18967357969b94ee7d2abc10": "482000000000000000000", + "0xbfbe05e88c9cbbcc0e92a405fac1d85de248ee24": "100000000000000000000", + "0xcfc4e6f7f8b011414bfba42f23adfaa78d4ecc5e": "1850000000000000000000", + "0xd931ac2668ba6a84481ab139735aec14b7bfbabf": "2000000000000000000000", + "0xe3263ce8af6db3e467584502ed7109125eae22a5": "2000000000000000000000", + "0xf78258c12481bcdddbb72a8ca0c043097261c6c5": "20000000000000000000", + "0x4493123c021ece3b33b1a452c9268de14007f9d3": "6685000000000000000000", + "0x431f2c19e316b044a4b3e61a0c6ff8c104a1a12f": "1000000000000000000000", + "0xe63e787414b9048478a50733359ecdd7e3647aa6": "1580000000000000000000", + "0xe4715956f52f15306ee9506bf82bccc406b3895e": "274944000000000000000", + "0xf7f91e7acb5b8129a306877ce3168e6f438b66a1": "176000000000000000000", + "0xdcdbbd4e2604e40e1710cc6730289dccfad3892d": "4600000000000000000000", + "0x2b5f4b3f1e11707a227aa5e69fa49dded33fb321": "6000000000000000000000", + "0x01488ad3da603c4cdd6cb0b7a1e30d2a30c8fc38": "200000000000000000000", + "0x841145b44840c946e21dbc190264b8e0d5029369": "300000000000000000000000", + "0xbf05070c2c34219311c4548b2614a438810ded6d": "2000000000000000000000", + "0x38f387e1a4ed4a73106ef2b462e474e2e3143ad0": "6000000000000000000000", + "0xf116b0b4680f53ab72c968ba802e10aa1be11dc8": "20000000000000000000", + "0xbea0afc93aae2108a3fac059623bf86fa582a75e": "1700000000000000000000", + "0x4c997992036c5b433ac33d25a8ea1dc3d4e4e6d8": "29200000000000000000", + "0xab7e0b83ed9a424c6d1e6a6f87a4dbf06409c7d6": "2400000000000000000000", + "0xd71fb130f0150c565269e00efb43902b52a455a6": "200000000000000000000", + "0x99b018932bcad355b6792b255db6702dec8ce5dd": "4000086000000000000000", + "0x4b904e934bd0cc8b20705f879e905b93ea0ccc30": "2000000000000000000000", + "0x672ec42faa8cd69aaa71b32cc7b404881d52ff91": "10000000000000000000000", + "0xacbc2d19e06c3babbb5b6f052b6bf7fc37e07229": "200000000000000000000", + "0xcea8743341533cb2f0b9c6efb8fda80d77162825": "100000000000000000000", + "0x9568b7de755628af359a84543de23504e15e41e6": "40000000000000000000000", + "0x6ec96d13bdb24dc7a557293f029e02dd74b97a55": "4000000000000000000000", + "0xd95c90ffbe5484864780b867494a83c89256d6e4": "1640000000000000000000", + "0xade6f8163bf7c7bb4abe8e9893bd0cc112fe8872": "327600000000000000000", + "0x250eb7c66f869ddf49da85f3393e980c029aa434": "4000000000000000000000", + "0xa35c19132cac1935576abfed6c0495fb07881ba0": "2000000000000000000000", + "0xd5550caaf743b037c56fd2558a1c8ed235130750": "5347598000000000000000", + "0x03097923ba155e16d82f3ad3f6b815540884b92c": "1820000000000000000000", + "0xd6d9e30f0842012a7176a917d9d2048ca0738759": "4000000000000000000000", + "0xab9ad36e5c74ce2e96399f57839431d0e79f96ab": "164000000000000000000", + "0x75be8ff65e5788aec6b2a52d5fa7b1e7a03ba675": "67720000000000000000", + "0x4f6d4737d7a940382487264886697cf7637f8015": "1670000000000000000000", + "0x5f7b3bbac16dab831a4a0fc53b0c549dc36c31ca": "1940000000000000000000", + "0xd843ee0863ce933e22f89c802d31287b9671e81c": "13370000000000000000", + "0x361f3ba9ed956b770f257d3672fe1ff9f7b0240c": "600000000000000000000", + "0x6c0ae9f043c834d44271f13406593dfe094f389f": "1517545000000000000000", + "0xdb34745ede8576b499db01beb7c1ecda85cf4abe": "80000000000000000000", + "0x7be8ccb4f11b66ca6e1d57c0b5396221a31ba53a": "20000000000000000000", + "0x128b908fe743a434203de294c441c7e20a86ea67": "713304000000000000000", + "0xdf236bf6abf4f3293795bf0c28718f93e3b1b36b": "1337000000000000000000", + "0x14254ea126b52d0142da0a7e188ce255d8c47178": "775000000000000000000", + "0xceed47ca5b899fd1623f21e9bd4db65a10e5b09d": "133196000000000000000", + "0x30acd858875fa24eef0d572fc7d62aad0ebddc35": "400000000000000000000", + "0x47a281dff64167197855bf6e705eb9f2cef632ea": "1000072000000000000000", + "0x297d5dbe222f2fb52531acbd0b013dc446ac7368": "20000000000000000000000", + "0xadf85203c8376a5fde9815384a350c3879c4cb93": "1147300000000000000000", + "0xc3e0471c64ff35fa5232cc3121d1d38d1a0fb7de": "2000000000000000000000", + "0xfdecc82ddfc56192e26f563c3d68cb544a96bfed": "440000000000000000000", + "0x2614f42d5da844377578e6b448dc24305bef2b03": "2000000000000000000000", + "0x1d96bcd58457bbf1d3c2a46ffaf16dbf7d836859": "171313000000000000000", + "0xbd66ffedb530ea0b2e856dd12ac2296c31fe29e0": "200000000000000000000", + "0x6e84876dbb95c40b6656e42ba9aea08a993b54dc": "1101932000000000000000", + "0xa1c4f45a82e1c478d845082eb18875c4ea6539ab": "200000000000000000000000", + "0x2c964849b1f69cc7cea4442538ed87fdf16cfc8f": "2000000000000000000000", + "0x45b47105fe42c4712dce6e2a21c05bffd5ea47a9": "2000000000000000000000", + "0x31e9c00f0c206a4e4e7e0522170dc81e88f3eb70": "2685000000000000000000", + "0x5fe77703808f823e6c399352108bdb2c527cb87c": "1960000000000000000000", + "0x2272186ef27dcbe2f5fc373050fdae7f2ace2316": "16100000000000000000000", + "0xb7576e9d314df41ec5506494293afb1bd5d3f65d": "20000000000000000000", + "0xac9fff68c61b011efbecf038ed72db97bb9e7281": "9550000000000000000000", + "0xcd9529492b5c29e475acb941402b3d3ba50686b0": "1970000000000000000000", + "0xf19b39389d47b11b8a2c3f1da9124decffbefaf7": "2000000000000000000000", + "0x9e951f6dc5e352afb8d04299d2478a451259bf56": "72004000000000000000", + "0x8eb1fbe4e5d3019cd7d30dae9c0d5b4c76fb6331": "2000000000000000000000", + "0x29cc804d922be91f5909f348b0aaa5d21b607830": "4000000000000000000000", + "0x5c7b9ec7a2438d1e3c7698b545b9c3fd77b7cd55": "1000000000000000000000", + "0xa16160851d2b9c349b92e46f829abfb210943595": "1790000000000000000000", + "0xeac6b98842542ea10bb74f26d7c7488f698b6452": "20000000000000000000000", + "0x57825aeb09076caa477887fbc9ae37e8b27cc962": "100000000000000000000", + "0xb35e8a1c0dac7e0e66dbac736a592abd44012561": "14974000000000000000", + "0x756b84eb85fcc1f4fcdcc2b08db6a86e135fbc25": "3220000000000000000000", + "0xe13b3d2bbfdcbc8772a23315724c1425167c5688": "1032115000000000000000", + "0x0a2dcb7a671701dbb8f495728088265873356c8e": "152120000000000000000", + "0x03cb4c4f4516c4ff79a1b6244fbf572e1c7fea79": "2740000000000000000000", + "0x98ba4e9ca72fddc20c69b4396f76f8183f7a2a4e": "12800000000000000000000", + "0xf8087786b42da04ed6d1e0fe26f6c0eefe1e9f5a": "10000000000000000000000", + "0x02f7f67209b16a17550c694c72583819c80b54ad": "98400000000000000000", + "0x32bb2e9693e4e085344d2f0dbd46a283e3a087fd": "400000000000000000000", + "0x9c78963fbc263c09bd72e4f8def74a9475f7055c": "13790000000000000000000", + "0x27144ca9a7771a836ad50f803f64d869b2ae2b20": "4000000000000000000000", + "0xcc758d071d25a6320af68c5dc9c4f6955ba94520": "6000000000000000000000", + "0xcb42b44eb5fd60b5837e4f9eb47267523d1a229c": "865000000000000000000", + "0xaaf5b207b88b0de4ac40d747cee06e172df6e745": "31428000000000000000000", + "0x52d380511df19d5ec2807bbcb676581b67fd37a3": "13400000000000000000", + "0xaa1b3768c16d821f580e76c8e4c8e86d7dc78853": "400000000000000000000", + "0x41098a81452317c19e3eef0bd123bbe178e9e9ca": "2800000000000000000000", + "0x267148fd72c54f620a592fb92799319cc4532b5c": "410000000000000000000", + "0xd7cdbd41fff20df727c70b6255c1ba7606055468": "200000000000000000000", + "0x0e33fcbbc003510be35785b52a9c5d216bc005f4": "1880000000000000000000", + "0x6727daf5b9d68efcab489fedec96d7f7325dd423": "2000000000000000000000", + "0xcd0a161bc367ae0927a92aac9cf6e5086714efca": "2000000000000000000000", + "0x612667f172135b950b2cd1de10afdece6857b873": "1000000000000000000000", + "0x900194c4b1074305d19de405b0ac78280ecaf967": "1000000000000000000000", + "0x51f55ef47e6456a418ab32b9221ed27dba6608ee": "4200000000000000000000", + "0x0da532c910e3ac0dfb14db61cd739a93353fd05f": "1336866000000000000000", + "0x21df2dcdaf74b2bf803404dd4de6a35eabec1bbd": "6920000000000000000000", + "0xf0e7fb9e420a5340d536f40408344feaefc06aef": "1000000000000000000000", + "0x6742a2cfce8d79a2c4a51b77747498912245cd6a": "258064000000000000000", + "0x8663a241a0a89e70e182c845e2105c8ad7264bcf": "14825507000000000000000", + "0x18e113d8177c691a61be785852fa5bb47aeebdaf": "1337000000000000000000", + "0x1bec4d02ce85fc48feb62489841d85b170586a9b": "2400000000000000000000", + "0x287cf9d0902ef819a7a5f149445bf1775ee8c47c": "16000000000000000000000", + "0x28967280214e218a120c5dda37041b111ea36d74": "200000000000000000000", + "0xa0b771951ce1deee363ae2b771b73e07c4b5e800": "1400000000000000000000", + "0x29f8fba4c30772b057edbbe62ae7420c390572e1": "1000000000000000000000", + "0xee34c7e7995db9f187cff156918cfb6f13f6e003": "1960000000000000000000", + "0x916bf7e3c545921d3206d900c24f14127cbd5e70": "18020000000000000000000", + "0x93235f340d2863e18d2f4c52996516138d220267": "73800000000000000000", + "0x7efec0c6253caf397f71287c1c07f6c9582b5b86": "482839000000000000000", + "0x8d2e31b08803b2c5f13d398ecad88528209f6057": "9993000000000000000000", + "0x964eab4b276b4cd8983e15ca72b106900fe41fce": "500000000000000000000", + "0xeea1e97988de75d821cd28ad6822b22cce988b31": "520000000000000000000", + "0x278c0bde630ec393b1e7267fc9d7d97019e4145b": "2000000000000000000000", + "0x82e4461eb9d849f0041c1404219e4272c4900ab4": "2000000000000000000000", + "0x4a73389298031b8816cca946421c199e18b343d6": "631254000000000000000", + "0x9a5af31c7e06339ac8b4628d7c4db0ce0f45c8a4": "500000000000000000000", + "0xcb9b5103e4ce89af4f64916150bff9eecb9faa5c": "500000000000000000000", + "0x740f641614779dcfa88ed1d425d60db42a060ca6": "998630000000000000000", + "0xa4e623451e7e94e7e89ba5ed95c8a83a62ffc4ea": "20000000000000000000", + "0x25a500eeec7a662a841552b5168b707b0de21e9e": "10020000000000000000000", + "0x185a7fc4ace368d233e620b2a45935661292bdf2": "20000000000000000000000", + "0x9b68f67416a63bf4451a31164c92f672a68759e9": "60000000000000000000000", + "0xa38b5bd81a9db9d2b21d5ec7c60552cd02ed561b": "6000000000000000000000", + "0x61c830f1654718f075ccaba316faacb85b7d120b": "400000000000000000000", + "0x8392e53776713578015bff4940cf43849d7dcba1": "153190000000000000000", + "0xdc57477dafa42f705c7fe40eae9c81756e0225f1": "500044000000000000000", + "0xfebc3173bc9072136354002b7b4fb3bfc53f22f1": "370000000000000000000", + "0xd78f84e38944a0e0255faece48ba4950d4bd39d2": "5000000000000000000000", + "0xa7a3bb6139b0ada00c1f7f1f9f56d994ba4d1fa8": "2000000000000000000000", + "0xaa3f29601a1331745e05c42830a15e71938a6237": "1700000000000000000000", + "0xbec6640f4909b58cbf1e806342961d607595096c": "1999944000000000000000", + "0x9be3c329b62a28b8b0886cbd8b99f8bc930ce3e6": "74500000000000000000", + "0xe3eb2c0a132a524f72ccc0d60fee8b41685d39e2": "1970000000000000000000", + "0x90b1f370f9c1eb0be0fb8e2b8ad96a416371dd8a": "900000000000000000000", + "0xf2742e6859c569d5f2108351e0bf4dca352a48a8": "10000000000000000000000", + "0xb134c004391ab4992878337a51ec242f42285742": "2000000000000000000000", + "0xab7416ff32254951cbbc624ec7fb45fc7ecaa872": "340000000000000000000", + "0x9795f64319fc17dd0f8261f9d206fb66b64cd0c9": "200000000000000000000", + "0x64e03ef070a54703b7184e48276c5c0077ef4b34": "320000000000000000000", + "0x3430a16381f869f6ea5423915855e800883525a9": "17900000000000000000000", + "0xf4a367b166d2991a2bfda9f56463a09f252c1b1d": "1970000000000000000000", + "0x77c4a697e603d42b12056cbba761e7f51d0443f5": "680000000000000000000", + "0x153ef58a1e2e7a3eb6b459a80ab2a547c94182a2": "96000000000000000000000", + "0x6dbe8abfa1742806263981371bf3d35590806b6e": "20000000000000000000000", + "0x4c99dae96481e807c1f99f8b7fbde29b7547c5bf": "150000000000000000000", + "0xd5b9d277d8aad20697a51f76e20978996bffe055": "143250000000000000000", + "0x0f24105abbdaa03fa6309ef6c188e51f714a6e59": "200000000000000000000", + "0x1cb6b2d7cfc559b7f41e6f56ab95c7c958cd0e4c": "1337000000000000000000", + "0xf37b426547a1642d8033324814f0ede3114fc212": "401100000000000000000", + "0x318f1f8bd220b0558b95fb33100ffdbb640d7ca6": "4000000000000000000000", + "0x206d55d5792a514ec108e090599f2a065e501185": "200550000000000000000", + "0x11d2247a221e70c2d66d17ee138d38c55ffb8640": "10000000000000000000000", + "0xe8de725eca5def805ff7941d31ac1c2e342dfe95": "2462500000000000000000", + "0xd561cbbc05515de73ab8cf9eae1357341e7dfdf4": "6000000000000000000000", + "0x0455dcec8a7fc4461bfd7f37456fce3f4c3caac7": "400000000000000000000", + "0x5161fd49e847f67455f1c8bb7abb36e985260d03": "1200000000000000000000", + "0x8e073bad25e42218615f4a0e6b2ea8f8de2230c0": "2402500000000000000000", + "0x6c08a6dc0173c7342955d1d3f2c065d62f83aec7": "20000000000000000000", + "0x95cb6d8a6379f94aba8b885669562c4d448e56a7": "2000000000000000000000", + "0x2805415e1d7fdec6dedfb89e521d10592d743c10": "100000000000000000000", + "0xdaacdaf42226d15cb1cf98fa15048c7f4ceefe69": "300000000000000000000", + "0xe33df4ce80ccb62a76b12bcdfcecc46289973aa9": "6000000000000000000000", + "0x8f8cd26e82e7c6defd02dfad07979021cbf7150c": "3000000000000000000000", + "0x77a17122fa31b98f1711d32a99f03ec326f33d08": "1700000000000000000000", + "0x6f791d359bc3536a315d6382b88311af8ed6da47": "92000000000000000000", + "0xde30e49e5ab313214d2f01dcabce8940b81b1c76": "197000000000000000000", + "0xcf9be9b9ab86c66b59968e67b8d4dcff46b1814a": "660000000000000000000", + "0x7fdfc88d78bf1b285ac64f1adb35dc11fcb03951": "2287900000000000000000", + "0xc5134cfbb1df7a20b0ed7057622eeed280947dad": "3800000000000000000000", + "0xfa9ec8efe08686fa58c181335872ba698560ecab": "1999944000000000000000", + "0xf6a8635757c5e8c134d20d028cf778cf8609e46a": "1459416000000000000000", + "0x6265b2e7730f36b776b52d0c9d02ada55d8e3cb6": "1000000000000000000000", + "0x6a8cea2de84a8df997fd3f84e3083d93de57cda9": "100007000000000000000", + "0x1b7ed974b6e234ce81247498429a5bd4a0a2d139": "2000000000000000000000", + "0x9ba53dc8c95e9a472feba2c4e32c1dc4dd7bab46": "1337000000000000000000", + "0xd7b740dff8c457668fdf74f6a266bfc1dcb723f9": "20000000000000000000", + "0x07bc2cc8eedc01970700efc9c4fb36735e98cd71": "4000000000000000000000", + "0x3e1c962063e0d5295941f210dca3ab531eec8809": "3000000000000000000000", + "0xb447571dacbb3ecbb6d1cf0b0c8f3838e52324e2": "30199000000000000000", + "0x87764e3677eef604cbc59aed24abdc566b09fc25": "3000000000000000000000", + "0x03aa622881236dd0f4940c24c324ff8b7b7e2186": "3200000000000000000000", + "0xa4a7d306f510cd58359428c0d2f7c3609d5674d7": "3349000000000000000000", + "0x3c83c1701db0388b68210d00f5717cd9bd322c6a": "30000000000000000000000", + "0x047d5a26d7ad8f8e70600f70a398ddaa1c2db26f": "6000000000000000000000", + "0x43767bf7fd2af95b72e9312da9443cb1688e4343": "300000000000000000000", + "0x34a85d6d243fb1dfb7d1d2d44f536e947a4cee9e": "20000000000000000000000", + "0x65a9dad42e1632ba3e4e49623fab62a17e4d3611": "93120000000000000000", + "0x48e0cbd67f18acdb7a6291e1254db32e0972737f": "100007000000000000000", + "0xa5de5e434fdcdd688f1c31b6fb512cb196724701": "800000000000000000000", + "0x6d63d38ee8b90e0e6ed8f192eda051b2d6a58bfd": "30000000000000000000", + "0xb079bb4d9866143a6da72ae7ac0022062981315c": "760000000000000000000", + "0xc0413f5a7c2d9a4b8108289ef6ecd271781524f4": "50000000000000000000000", + "0xa91a5a7b341f99c535144e20be9c6b3bb4c28e4d": "5431790000000000000000", + "0x993f146178605e66d517be782ef0b3c61a4e1925": "7011998000000000000000", + "0x966c04781cb5e67dde3235d7f8620e1ab663a9a5": "75800000000000000000000", + "0xb3f82a87e59a39d0d2808f0751eb72c2329cdcc5": "5000000000000000000000", + "0x9b77ebced7e215f0920e8c2b870024f6ecb2ff31": "1000000000000000000000", + "0xfe697ff22ca547bfc95e33d960da605c6763f35b": "1325000000000000000000", + "0x480af52076009ca73781b70e43b95916a62203ab": "924171000000000000000", + "0xa9dc0424c6969d798358b393b1933a1f51bee00a": "20000000000000000000000", + "0x7aba56f63a48bc0817d6b97039039a7ad62fae2e": "600000000000000000000", + "0x59d139e2e40c7b97239d23dfaca33858f602d22b": "2000000000000000000000", + "0x8d6170ff66978e773bb621bf72b1ba7be3a7f87e": "200000000000000000000", + "0xd668523a90f0293d65c538d2dd6c57673710196e": "39500000000000000000", + "0xbbb5a0f4802c8648009e8a6998af352cde87544f": "95500000000000000000", + "0xfc43829ac787ff88aaf183ba352aadbf5a15b193": "3960000000000000000000", + "0xfe22a0b388668d1ae2643e771dacf38a434223cc": "4000304000000000000000", + "0x092acb624b08c05510189bbbe21e6524d644ccad": "18200000000000000000", + "0x8f0538ed71da1155e0f3bde5667ceb84318a1a87": "1940000000000000000000", + "0x06994cd83aa2640a97b2600b41339d1e0d3ede6c": "250000000000000000000", + "0x9d460c1b379ddb19a8c85b4c6747050ddf17a875": "3340000000000000000000", + "0x77a769fafdecf4a638762d5ba3969df63120a41d": "2000000000000000000000", + "0x5f375b86600c40cca8b2676b7a1a1d1644c5f52c": "78838000000000000000", + "0x15ee0fc63ebf1b1fc49d7bb38f8863823a2e17d2": "1910000000000000000000", + "0x6651736fb59b91fee9c93aa0bd6ea2f7b2506180": "500000000000000000000", + "0x361d9ed80b5bd27cf9f1226f26753258ee5f9b3f": "3530900000000000000000", + "0xc9b6b686111691ee6aa197c7231a88dc60bd295d": "500000000000000000000", + "0xe9b4a4853577a9dbcc2e795be0310d1bed28641a": "1000000000000000000000", + "0x36758e049cd98bcea12277a676f9297362890023": "4000000000000000000000", + "0x6bb50813146a9add42ee22038c9f1f7469d47f47": "200200000000000000000", + "0x6de4b581385cf7fc9fe8c77d131fe2ee7724c76a": "2308840000000000000000", + "0xd2a5a024230a57ccc666760b89b0e26cafd189c7": "49997115000000000000000", + "0x65af9087e05167715497c9a5a749189489004def": "835000000000000000000", + "0xead21c1deccfbf1c5cd96688a2476b69ba07ce4a": "72800000000000000000", + "0xe308435204793764f5fcbe65eb510f5a744a655a": "200000000000000000000", + "0x9376dce2af2ec8dcda741b7e7345664681d93668": "1000000000000000000000", + "0xa1b47c4d0ed6018842e6cfc8630ac3a3142e5e6b": "20000000000000000000", + "0xe2198c8ca1b399f7521561fd5384a7132fba486b": "1015200000000000000000", + "0x92c13fe0d6ce87fd50e03def9fa6400509bd7073": "40000000000000000000", + "0x7517f16c28d132bb40e3ba36c6aef131c462da17": "18200000000000000000", + "0x6a023af57d584d845e698736f130db9db40dfa9a": "98800000000000000000", + "0x1518627b88351fede796d3f3083364fbd4887b0c": "16000000000000000000000", + "0xf5b6e9061a4eb096160777e26762cf48bdd8b55d": "254030000000000000000", + "0x28073efc17d05cab3195c2db332b61984777a612": "1000000000000000000000", + "0xf06a854a3c5dc36d1c49f4c87d6db333b57e4add": "10000000000000000000000", + "0x9225983860a1cb4623c72480ac16272b0c95e5f5": "2000000000000000000000", + "0x5260dc51ee07bddaababb9ee744b393c7f4793a6": "34040000000000000000", + "0x0f127bbf8e311caea2ba502a33feced3f730ba42": "188000000000000000000", + "0x17d521a8d9779023f7164d233c3b6420ffd223ed": "20000000000000000000", + "0x8c2b7d8b608d28b77f5caa9cd645242a823e4cd9": "1820000000000000000000", + "0x6e866d032d405abdd65cf651411d803796c22311": "2000000000000000000000", + "0xdc51b2dc9d247a1d0e5bc36ca3156f7af21ff9f6": "1000000000000000000000", + "0xc84d9bea0a7b9f140220fd8b9097cfbfd5edf564": "123047000000000000000", + "0xff86e5e8e15b53909600e41308dab75f0e24e46b": "902400000000000000000", + "0xd7164aa261c09ad9b2b5068d453ed8eb6aa13083": "3000000000000000000000", + "0x76aaf8c1ac012f8752d4c09bb46607b6651d5ca8": "20000000000000000000", + "0x41786a10d447f484d33244ccb7facd8b427b5b8c": "1000000000000000000000", + "0x2e0c57b47150f95aa6a7e16ab9b1cbf54328979a": "100000000000000000000", + "0x3f747237806fed3f828a6852eb0867f79027af89": "1500000000000000000000", + "0xa568db4d57e4d67462d733c69a9e0fe26e218327": "1096140000000000000000", + "0x1f88f8a1338fc7c10976abcd3fb8d38554b5ec9c": "13400000000000000000", + "0xd1ea4d72a67b5b3e0f315559f52bd0614d713069": "2000000000000000000000", + "0xbfaeb91067617dcf8b44172b02af615674835dba": "160661000000000000000", + "0xb71a13ba8e95167b80331b52d69e37054fe7a826": "200000000000000000000", + "0xb67a80f170197d96cdcc4ab6cba627b4afa6e12c": "2400000000000000000000", + "0x35af040a0cc2337a76af288154c7561e1a233349": "1000000000000000000000", + "0xc86190904b8d079ec010e462cbffc90834ffaa5c": "10100000000000000000000", + "0x383304dd7a5720b29c1a10f60342219f48032f80": "5600000000000000000000", + "0x191313525238a21c767457a91374f02200c55448": "116400000000000000000", + "0xcc4a2f2cf86cf3e43375f360a4734691195f1490": "1348127000000000000000", + "0x4e020779b5ddd3df228a00cb48c2fc979da6ae38": "2000000000000000000000", + "0xe206fb7324e9deb79e19903496d6961b9be56603": "100000000000000000000", + "0x3ae160e3cd60ae31b9d6742d68e14e76bd96c517": "30000000000000000000", + "0x1f7d8e86d6eeb02545aad90e91327bd369d7d2f3": "20000000000000000000", + "0x68c7d1711b011a33f16f1f55b5c902cce970bdd7": "152000000000000000000", + "0x637be71b3aa815ff453d5642f73074450b64c82a": "2000000000000000000000", + "0x1584a2c066b7a455dbd6ae2807a7334e83c35fa5": "130000000000000000000", + "0x9c05e9d0f0758e795303717e31da213ca157e686": "1000000000000000000000", + "0x4f1a2da54a4c6da19d142412e56e815741db2325": "100000000000000000000", + "0x9a4ca8b82117894e43db72b9fa78f0b9b93ace09": "50000000000000000000", + "0x26c99f8849c9802b83c861217fd07a9e84cdb79d": "300000000000000000000", + "0x45c0d19f0b8e054f9e893836d5ecae7901af2812": "5000000000000000000000", + "0x00dc01cbf44978a42e8de8e436edf94205cfb6ec": "1458440000000000000000", + "0xde7dee220f0457a7187d56c1c41f2eb00ac56021": "629924000000000000000", + "0x1c128bd6cda5fca27575e4b43b3253c8c4172afe": "2000000000000000000000", + "0x666746fb93d1935c5a3c684e725010c4fad0b1d8": "20000000000000000000", + "0x51d78b178d707e396e8710965c4f41b1a1d9179d": "110600000000000000000", + "0x68f7573cd457e14c03fea43e302d30347c10705c": "5000000000000000000000", + "0x9d30cb237bc096f17036fc80dd21ca68992ca2d9": "30380000000000000000000", + "0xfbcfcc4a7b0f26cf26e9f3332132e2fc6a230766": "8000000000000000000000", + "0xb166e37d2e501ae73c84142b5ffb5aa655dd5a99": "1999000000000000000000", + "0x6df24f6685a62f791ba337bf3ff67e91f3d4bc3a": "2166000000000000000000", + "0x92e435340e9d253c00256389f52b067d55974e76": "268000000000000000000", + "0xea53d26564859d9e90bb0e53b7abf560e0162c38": "400000000000000000000", + "0xe26657f0ed201ea2392c9222b80a7003608ddf30": "40000000000000000000", + "0xf4177a0d85d48b0e264211ce2aa2efd3f1b47f08": "3593425000000000000000", + "0x9d47ba5b4c8505ad8da42934280b61a0e1e8b971": "100000000000000000000", + "0x63c2a3d235e5eeabd0d4a6afdb89d94627396495": "1241620000000000000000", + "0x446a8039cecf9dce4879cbcaf3493bf545a88610": "7000000000000000000000", + "0x7fa37ed67887751a471f0eb306be44e0dbcd6089": "1060000000000000000000", + "0x26d4a16891f52922789217fcd886f7fce296d400": "2000000000000000000000", + "0x487e108502b0b189ef9c8c6da4d0db6261eec6c0": "1910000000000000000000", + "0x7484d26becc1eea8c6315ec3ee0a450117dc86a0": "12000000000000000000000", + "0xad9e97a0482f353a05c0f792b977b6c7e811fa5f": "200000000000000000000", + "0x2273bad7bc4e487622d175ef7a66988b6a93c4ee": "20000000000000000000", + "0x3b93b16136f11eaf10996c95990d3b2739ccea5f": "10000000000000000000000", + "0xf3f1fa3918ca34e2cf7e84670b1f4d8eca160db3": "680000000000000000000", + "0x88a2154430c0e41147d3c1fee3b3b006f851edbd": "999972000000000000000", + "0x25185f325acf2d64500698f65c769ddf68301602": "5000000000000000000000", + "0xe9cafe41a5e8bbd90ba02d9e06585b4eb546c57f": "2000000000000000000000", + "0x95681cdae69b2049ce101e325c759892cac3f811": "2857600000000000000000", + "0x475066f9ad26655196d5535327bbeb9b7929cb04": "3040000000000000000000", + "0x6685fd2e2544702c360b8bb9ee78f130dad16da5": "2000000000000000000000", + "0x45e68db94c7d0ab7ac41857a71d67147870f4e71": "400000000000000000000000", + "0x4ad95d188d6464709add2555fb4d97fe1ebf311f": "346000000000000000000", + "0x73bedd6fda7ba3272185087b6351fc133d484e37": "5057200000000000000000", + "0x1ea4715504c6af107b0194f4f7b1cb6fcccd6f4b": "590598000000000000000", + "0x77306ffe2e4a8f3ca826c1a249f7212da43aeffd": "20000000000000000000000", + "0xeb453f5a3adddd8ab56750fadb0fe7f94d9c89e7": "20000000000000000000", + "0x7201d1c06920cd397ae8ad869bcda6e47ffb1b5a": "20000000000000000000", + "0x821cb5cd05c7ef909fe1be60733d8963d760dc41": "4000000000000000000000", + "0x496e319592b341eaccd778dda7c8196d54cac775": "9250000000000000000000", + "0x88609e0a465b6e99fce907166d57e9da0814f5c8": "20000000000000000000000", + "0xc7ec62b804b1f69b1e3070b5d362c62fb309b070": "13068074000000000000000", + "0x3eb9ef06d0c259040319947e8c7a6812aa0253d8": "167000000000000000000", + "0xcbf37ff854a2f1ce53934494777892d3ec655782": "10000000000000000000000", + "0x02b1af72339b2a2256389fd64607de24f0de600a": "2000000000000000000000", + "0xa8beb91c2b99c8964aa95b6b4a184b1269fc3483": "400000000000000000000", + "0x922a20c79a1d3a26dd3829677bf1d45c8f672bb6": "4000000000000000000000", + "0xc5843399d150066bf7979c34ba294620368ad7c0": "200000000000000000000", + "0x8cd0cd22e620eda79c0461e896c93c44837e2968": "2000000000000000000000", + "0x6170dd0687bd55ca88b87adef51cfdc55c4dd458": "2005160000000000000000", + "0xeed384ef2d41d9d203974e57c12328ea760e08ea": "1000000000000000000000", + "0xb129a5cb7105fe810bd895dc7206a991a4545488": "30000000000000000000", + "0x3872f48dc5e3f817bc6b2ad2d030fc5e0471193d": "4000000000000000000000", + "0x514b7512c9ae5ea63cbf11715b63f21e18d296c1": "1999944000000000000000", + "0x7ab256b204800af20137fabcc916a23258752501": "20000000000000000000000", + "0xfc66faba277f4b5de64ad45eb19c31e00ced3ed5": "5640000000000000000000", + "0x39824f8bced176fd3ea22ec6a493d0ccc33fc147": "4000000000000000000000", + "0xe338e859fe2e8c15554848b75caecda877a0e832": "1801800000000000000000", + "0xe53c68796212033e4e6f9cff56e19c461eb454f9": "1000000000000000000000", + "0x8461ecc4a6a45eb1a5b947fb86b88069b91fcd6f": "2000000000000000000000", + "0x6b4b99cb3fa9f7b74ce3a48317b1cd13090a1a7a": "57300000000000000000", + "0x97de21e421c37fe4b8025f9a51b7b390b5df7804": "80000000000000000000000", + "0xd25aecd7eb8bd6345b063b5dbd271c77d3514494": "1820000000000000000000", + "0x57b23d6a1adc06c652a779c6a7fb6b95b9fead66": "200000000000000000000", + "0x0d658014a199061cf6b39433140303c20ffd4e5a": "8200000000000000000000", + "0x30eac740e4f02cb56eef0526e5d300322600d03e": "1970000000000000000000", + "0x4eead40aad8c73ef08fc84bc0a92c9092f6a36bf": "26740000000000000000", + "0x30f7d025d16f7bee105580486f9f561c7bae3fef": "500000000000000000000", + "0x0977bfba038a44fb49b03970d8d8cf2cb61f8b25": "420000000000000000000", + "0xb14bbeff70720975dc6191b2a44ff49f2672873c": "143000000000000000000", + "0xd588c3a5df228185d98ee7e60748255cdea68b01": "4000000000000000000000", + "0x225d35faedb391c7bc2db7fa9071160405996d00": "167774000000000000000", + "0xc0e457bd56ec36a1246bfa3230fff38e5926ef22": "1940000000000000000000", + "0x2a9c57fe7b6b138a920d676f3c76b6c2a0eef699": "9400000000000000000000", + "0x36df8f883c1273ec8a171f7a33cfd649b1fe6075": "227290000000000000000", + "0x234f46bab73fe45d31bf87f0a1e0466199f2ebac": "485000000000000000000", + "0xa2e1b8aa900e9c139b3fa122354f6156d92a18b1": "500000000000000000000", + "0x517cd7608e5d0d83a26b717f3603dac2277dc3a4": "2000000000000000000000", + "0x75f7539d309e9039989efe2e8b2dbd865a0df088": "2460000000000000000000", + "0x4b792e29683eb586e394bb33526c6001b397999e": "600000000000000000000", + "0xa34f9d568bf7afd94c2a5b8a5ff55c66c4087999": "2444000000000000000000", + "0x4b31bf41abc75c9ae2cd8f7f35163b6e2b745054": "382000000000000000000", + "0xe35453eef2cc3c7a044d0ac134ba615908fa82ee": "147510000000000000000", + "0x7aa79ac04316cc8d08f20065baa6d4142897d54e": "1400000000000000000000", + "0xf1dc8ac81042c67a9c3c6792b230c46ac016ca10": "200000000000000000000", + "0x2bb366b9edcb0da680f0e10b3b6e28748190d6c3": "5799400000000000000000", + "0xa567770b6ae320bdde50f904d663e746a61dace6": "2000000000000000000000", + "0xd9d42fd13ebd4bf69cac5e9c7e82483ab46dd7e9": "5348000000000000000000", + "0x27830c5f6023afaaf79745676c204a0faccda0ba": "240000000000000000000", + "0x3cb179cb4801a99b95c3b0c324a2bdc101a65360": "26000000000000000000", + "0x976e3ceaf3f1af51f8c29aff5d7fa21f0386d8ee": "240000000000000000000", + "0x752a5ee232612cd3005fb26e5b597de19f776be6": "5460000000000000000000", + "0x7d5aa33fc14b51841a06906edb2bb49c2a117269": "300048000000000000000", + "0x55ca6abe79ea2497f46fdbb830346010fe469cbe": "5730000000000000000000", + "0x6bec311ad05008b4af353c958c40bd06739a3ff3": "16380000000000000000000", + "0x30e9698cf1e08a9d048bd8d8048f28be7ed9409f": "6685000000000000000000", + "0x9afa536b4c66bc38d875c4b30099d9261fdb38eb": "205981000000000000000", + "0x6b63a2dfb2bcd0caec0022b88be30c1451ea56aa": "809021000000000000000", + "0xd07be0f90997caf903c8ac1d53cde904fb190741": "1000200000000000000000", + "0x893cdddf5377f3c751bf2e541120045a47cba101": "100000000000000000000", + "0xc1cdc601f89c0428b31302d187e0dc08ad7d1c57": "6000000000000000000000", + "0x8f8acb107607388479f64baaabea8ff007ada97d": "27281800000000000000000", + "0x88bc43012edb0ea9f062ac437843250a39b78fbb": "20000000000000000000000", + "0xfcfc3a5004d678613f0b36a642269a7f371c3f6a": "1000000000000000000000", + "0xf509557e90183fbf0f0651a786487bcc428ba175": "194000000000000000000", + "0xe3d915eda3b825d6ee4af9328d32ac18ada35497": "500000000000000000000", + "0xf237ef05261c34d79cc22b860de0f17f793c3860": "200000000000000000000", + "0xa3a2e319e7d3a1448b5aa2468953160c2dbcba71": "2000000000000000000000", + "0x3a368efe4ad786e26395ec9fc6ad698cae29fe01": "632200000000000000000", + "0x8e3240b0810e1cf407a500804740cf8d616432a4": "40309000000000000000", + "0x5691dd2f6745f20e22d2e1d1b955aa2903d65656": "1969606000000000000000", + "0x5f93ff832774db5114c55bb4bf44ccf3b58f903f": "192026650000000000000000", + "0x2c1cc6e18c152488ba11c2cc1bcefa2df306abd1": "1670000000000000000000", + "0xbde9786a84e75b48f18e726dd78d70e4af3ed802": "5730000000000000000000", + "0x79551cede376f747e3716c8d79400d766d2e0195": "46250000000000000000000", + "0x49f028395b5a86c9e07f7778630e4c2e3d373a77": "122735000000000000000", + "0x6a3694424c7cc6b8bcd9bccaba540cc1f5df18d7": "2000000000000000000000", + "0x068e29b3f191c812a6393918f71ab933ae6847f2": "1999944000000000000000", + "0x6e64e6129f224e378c0e6e736a7e7a06c211e9ec": "1000000000000000000000", + "0xc4c15318d370c73318cc18bdd466dbaa4c6603bf": "19700000000000000000", + "0x8035bcffaefdeeea35830c497d14289d362023de": "300000000000000000000", + "0xa997dfc7986a27050848fa1c64d7a7d6e07acca2": "143000000000000000000", + "0x2fe13a8d0785de8758a5e41876c36e916cf75074": "4000000000000000000000", + "0x6f24c9af2b763480515d1b0951bb77a540f1e3f9": "1970000000000000000000", + "0x4c23b370fc992bb67cec06e26715b62f0b3a4ac3": "10000000000000000000000", + "0x4ac07673e42f64c1a25ec2fa2d86e5aa2b34e039": "2000000000000000000000", + "0x117db836377fe15455e02c2ebda40b1ceb551b19": "6000000000000000000000", + "0xef1c0477f1184d60accab374d374557a0a3e10f3": "152000000000000000000", + "0x99fe0d201228a753145655d428eb9fd94985d36d": "1939268000000000000000", + "0xb3731b046c8ac695a127fd79d0a5d5fa6ae6d12e": "1998000000000000000000", + "0xdce30c31f3ca66721ecb213c809aab561d9b52e4": "2000000000000000000000", + "0xddd69c5b9bf5eb5a39cee7c3341a120d973fdb34": "1987730000000000000000", + "0x216e41864ef98f060da08ecae19ad1166a17d036": "5730000000000000000000", + "0x6a53d41ae4a752b21abed5374649953a513de5e5": "2000000000000000000000", + "0x20dd8fcbb46ea46fe381a68b8ca0ea5be21fe9a5": "2000000000000000000000", + "0x19732bf973055dbd91a4533adaa2149a91d38380": "2000000000000000000000", + "0x51ea1c0934e3d04022ed9c95a087a150ef705e81": "6280000000000000000000", + "0xa0de5c601e696635c698b7ae9ca4539fc7b941ec": "346150000000000000000", + "0x94e1f5cb9b8abace03a1a6428256553b690c2355": "20000000000000000000", + "0xa539b4a401b584dfe0f344b1b422c65543167e2e": "200000000000000000000", + "0x50584d9206a46ce15c301117ee28f15c30e60e75": "13400000000000000000", + "0x856eb204241a87830fb229031343dc30854f581a": "1000000000000000000000", + "0x9dd46b1c6d3f05e29e9c6f037eed9a595af4a9aa": "500000000000000000000", + "0x8925da4549e15155e57a628522cea9dddf627d81": "1000070000000000000000", + "0xa89df34859edd7c820db887740d8ff9e15157c7b": "2000000000000000000000", + "0xad9f4c890a3b511cee51dfe6cfd7f1093b76412c": "506600000000000000000", + "0xf8c7f34a38b31801da43063477b12b27d0f203ff": "494800000000000000000", + "0xa642501004c90ea9c9ed1998ba140a4cd62c6f5f": "250543000000000000000", + "0x508cf19119db70aa86454253da764a2cb1b2be1a": "1000000000000000000000", + "0x2979741174a8c1ea0b7f9edf658177859417f512": "461283000000000000000", + "0x654f524847b3a6acc0d3d5f1f362b603edf65f96": "8000000000000000000000", + "0x5cf18fa7c8a7c0a2b3d5efd1990f64ddc569242c": "1000000000000000000000", + "0x17e82e7078dc4fd9e879fb8a50667f53a5c54591": "200000000000000000000", + "0x8b07d050754dc9ba230db01c310afdb5395aa1b3": "118080000000000000000", + "0x5f77a107ab1226b3f95f10ee83aefc6c5dff3edc": "500000000000000000000", + "0x475a6193572d4a4e59d7be09cb960ddd8c530e2f": "667323000000000000000", + "0x6470a4f92ec6b0fccd01234fa59023e9ff1f3aac": "3000000000000000000000", + "0x2fbcef3384d420e4bf61a0669990bc7054f1a5af": "2000000000000000000000", + "0xbbabf6643beb4bd01c120bd0598a0987d82967d1": "3342500000000000000000", + "0x41a2f2e6ecb86394ec0e338c0fc97e9c5583ded2": "2009400000000000000000", + "0xfb9473cf7712350a1fa0395273fc80560752e4fb": "123300000000000000000", + "0x38b2197106123387a0d4de368431a8bacdda30e2": "20000000000000000000", + "0x5ed56115bd6505a88273df5c56839470d24a2db7": "65601000000000000000", + "0x523f6d64690fdacd942853591bb0ff20d3656d95": "1820000000000000000000", + "0x55caff4bba04d220c9a5d2018672ec85e31ef83e": "2000000000000000000000", + "0x65af8d8b5b1d1eedfa77bcbc96c1b133f83306df": "98000000000000000000", + "0x7456c5b2c5436e3e571008933f1805ccfe34e9ec": "1000000000000000000000", + "0xa6eebbe464d39187bf80ca9c13d72027ec5ba8be": "3000000000000000000000", + "0xdd35cfdbcb993395537aecc9f59085a8d5ddb6f5": "1000000000000000000000", + "0x98e2b6d606fd2d6991c9d6d4077fdf3fdd4585da": "901520000000000000000", + "0x860f5ffc10de767ded807f71e861d647dfd219b1": "10000000000000000000000", + "0x1a644a50cbc2aee823bd2bf243e825be4d47df02": "100007000000000000000", + "0xa8455b411765d6901e311e726403091e42c56683": "3380000000000000000000", + "0x3a86ee94862b743dd34f410969d94e2c5652d4ad": "201610000000000000000", + "0xa57360f002e0d64d2d74457d8ca4857ee00bcddf": "335780000000000000000", + "0xe59b3bd300893f97233ef947c46f7217e392f7e9": "1000000000000000000000", + "0x9f3a74fd5e7edcc1162993171381cbb632b7cff0": "10000000000000000000000", + "0x675d5caa609bf70a18aca580465d8fb7310d1bbb": "20000000000000000000000", + "0x77f609ca8720a023262c55c46f2d26fb3930ac69": "17300000000000000000", + "0xf8ac4a39b53c11307820973b441365cffe596f66": "2000000000000000000000", + "0x112634b4ec30ff786e024159f796a57939ea144e": "1999944000000000000000", + "0x49d2c28ee9bc545eaaf7fd14c27c4073b4bb5f1a": "1474134000000000000000", + "0x91cc46aa379f856a6640dccd5a648a7902f849d9": "200000000000000000000", + "0xb46440c797a556e04c7d9104660491f96bb076bf": "14900000000000000000", + "0xe5968797468ef767101b761d431fce14abffdbb4": "8040000000000000000000", + "0xc0895efd056d9a3a81c3da578ada311bfb9356cf": "200000000000000000000", + "0x76846f0de03b5a76971ead298cdd08843a4bc6c6": "15500000000000000000", + "0x5f708eaf39d823946c51b3a3e9b7b3c003e26341": "1820000000000000000000", + "0x24f7450ddbf18b020feb1a2032d9d54b633edf37": "50000000000000000000", + "0xcae3a253bcb2cf4e13ba80c298ab0402da7c2aa0": "5400000000000000000000", + "0x91e8810652e8e6161525d63bb7751dc20f676076": "725000000000000000000", + "0x543629c95cdef428ad37d453ca9538a9f90900ac": "43250000000000000000000", + "0x6e79edd4845b076e4cd88d188b6e432dd93f35aa": "955000000000000000000", + "0xbd325d4029e0d8729f6d399c478224ae9e7ae41e": "3880000000000000000000", + "0x42cecfd2921079c2d7df3f08b07aa3beee5e219a": "1000000000000000000000", + "0x3690246ba3c80679e22eac4412a1aefce6d7cd82": "20000000000000000000000", + "0x577aeee8d4bc08fc97ab156ed57fb970925366be": "333046000000000000000", + "0xfe00bf439911a553982db638039245bcf032dbdc": "394000000000000000000", + "0x91f624b24a1fa5a056fe571229e7379db14b9a1e": "11999974000000000000000", + "0xf206d328e471d0117b246d2a4619827709e96df3": "3001000000000000000000", + "0x073f1ed1c9c3e9c52a9b0249a5c1caa0571fdf05": "70400000000000000000", + "0xf56048dd2181d4a36f64fcecc6215481e42abc15": "200000000000000000000", + "0xef76a4cd8febcbc9b818f17828f8d93473f3f3cb": "4000000000000000000000", + "0x1031e0ecb54985ae21af1793950dc811888fde7c": "20000000000000000000", + "0x8e0fee38685a94aabcd7ce857b6b1409824f75b8": "500000000000000000000", + "0xf0cbef84e169630098d4e301b20208ef05846ac9": "259084000000000000000", + "0xbbca65b3266ea2fb73a03f921635f912c7bede00": "1970000000000000000000", + "0x0aec2e426ed6cc0cf3c249c1897eac47a7faa9bd": "200000000000000000000", + "0xb8f30758faa808dbc919aa7b425ec922b93b8129": "1000076000000000000000", + "0x936dcf000194e3bff50ac5b4243a3ba014d661d8": "10000000000000000000000", + "0xb14ddb0386fb606398b8cc47565afae00ff1d66a": "2973024000000000000000", + "0x2ec95822eb887bc113b4712a4dfd7f13b097b5e7": "1000000000000000000000", + "0x0136a5af6c3299c6b5f005fdaddb148c070b299b": "20368000000000000000", + "0x37cb868d2c3f95b257611eb34a4188d58b749802": "2000000000000000000000", + "0xcd7f09d7ed66d0c38bc5ad4e32b7f2b08dc1b30d": "1148000000000000000000", + "0xb5fa8184e43ed3e0b8ab91216461b3528d84fd09": "2680000000000000000000", + "0x3dbf0dbfd77890800533f09dea8301b9f025d2a6": "1000000000000000000000", + "0xb553d25d6b5421e81c2ad05e0b8ba751f8f010e3": "2000000000000000000000", + "0xdbf8b13967f55125272de0562536c450ba5655a0": "2046830000000000000000", + "0x0f6e840a3f2a24647d8e43e09d45c7c335df4248": "2500000000000000000000", + "0xfa2fd29d03fee9a07893df3a269f56b72f2e1e64": "10000000000000000000000", + "0x8b57b2bc83cc8d4de331204e893f2f3b1db1079a": "40000000000000000000", + "0x7f541491d2ac00d2612f94aa7f0bcb014651fbd4": "376000000000000000000", + "0x4f4a9be10cd5d3fb5de48c17be296f895690645b": "40000000000000000000000", + "0x45d1c9eedf7cab41a779057b79395f5428d80528": "2000000000000000000000", + "0x662334814724935b7931ddca6100e00d467727cd": "637000000000000000000", + "0x2c52c984102ee0cd3e31821b84d408930efa1ac7": "2000000000000000000000", + "0x000d836201318ec6899a67540690382780743280": "200000000000000000000", + "0x81498ca07b0f2f17e8bbc7e61a7f4ae7be66b78b": "101600000000000000000", + "0x7860a3de38df382ae4a4dce18c0c07b98bce3dfa": "1000000000000000000000", + "0x5e8e4df18cf0af770978a8df8dac90931510a679": "2000000000000000000000", + "0x05d68dad61d3bbdfb3f779265c49474aff3fcd30": "39399000000000000000", + "0x96eafbf2fb6f4db9a436a74c45b5654452e23819": "20000000000000000000", + "0xd7d7f2caa462a41b3b30a34aeb3ba61010e2626f": "2000000000000000000000", + "0x0b71f554122469ef978e2f1fefd7cbb410982772": "3880000000000000000000", + "0x504666ce8931175e11a5ed11c1dcaa06e57f4e66": "11792000000000000000000", + "0xd00f067286c0fbd082f9f4a61083ec76deb3cee6": "1000000000000000000000", + "0x02e4cb22be46258a40e16d4338d802fffd00c151": "379786000000000000000", + "0x1c13d38637b9a47ce79d37a86f50fb409c060728": "1337000000000000000000", + "0xe30212b2011bb56bdbf1bc35690f3a4e0fd905ea": "8022000000000000000000", + "0x1df6911672679bb0ef3509038c0c27e394fdfe30": "540000000000000000000", + "0x2b8fe4166e23d11963c0932b8ade8e0145ea0770": "43250000000000000000000", + "0x6509eeb1347e842ffb413e37155e2cbc738273fd": "2000000000000000000000", + "0x8b7e9f6f05f7e36476a16e3e7100c9031cf404af": "1000000000000000000000", + "0xbec8caf7ee49468fee552eff3ac5234eb9b17d42": "2000000000000000000000", + "0x38898bbb4553e00bbfd0cf268b2fc464d154add5": "320000000000000000000", + "0xcbb3189e4bd7f45f178b1c30c76e26314d4a4b0a": "295007000000000000000", + "0xbe1cd7f4c472070968f3bde268366b21eeea8321": "4300000000000000000000", + "0x976a18536af41874426308871bcd1512a775c9f8": "10000000000000000000000", + "0xe9c758f8da41e3346e4350e5ac3976345c6c1082": "1930050000000000000000", + "0x64ec8a5b743f3479e707dae9ee20ddaa4f40f1d9": "200000000000000000000", + "0x9e01765aff08bc220550aca5ea2e1ce8e5b09923": "1000000000000000000000", + "0xba0f39023bdb29eb1862a9f9059cab5d306e662f": "2000000000000000000000", + "0x2baf8d6e221174124820ee492b9459ec4fadafbb": "2000000000000000000000", + "0x655d5cd7489629e2413c2105b5a172d933c27af8": "4040060000000000000000", + "0xbadc2aef9f5951a8d78a6b35c3d0b3a4e6e2e739": "6000000000000000000000", + "0xe64f6e1d6401b56c076b64a1b0867d0b2f310d4e": "51570000000000000000", + "0x7a8563867901206f3f2bf0fa3e1c8109cabccd85": "137000000000000000000", + "0xd17fbe22d90462ed37280670a2ea0b3086a0d6d6": "199955000000000000000", + "0xe96d7d4cdd15553a4e4d316d6d6480ca3cea1e38": "12200000000000000000000", + "0xf04d2c91efb6e9c45ffbe74b434c8c5f2b028f1f": "1000000000000000000000", + "0x81164deb10814ae08391f32c08667b6248c27d7a": "394000000000000000000", + "0x7f5ae05ae0f8cbe5dfe721f044d7a7bef4c27997": "60000000000000000000", + "0xc982586d63b0d74c201b1af8418372e30c7616be": "100000000000000000000", + "0x64cf0935bf19d2cebbecd8780d27d2e2b2c34166": "1970000000000000000000", + "0xcd566ad7b883f01fd3998a9a58a9dee4724ddca5": "58848000000000000000", + "0x9da609fa3a7e6cf2cc0e70cdabe78dc4e382e11e": "1200000000000000000000", + "0x0d69100c395ce6c5eaadf95d05d872837ededd21": "400000000000000000000", + "0xfe91eccf2bd566afa11696c5049fa84c69630a52": "1940000000000000000000", + "0x005d0ee8155ec0a6ff6808552ca5f16bb5be323a": "197000000000000000000", + "0x3e5cb8928c417825c03a3bfcc52183e5c91e42d7": "4264790000000000000000", + "0x9c1b771f09af882af0643083de2aa79dc097c40e": "2480000000000000000000", + "0xeba388b0da27c87b1cc0eac6c57b2c5a0b459c1a": "6800000000000000000000", + "0x7529f3797bb6a20f7ea6492419c84c867641d81c": "2000000000000000000000", + "0x532a7da0a5ad7407468d3be8e07e69c7dd64e861": "500000000000000000000", + "0xde82cc8d4a1bb1d9434392965b3e80bad3c03d4f": "1477500000000000000000", + "0x4a82694fa29d9e213202a1a209285df6e745c209": "4000000000000000000000", + "0x3e53ff2107a8debe3328493a92a586a7e1f49758": "23143470000000000000000", + "0xb2ddb786d3794e270187d0451ad6c8b79e0e8745": "400000000000000000000", + "0x6ebcf9957f5fc5e985add475223b04b8c14a7aed": "1730000000000000000000", + "0xc5c7590b5621ecf8358588de9b6890f2626143f1": "3000000000000000000000", + "0xae4f122e35c0b1d1e4069291457c83c07f965fa3": "1000000000000000000000", + "0x47885ababedf4d928e1c3c71d7ca40d563ed595f": "1820000000000000000000", + "0x78ce3e3d474a8a047b92c41542242d0a08c70f99": "10000000000000000000000", + "0x6134d942f037f2cc3d424a230c603d67abd3edf7": "2000000000000000000000", + "0x1360e87df24c69ee6d51c76e73767ffe19a2131c": "92000000000000000000", + "0x5fd1c3e31778276cb42ea740f5eae9c641dbc701": "194000000000000000000", + "0x98397342ec5f3d4cb877e54ef5d6f1d366731bd4": "5910000000000000000000", + "0x6d4b5c05d06a20957e1748ab6df206f343f92f01": "10020475000000000000000", + "0xe6115b13f9795f7e956502d5074567dab945ce6b": "100000000000000000000000", + "0x23730c357a91026e44b1d0e2fc2a51d071d8d77b": "4000000000000000000000", + "0xfae881937047895a660cf229760f27e66828d643": "182000000000000000000", + "0xff3ef6ba151c21b59986ae64f6e8228bc9a2c733": "2000000000000000000000", + "0xdfbd4232c17c407a980db87ffbcda03630e5c459": "553150000000000000000", + "0x4429a29fee198450672c0c1d073162250bec6474": "999200000000000000000", + "0x7e8f96cc29f57b0975120cb593b7dd833d606b53": "197000000000000000000", + "0x5ed3f1ebe2ae6756b5d8dc19cad02c419aa5778b": "0", + "0xdaa776a6754469d7b9267a89b86725e740da0fa0": "1970000000000000000000", + "0x139e479764b499d666208c4a8a047a97043163dd": "598880000000000000000", + "0x5ad5e420755613886f35aa56ac403eebdfe4b0d0": "80000000000000000000000", + "0x3fe801e61335c5140dc7eda2ef5204460a501230": "2000000000000000000000", + "0xce8a6b6d5033b1498b1ffeb41a41550405fa03a2": "4000000000000000000000", + "0x26c2ffc30efdc5273e76183a16c2698d6e531286": "776000000000000000000", + "0x71ec3aec3f8f9221f9149fede06903a0f9a232f2": "200000000000000000000", + "0xef35f6d4b1075e6aa139151c974b2f4658f70538": "1111111000000000000000", + "0x26a68eab905a8b3dce00e317308225dab1b9f6b8": "1980000000000000000000", + "0x63f5b53d79bf2e411489526530223845fac6f601": "30000000000000000000000", + "0x481115296ab7db52492ff7b647d63329fb5cbc6b": "16100000000000000000000", + "0xf19f193508393e4d2a127b20b2031f39c82581c6": "3500088000000000000000", + "0x500e34cde5bd9e2b71bb92d7cf55eee188d5fa0c": "5348000000000000000000", + "0x65ea67ad3fb56ad5fb94387dd38eb383001d7c68": "100000000000000000000", + "0x7f9f9b56e4289dfb58e70fd5f12a97b56d35c6a5": "1970000000000000000000", + "0x60be6f953f2a4d25b6256ffd2423ac1438252e4e": "150000000000000000000", + "0xac1dfc984b71a19929a81d81f04a7cbb14073703": "600000000000000000000", + "0xa3c14ace28b192cbb062145fcbbd5869c67271f6": "8000000000000000000000", + "0x2da76b7c39b420e388ba2c1020b0856b0270648a": "2000000000000000000000", + "0x622be4b45495fcd93143efc412d699d6cdc23dc5": "17300000000000000000", + "0xd3f873bd9956135789ab00ebc195b922e94b259d": "2000000000000000000000", + "0x975f3764e97bbccf767cbd3b795ba86d8ba9840e": "346000000000000000000", + "0xfc39be41094b1997d2169e8264c2c3baa6c99bc4": "2000000000000000000000", + "0x12ffc1128605cb0c13709a7290506f2690977193": "3340000000000000000000", + "0x9b1168de8ab64b47552f3389800a9cc08b4666cf": "1730000000000000000000", + "0x9f1aa8fcfc89a1a5328cbd6344b71f278a2ca4a0": "500000000000000000000", + "0x505a33a18634dd4800693c67f48a1d693d4833f8": "7252000000000000000000", + "0xd08fc09a0030fd0928cd321198580182a76aae9f": "1000000000000000000000", + "0x6acddca3cd2b4990e25cd65c24149d0912099e79": "3000037000000000000000", + "0x397a6ef8763a18f00fac217e055c0d3094101011": "2000000000000000000000", + "0x4e0bd32473c4c51bf25654def69f797c6b29a232": "1600930000000000000000", + "0x28d8c35fb7eea622582135e3ad47a227c9a663bd": "18200000000000000000", + "0xf96488698590dc3b2c555642b871348dfa067ad5": "500000000000000000000", + "0x4eebe80cb6f3ae5904f6f4b28d907f907189fcab": "1999944000000000000000", + "0x8d1abd897dacd4312e18080c88fb9647eab44052": "216000000000000000000", + "0x457029c469c4548d168cec3e65872e4428d42b67": "2000000000000000000000", + "0x1296acded1e063af39fe8ba0b4b63df789f70517": "100014000000000000000", + "0x71762c63678c18d1c6378ce068e666381315147e": "2000000000000000000000", + "0x6cc1c878fa6cde8a9a0b8311247e741e4642fe6d": "985000000000000000000", + "0x8d9ed7f4553058c26f7836a3802d3064eb1b363d": "90000000000000000000", + "0x5032e4bcf7932b49fdba377b6f1499636513cfc3": "100000000000000000000", + "0x462b678b51b584f3ed7ada070b5cd99c0bf7b87f": "100000000000000000000", + "0xc8aa49e3809f0899f28ab57e6743709d58419033": "880000000000000000000", + "0x01b1cae91a3b9559afb33cdc6d689442fdbfe037": "200000000000000000000", + "0xb1043004ec1941a8cf4f2b00b15700ddac6ff17e": "1000000000000000000000", + "0x5ba2c6c35dfaec296826591904d544464aeabd5e": "20000000000000000000", + "0xb32400fd13c5500917cb037b29fe22e7d5228f2d": "40000000000000000000000", + "0xd59d92d2c8701980cc073c375d720af064743c0c": "19000000000000000000000", + "0x11dd6185d9a8d73ddfdaa71e9b7774431c4dfec2": "1000000000000000000000", + "0xd4cb21e590c5a0e06801366aff342c7d7db16424": "494000000000000000000", + "0x5b6d55f6712967405c659129f4b1de09acf2cb7b": "267400000000000000000", + "0x6179979907fe7f037e4c38029d60bcbab832b3d6": "1610000000000000000000", + "0x33c407133b84b3ca4c3ded1f4658900c38101624": "2800000000000000000000", + "0xcd2a36d753e9e0ed012a584d716807587b41d56a": "261400000000000000000", + "0x8155fa6c51eb31d808412d748aa086105018122f": "1880000000000000000000", + "0x3ecc8e1668dde995dc570fe414f44211c534a615": "2000000000000000000000", + "0xd6395db5a4bb66e60f4cfbcdf0057bb4d97862e2": "910000000000000000000", + "0xb6fb39786250081426a342c70d47ee521e5bc563": "15000000000000000000000", + "0x510eda5601499a0d5e1a006bfffd833672f2e267": "2000000000000000000000", + "0x98c19dba810ba611e68f2f83ee16f6e7744f0c1f": "200000000000000000000", + "0x34ff26eb60a8d1a95a489fae136ee91d4e58084c": "600000000000000000000", + "0x6ad90be252d9cd464d998125fab693060ba8e429": "4000000000000000000000", + "0x038323b184cff7a82ae2e1bda7793fe4319ca0bf": "20000000000000000000000", + "0xdc5305b4020a06b49d657c7ca34c35c91c5f2c56": "7045990000000000000000", + "0xc9c80dc12e7bab86e949d01e4c3ed35f2b9bba5f": "2000000000000000000000", + "0x7beb81fb2f5e91526b2ac9795e76c69bcff04bc0": "69400000000000000000000", + "0xb8bc9bca7f71b4ed12e620438d620f53c114342f": "500000000000000000000", + "0xd288e7cb7ba9f620ab0f7452e508633d1c5aa276": "4000000000000000000000", + "0xa2e460a989cb15565f9ecca7d121a18e4eb405b6": "2000000000000000000000", + "0x7489cc8abe75cda4ef0d01cef2605e47eda67ab1": "133700000000000000000", + "0x38b403fb1fb7c14559a2d6f6564a5552bca39aff": "2000000000000000000000", + "0xe55c80520a1b0f755b9a2cd3ce214f7625653e8a": "2000000000000000000000", + "0x451b7070259bdba27100e36e23428a53dfe304e9": "13370000000000000000", + "0x8b5c914b128bf1695c088923fa467e7911f351fa": "98500000000000000000", + "0x17df49518d73b129f0da36b1c9b40cb66420fdc7": "10000000000000000000000", + "0xc1950543554d8a713003f662bb612c10ad4cdf21": "18200000000000000000", + "0xfa7606435b356cee257bd2fcd3d9eacb3cd1c4e1": "100000000000000000000", + "0xe0bad98eee9698dbf6d76085b7923de5754e906d": "167000000000000000000", + "0xce53c8cdd74296aca987b2bc19c2b875a48749d0": "3000000000000000000000", + "0xd0c55abf976fdc3db2afe9be99d499484d576c02": "1000000000000000000000", + "0x238a6b7635252f5244486c0af0a73a207385e039": "1370000000000000000000", + "0xceb389381d48a8ae4ffc483ad0bb5e204cfdb1ec": "740745000000000000000", + "0x3847667038f33b01c1cc795d8daf5475eff5a0d4": "728330000000000000000", + "0xa08d215b5b6aac4861a281ac7e400b78fef04cbf": "20000000000000000000", + "0x2d0dec51a6e87330a6a8fa2a0f65d88d4abcdf73": "185000000000000000000", + "0x9e8f64ddcde9b8b451bafaa235a9bf511a25ac91": "2674000000000000000000", + "0xddac6bf4bbdd7d597d9c686d0695593bedccc7fa": "865000000000000000000", + "0x22e15158b5ee3e86eb0332e3e6a9ac6cd9b55ecd": "160000000000000000000", + "0x3aea4e82d2400248f99871a41ca257060d3a221b": "1000000000000000000000", + "0xfb126f0ec769f49dcefca2f200286451583084b8": "5013750000000000000000", + "0x1b8bd6d2eca20185a78e7d98e8e185678dac4830": "16700000000000000000000", + "0x664cd67dccc9ac8228b45c55db8d76550b659cdc": "394000000000000000000", + "0x553f37d92466550e9fd775ae74362df030179132": "2000000000000000000000", + "0x730d8763c6a4fd824ab8b859161ef7e3a96a1200": "20000000000000000000000", + "0x04c2c64bb54c3eccd05585e10ec6f99a0cdb01a3": "100000000000000000000", + "0xf1624d980b65336feac5a6d54125005cfcf2aacb": "2000000000000000000000", + "0x0b7fc9ddf70576f6330669eaaa71b6a831e99528": "140000000000000000000", + "0xfa2bbca15d3fe39f8a328e91f90da14f7ac6253d": "200000000000000000000", + "0x07feef54c136850829badc4b49c3f2a73c89fb9e": "118200000000000000000", + "0x3703350c4d6fe337342cddc65bf1e2386bf3f9b2": "2020000000000000000000", + "0x6d7d1c949511f88303808c60c5ea0640fcc02683": "10000000000000000000000", + "0x34fa7792bad8bbd7ff64056214a33eb6600c1ea8": "50000000000000000000", + "0x994cc2b5227ec3cf048512467c41b7b7b748909f": "2000000000000000000000", + "0x08da3a7a0f452161cfbcec311bb68ebfdee17e88": "2000000000000000000000", + "0xbbb4ee1d82f2e156442cc93338a2fc286fa28864": "1370000000000000000000", + "0x7a2dfc770e24368131b7847795f203f3d50d5b56": "11400000000000000000000", + "0x7cef4d43aa417f9ef8b787f8b99d53f1fea1ee88": "1910000000000000000000", + "0xc6a30ef5bb3320f40dc5e981230d52ae3ac19322": "182000000000000000000", + "0x6a74844d8e9cb5581c45079a2e94462a6cee8821": "1082970000000000000000", + "0xc3110be01dc9734cfc6e1ce07f87d77d1345b7e1": "4999998000000000000000", + "0xaeb916ebf49d0f86c13f7331cef19e129937512d": "599908000000000000000", + "0x3e5abd09ce5af7ba8487c359e0f2a93a986b0b18": "10000000000000000000000", + "0xcdd60d73efaad873c9bbfb178ca1b7105a81a681": "32000000000000000000", + "0x31eb123c95c82bf685ace7a75a1881a289efca10": "920034000000000000000", + "0x86e8670e27598ea09c3899ab7711d3b9fe901c17": "200000000000000000000", + "0xa144f6b60f72d64a21e330dadb62d8990ade2b09": "1000000000000000000000", + "0x68883e152e5660fee59626e7e3b4f05110e6222f": "54683300000000000000000", + "0xfe4249127950e2f896ec0e7e2e3d055aab10550f": "668500000000000000000", + "0x403d53cf620f0922b417848dee96c190b5bc8271": "9850000000000000000000", + "0xbec2e6de39c07c2bae556acfbee2c4728b9982e3": "573000000000000000000", + "0xf3c4716d1ee5279a86d0163a14618181e16136c7": "1000000000000000000000", + "0xe38ef28a5ed984a7db24a1ae782dfb87f397dfc6": "143000000000000000000", + "0x30fbe5885f9fcce9ea5edb82ed4a1196dd259aed": "5200000000000000000000", + "0x48bf14d7b1fc84ebf3c96be12f7bce01aa69b03e": "120000000000000000000", + "0xb8d5c324a8209d7c8049d0d4aede02ba80ab578b": "16889329000000000000000", + "0x43d5a71ce8b8f8ae02b2eaf8eaf2ca2840b93fb6": "6000000000000000000000", + "0xf9a59c3cc5ffacbcb67be0fc7256f64c9b127cb4": "2000000000000000000000", + "0x0e21af1b8dbf27fcf63f37e047b87a825cbe7c27": "3000000000000000000000", + "0x1c35aab688a0cd8ef82e76541ba7ac39527f743b": "500000000000000000000", + "0x91ac5cfe67c54aa7ebfba448666c461a3b1fe2e1": "401880000000000000000", + "0x4ba53ab549e2016dfa223c9ed5a38fad91288d07": "1400000000000000000000", + "0x99a4de19ded79008cfdcd45d014d2e584b8914a8": "1500000000000000000000", + "0x4adbf4aae0e3ef44f7dd4d8985cfaf096ec48e98": "150000000000000000000", + "0x9a633fcd112cceeb765fe0418170732a9705e79c": "18200000000000000000", + "0x292f228b0a94748c8eec612d246f989363e08f08": "185000000000000000000", + "0x9f3497f5ef5fe63095836c004eb9ce02e9013b4b": "633424000000000000000", + "0x0e6dfd553b2e873d2aec15bd5fbb3f8472d8d394": "12000000000000000000000", + "0x74ebf4425646e6cf81b109ce7bf4a2a63d84815f": "40000000000000000000", + "0x8ce5e3b5f591d5eca38abf228f2e3c35134bdac0": "2319920000000000000000", + "0x90c41eba008e20cbe927f346603fc88698125969": "42000000000000000000", + "0x382ba76db41b75606dd48a48f0137e9174e031b6": "20000000000000000000", + "0x5d24bdbc1c47f0eb83d128cae48ac33c4817e91f": "1000000000000000000000", + "0xa64e5ffb704c2c9139d77ef61d8cdfa31d7a88e9": "143000000000000000000", + "0xa18360e985f2062e8f8efe02ad2cbc91ad9a5aad": "3000000000000000000000", + "0xd251f903ae18727259eee841a189a1f569a5fd76": "10000000000000000000000", + "0xefa6b1f0db603537826891b8b4bc163984bb40cd": "985000000000000000000", + "0x47fff42c678551d141eb75a6ee398117df3e4a8d": "100010000000000000000", + "0xf2294adbb6f0dcc76e632ebef48ab49f124dbba4": "1443690000000000000000", + "0x53700d53254d430f22781a4a76a463933b5d6b08": "1970000000000000000000", + "0xb14a7aaa8f49f2fb9a8102d6bbe4c48ae7c06fb2": "8000000000000000000000", + "0x9ed4e63f526542d44fddd34d59cd25388ffd6bda": "3885000000000000000000", + "0x4cac91fb83a147d2f76c3267984b910a79933348": "2167000000000000000000", + "0x9b32cf4f5115f4b34a00a64c617de06387354323": "105501000000000000000", + "0xb8bedd576a4b4c2027da735a5bc3f533252a1808": "2000000000000000000000", + "0xc5a3b98e4593fea0b38c4f455a5065f051a2f815": "20309030000000000000000", + "0xeaf52388546ec35aca6f6c6393d8d609de3a4bf3": "20000000000000000000", + "0x4c423c76930d07f93c47a5cc4f615745c45a9d72": "100000000000000000000", + "0x9052f2e4a3e3c12dd1c71bf78a4ec3043dc88b7e": "267400000000000000000", + "0x2bade91d154517620fd4b439ac97157a4102a9f7": "4000000000000000000000", + "0xda698d64c65c7f2b2c7253059cd3d181d899b6b7": "295500000000000000000", + "0xc6d8954e8f3fc533d2d230ff025cb4dce14f3426": "400000000000000000000", + "0x349a816b17ab3d27bbc0ae0051f6a070be1ff29d": "10000000000000000000000", + "0xff4d9c8484c43c42ff2c5ab759996498d323994d": "4000000000000000000000", + "0x22944fbca9b57963084eb84df7c85fb9bcdfb856": "4649845000000000000000", + "0xbfd93c90c29c07bc5fb5fc49aeea55a40e134f35": "28000000000000000000000", + "0x3caedb5319fe806543c56e5021d372f71be9062e": "40000000000000000000000", + "0x9a079c92a629ca15c8cafa2eb28d5bc17af82811": "500000000000000000000", + "0x7d2a52a7cf0c8436a8e007976b6c26b7229d1e15": "438040000000000000000", + "0xcf89f7460ba3dfe83c5a1d3a019ee1250f242f0f": "985177000000000000000", + "0x577bfe64e3a1e3800e94db1c6c184d8dc8aafc66": "1498000000000000000000", + "0x7ffd02ed370c7060b2ae53c078c8012190dfbb75": "10000000000000000000000", + "0x90b62f131a5f29b45571513ee7a74a8f0b232202": "158000000000000000000", + "0x6e8212b722afd408a7a73ed3e2395ee6454a0330": "159000000000000000000", + "0x515f30bc90cdf4577ee47d65d785fbe2e837c6bc": "10166128000000000000000", + "0xc27376f45d21e15ede3b26f2655fcee02ccc0f2a": "20000000000000000000", + "0x3da39ce3ef4a7a3966b32ee7ea4ebc2335a8f11f": "2000000000000000000000", + "0x25259d975a21d83ae30e33f800f53f37dfa01938": "20000000000000000000", + "0x8ed143701f2f72280fd04a7b4164281979ea87c9": "14000000000000000000", + "0x5ac99ad7816ae9020ff8adf79fa9869b7cea6601": "21000000000000000000000", + "0xf51fded80acb502890e87369741f3722514cefff": "20000042000000000000000", + "0xf657fcbe682eb4e8db152ecf892456000b513d15": "1940000000000000000000", + "0x62c37c52b97f4b040b1aa391d6dec152893c4707": "1000000000000000000000", + "0x89fc8e4d386b0d0bb4a707edf3bd560df1ad8f4e": "2955000000000000000000", + "0x53c0bb7fc88ea422d2ef7e540e2d8f28b1bb8183": "20000000000000000000", + "0x56f493a3d108aaa2d18d98922f8efe1662cfb73d": "2020000000000000000000", + "0xe9458f68bb272cb5673a04f781b403556fd3a387": "61000000000000000000", + "0xbe525a33ea916177f17283fca29e8b350b7f530b": "2638000000000000000000", + "0x4feb846be43041fd6b34202897943e3f21cb7f04": "83226000000000000000", + "0x15aa530dc36958b4edb38eee6dd9e3c77d4c9145": "2000000000000000000000", + "0x2458d6555ff98a129cce4037953d00206eff4287": "197000000000000000000", + "0x8035fe4e6b6af27ae492a578515e9d39fa6fa65b": "4000000000000000000000", + "0x296b71c0015819c242a7861e6ff7eded8a5f71e3": "1999800000000000000000", + "0x8f1952eed1c548d9ee9b97d0169a07933be69f63": "1000000000000000000000", + "0xa421dbb89b3a07419084ad10c3c15dfe9b32d0c2": "20000000000000000000000", + "0x554336ee4ea155f9f24f87bca9ca72e253e12cd2": "100000000000000000000", + "0xffc5fc4b7e8a0293ff39a3a0f7d60d2646d37a74": "2000000000000000000000", + "0xea2c197d26e98b0da83e1b72c787618c979d3db0": "19700000000000000000", + "0x96aa573fed2f233410dbae5180145b23c31a02f0": "1730000000000000000000", + "0xc23b2f921ce4a37a259ee4ad8b2158d15d664f59": "25403000000000000000", + "0xd874b9dfae456a929ba3b1a27e572c9b2cecdfb3": "170000000000000000000", + "0xbf8b8005d636a49664f74275ef42438acd65ac91": "200000000000000000000", + "0x441a52001661fac718b2d7b351b7c6fb521a7afd": "400000000000000000000", + "0x812a55c43caedc597218379000ce510d548836fd": "18200000000000000000", + "0x5e90c85877198756b0366c0e17b28e52b446505a": "374288000000000000000", + "0xda3017c150dd0dce7fcf881b0a48d0d1c756c4c7": "100014000000000000000", + "0x6baf7a2a02ae78801e8904ad7ac05108fc56cff6": "1000000000000000000000", + "0x177dae78bc0113d8d39c4402f2a641ae2a105ab8": "1818320000000000000000", + "0x01b5b5bc5a117fa08b34ed1db9440608597ac548": "200000000000000000000", + "0xaae732eda65988c3a00c7f472f351c463b1c968e": "2000000000000000000000", + "0xd95342953c8a21e8b635eefac7819bea30f17047": "94160000000000000000000", + "0x8d616b1eee77eef6f176e0698db3c0c141b2fc8f": "500000000000000000000", + "0x12d20790b7d3dbd88c81a279b812039e8a603bd0": "1604400000000000000000", + "0x3734cb187491ede713ae5b3b2d12284af46b8101": "3000000000000000000000", + "0xdd967c4c5f8ae47e266fb416aad1964ee3e7e8c3": "7750000000000000000000", + "0x3dcef19c868b15d34eda426ec7e04b18b6017002": "1999800000000000000000", + "0xce9d21c692cd3c01f2011f505f870036fa8f6cd2": "400000000000000000000", + "0xd44f6ac3923b5fd731a4c45944ec4f7ec52a6ae4": "10000000000000000000000", + "0xb424d68d9d0d00cec1938c854e15ffb880ba0170": "200000000000000000000", + "0x1f2186ded23e0cf9521694e4e164593e690a9685": "300000000000000000000", + "0x7f4b5e278578c046cceaf65730a0e068329ed5b6": "1880000000000000000000", + "0x8c50aa2a9212bcde56418ae261f0b35e7a9dbb82": "400000000000000000000", + "0x1953313e2ad746239cb2270f48af34d8bb9c4465": "2000000000000000000000", + "0xa15025f595acdbf3110f77c5bf24477e6548f9e8": "2000000000000000000000", + "0x53af32c22fef99803f178cf90b802fb571c61cb9": "3880000000000000000000", + "0xd0a8abd80a199b54b08b65f01d209c27fef0115b": "6525979000000000000000", + "0x2b68306ba7f8daaf73f4c644ef7d2743c0f26856": "864800000000000000000", + "0x96924191b7df655b3319dc6d6137f481a73a0ff3": "4020000000000000000000", + "0x6fa72015fa78696efd9a86174f7f1f21019286b1": "1337000000000000000000", + "0x0b119df99c6b8de58a1e2c3f297a6744bf552277": "2000000000000000000000", + "0x61733947fab820dbd351efd67855ea0e881373a0": "20000000000000000000", + "0x8ae6f80b70e1f23c91fbd5a966b0e499d95df832": "197000000000000000000", + "0x01a7d9fa7d0eb1185c67e54da83c2e75db69e39f": "7623900000000000000000", + "0x9932ef1c85b75a9b2a80057d508734c51085becc": "50170000000000000000", + "0xaefcfe88c826ccf131d54eb4ea9eb80e61e1ee25": "340000000000000000000", + "0xc21fa6643a1f14c02996ad7144b75926e87ecb4b": "20000000000000000000000", + "0x97d9e46a7604d7b5a4ea4ee61a42b3d2350fc3ed": "2000000000000000000000", + "0x3cafaf5e62505615068af8eb22a13ad8a9e55070": "1999600000000000000000", + "0x22f2dcff5ad78c3eb6850b5cb951127b659522e6": "13700000000000000000", + "0xaaad1baade5af04e2b17439e935987bf8c2bb4b9": "2000000000000000000000", + "0x298887bab57c5ba4f0615229d7525fa113b7ea89": "40000000000000000000", + "0x7539333046deb1ef3c4daf50619993f444e1de68": "1182000000000000000000", + "0x9752d14f5e1093f071711c1adbc4e3eb1e5c57f3": "2000000000000000000000", + "0xed641e06368fb0efaa1703e01fe48f4a685309eb": "200000000000000000000", + "0xd0ee4d02cf24382c3090d3e99560de3678735cdf": "2400000000000000000000", + "0x47e25df8822538a8596b28c637896b4d143c351d": "80500000000000000000000", + "0x559706c332d20779c45f8a6d046a699159b74921": "380123000000000000000", + "0x3a4da78dce05aeb87de9aead9185726da1926798": "200000000000000000000", + "0x3041445a33ba158741160d9c344eb88e5c306f94": "60000000000000000000", + "0x08d4311c9c1bbaf87fabe1a1d01463828d5d98ce": "90000000000000000000000", + "0x6bd3e59f239fafe4776bb9bddd6bee83ba5d9d9f": "1000000000000000000000", + "0x29eaae82761762f4d2db53a9c68b0f6b0b6d4e66": "2000000000000000000000", + "0x0b7d339371e5be6727e6e331b5821fa24bdb9d5a": "857738000000000000000", + "0x4714cfa4f46bd6bd70737d75878197e08f88e631": "11792000000000000000000", + "0xad92ca066edb7c711dfc5b166192d1edf8e77185": "36000000000000000000000", + "0xf97b56ebd5b77abc9fbacbabd494b9d2c221cd03": "1970000000000000000000", + "0x591bef3171d1c5957717a4e98d17eb142c214e56": "20000000000000000000000", + "0x899b3c249f0c4b81df75d212004d3d6d952fd223": "2000000000000000000000", + "0xa819d2ece122e028c8e8a04a064d02b9029b08b9": "1000000000000000000000", + "0xe341642d40d2afce2e9107c67079ac7a2660086c": "400000000000000000000", + "0x0329188f080657ab3a2afa522467178279832085": "216700000000000000000", + "0x03317826d1f70aa4bddfa09be0c4105552d2358b": "38800000000000000000", + "0x3ac9dc7a436ae98fd01c7a9621aa8e9d0b8b531d": "1790000000000000000000", + "0x93c88e2d88621e30f58a9586bed4098999eb67dd": "31200000000000000000000", + "0xcd1e66ed539dd92fc40bbaa1fa16de8c02c14d45": "230000000000000000000", + "0xe6c81ffcecb47ecdc55c0b71e4855f3e5e97fc1e": "334250000000000000000", + "0x50f8fa4bb9e2677c990a4ee8ce70dd1523251e4f": "26030000000000000000", + "0x4f64a85e8e9a40498c0c75fceb0337fb49083e5e": "1000000000000000000000", + "0x4b29437c97b4a844be71cca3b648d4ca0fdd9ba4": "150200000000000000000", + "0x1eee6cbee4fe96ad615a9cf5857a647940df8c78": "19400000000000000000", + "0x29f0edc60338e7112085a1d114da8c42ce8f55d6": "2958000000000000000000", + "0x23b1c4917fbd93ee3d48389306957384a5496cbf": "4000086000000000000000", + "0x1767525c5f5a22ed80e9d4d7710f0362d29efa33": "400000000000000000000", + "0x3064899a963c4779cbf613cd6980846af1e6ec65": "6999908000000000000000", + "0x68531f4dda808f5320767a03113428ca0ce2f389": "19400000000000000000", + "0x1db9ac9a9eaeec0a523757050c71f47278c72d50": "1337000000000000000000", + "0x7592c69d067b51b6cc639d1164d5578c60d2d244": "20000000000000000000", + "0xcf3fbfa1fd32d7a6e0e6f8ef4eab57be34025c4c": "1063120000000000000000", + "0x8efec058cc546157766a632775404a334aaada87": "1999000000000000000000", + "0xfaf5f0b7b6d558f5090d9ea1fb2d42259c586078": "6401000000000000000000", + "0x19ecf2abf40c9e857b252fe1dbfd3d4c5d8f816e": "2000000000000000000000", + "0x6e8a26689f7a2fdefd009cbaaa5310253450daba": "2049982000000000000000", + "0xe2f40d358f5e3fe7463ec70480bd2ed398a7063b": "20000000000000000000", + "0xfa19d6f7a50f4f079893d167bf14e21d0073d196": "530000000000000000000", + "0x3e2ca0d234baf607ad466a1b85f4a6488ef00ae7": "89505000000000000000", + "0xf8a49ca2390c1f6d5c0e62513b079571743f7cc6": "3000000000000000000000", + "0x5d3f3b1f7130b0bb21a0fd32396239179a25657f": "62474000000000000000000", + "0xf332c0f3e05a27d9126fd0b641a8c2d4060608fd": "5001041000000000000000", + "0xe304a32f05a83762744a9542976ff9b723fa31ea": "1576256000000000000000", + "0xf768f321fd6433d96b4f354d3cc1652c1732f57f": "10000000000000000000000", + "0x147af46ae9ccd18bb35ca01b353b51990e49dce1": "4000000000000000000000", + "0x21eae6feffa9fbf4cd874f4739ace530ccbe5937": "5000000000000000000000", + "0x6994fb3231d7e41d491a9d68d1fa4cae2cc15960": "4000000000000000000000", + "0x51126446ab3d8032557e8eba65597d75fadc815c": "322000000000000000000", + "0x24daaaddf7b06bbcea9b80590085a88567682b4e": "319008000000000000000", + "0xcd020f8edfcf524798a9b73a640334bbf72f80a5": "133700000000000000000", + "0x56febf9e1003af15b1bd4907ec089a4a1b91d268": "200000000000000000000", + "0x3c79c863c3d372b3ff0c6f452734a7f97042d706": "176000000000000000000", + "0xe1203eb3a723e99c2220117ca6afeb66fa424f61": "9461996000000000000000", + "0x18fb09188f27f1038e654031924f628a2106703d": "2000000000000000000000", + "0x2eba0c6ee5a1145c1c573984963a605d880a7a20": "500000000000000000000", + "0x4cefbe2398e47d52e78db4334c8b697675f193ae": "4011000000000000000000", + "0xc02471e3fc2ea0532615a7571d493289c13c36ef": "20000000000000000000", + "0xba469aa5c386b19295d4a1b5473b540353390c85": "2000000000000000000000", + "0x7b11673cc019626b290cbdce26046f7e6d141e21": "500000000000000000000", + "0x26784ade91c8a83a8e39658c8d8277413ccc9954": "6000000000000000000000", + "0x57d3df804f2beee6ef53ab94cb3ee9cf524a18d3": "393606000000000000000", + "0xccae0d3d852a7da3860f0636154c0a6ca31628d4": "106560000000000000000", + "0xbfe3a1fc6e24c8f7b3250560991f93cba2cf8047": "80000000000000000000000", + "0x724ce858857ec5481c86bd906e83a04882e5821d": "3000000000000000000000", + "0xfb37cf6b4f81a9e222fba22e9bd24b5098b733cf": "38800000000000000000", + "0x9b22a80d5c7b3374a05b446081f97d0a34079e7f": "3000000000000000000000", + "0x0a29a8a4d5fd950075ffb34d77afeb2d823bd689": "200000000000000000000", + "0xd01af9134faf5257174e8b79186f42ee354e642d": "1000000000000000000000", + "0x7f1619988f3715e94ff1d253262dc5581db3de1c": "900000000000000000000", + "0x6f137a71a6f197df2cbbf010dcbd3c444ef5c925": "2000000000000000000000", + "0x11efb8a20451161b644a8ccebbc1d343a3bbcb52": "3200000000000000000000", + "0x46504e6a215ac83bccf956befc82ab5a679371c8": "518898000000000000000", + "0xb523fff9749871b35388438837f7e6e0dea9cb6b": "2000000000000000000000", + "0xc5c6a4998a33feb764437a8be929a73ba34a0764": "50000000000000000000000", + "0x3cd7f7c7c2353780cde081eeec45822b25f2860c": "200000000000000000000", + "0xb3050beff9de33c80e1fa15225e28f2c413ae313": "700000000000000000000", + "0x59268171b833e0aa13c54b52ccc0422e4fa03aeb": "3000000000000000000000", + "0x7169724ee72271c534cad6420fb04ee644cb86fe": "410164000000000000000", + "0x6e6d5bbbb9053b89d744a27316c2a7b8c09b547d": "909831000000000000000", + "0x3f3f46b75cabe37bfacc8760281f4341ca7f463d": "602709000000000000000", + "0x7a33834e8583733e2d52aead589bd1affb1dd256": "1000000000000000000000", + "0xe94ded99dcb572b9bb1dcba32f6dee91e057984e": "394000000000000000000", + "0x19336a236ded755872411f2e0491d83e3e00159e": "940000000000000000000", + "0x63ac545c991243fa18aec41d4f6f598e555015dc": "600000000000000000000", + "0xcfee05c69d1f29e7714684c88de5a16098e91399": "1970000000000000000000", + "0x77be6b64d7c733a436adec5e14bf9ad7402b1b46": "1000000000000000000000", + "0x233bdddd5da94852f4ade8d212885682d9076bc6": "4000000000000000000000", + "0x952c57d2fb195107d4cd5ca300774119dfad2f78": "2000000000000000000000", + "0xe237baa4dbc9926e32a3d85d1264402d54db012f": "2000000000000000000000", + "0xaa91237e740d25a92f7fa146faa18ce56dc6e1f3": "925000000000000000000", + "0x2339e9492870afea2537f389ac2f838302a33c06": "2000000000000000000000", + "0x1d45586eb803ca2190650bf748a2b174312bb507": "1400000000000000000000", + "0xc61446b754c24e3b1642d9e51765b4d3e46b34b6": "2000000000000000000000", + "0xac28b5edea05b76f8c5f97084541277c96696a4c": "1000000000000000000000", + "0x1a1c9a26e0e02418a5cf687da75a275c622c9440": "5000000000000000000000", + "0x299368609042a858d1ecdf1fc0ada5eaceca29cf": "2000000000000000000000", + "0x095f5a51d06f6340d80b6d29ea2e88118ad730fe": "2000200000000000000000", + "0x751a2ca34e7187c163d28e3618db28b13c196d26": "500000000000000000000", + "0x75b0e9c942a4f0f6f86d3f95ff998022fa67963b": "1490000000000000000000", + "0xd1b37f03cb107424e9c4dd575ccd4f4cee57e6cd": "2000000000000000000000", + "0x7f993ddb7e02c282b898f6155f680ef5b9aff907": "20000000000000000000000", + "0xa3d583a7b65b23f60b7905f3e4aa62aac87f4227": "1046779000000000000000", + "0x526bb533b76e20c8ee1ebf123f1e9ff4148e40be": "197000000000000000000", + "0x2160b4c02cac0a81de9108de434590a8bfe68735": "1970000000000000000000", + "0x010007394b8b7565a1658af88ce463499135d6b7": "100000000000000000000", + "0x64457fa33b0832506c4f7d1180dce48f46f3e0ff": "2000000000000000000000", + "0xb51e558eb5512fbcfa81f8d0bd938c79ebb5242b": "715000000000000000000", + "0x94f13f9f0836a3ee2437a84922d2984dc0f7d53b": "2999916000000000000000", + "0x6bd457ade051795df3f2465c3839aed3c5dee978": "999925000000000000000", + "0xf3dbcf135acb9dee1a489c593c024f03c2bbaece": "2000000000000000000000", + "0x61b902c5a673885826820d1fe14549e4865fbdc2": "334703000000000000000", + "0x2acc9c1a32240b4d5b2f777a2ea052b42fc1271c": "41764000000000000000000", + "0x6ddfef639155daab0a5cb4953aa8c5afaa880453": "1820000000000000000000", + "0x96ff6f509968f36cb42cba48db32f21f5676abf8": "1970000000000000000000", + "0xb4c8170f7b2ab536d1d9a25bdd203ae1288dc3d5": "200000000000000000000", + "0x78d4f8c71c1e68a69a98f52fcb45da8af56ea1a0": "2000000000000000000000", + "0xdec99e972fca7177508c8e1a47ac22d768acab7c": "2000000000000000000000", + "0xa07aa16d74aee8a9a3288d52db1551d593883297": "600000000000000000000", + "0xcf1169041c1745e45b172435a2fc99b49ace2b00": "31960000000000000000", + "0x526cb09ce3ada3672eec1deb46205be89a4b563e": "2468000000000000000000", + "0xee6959de2b67967b71948c891ab00d8c8f38c7dc": "118200000000000000000", + "0xca7ba3ff536c7e5f0e153800bd383db8312998e0": "169600000000000000000", + "0x1ed06ee51662a86c634588fb62dc43c8f27e7c17": "200000000000000000000", + "0x730447f97ce9b25f22ba1afb36df27f9586beb9b": "820000000000000000000", + "0xae5c9bdad3c5c8a1220444aea5c229c1839f1d64": "477500000000000000000", + "0xa38306cb70baa8e49186bd68aa70a83d242f2907": "2000000000000000000000", + "0x71213fca313404204ecba87197741aa9dfe96338": "60000000000000000000", + "0x10e390ad2ba33d82b37388d09c4544c6b0225de5": "200000000000000000000", + "0x3b6e814f770748a7c3997806347605480a3fd509": "2000000000000000000000", + "0xfd452c3969ece3801c542020f1cdcaa1c71ed23d": "100000000000000000000000", + "0xe742b1e6069a8ffc3c4767235defb0d49cbed222": "800000000000000000000", + "0xd7225738dcf3578438f8e7c8b3837e42e04a262f": "445860000000000000000", + "0xcd0b0257e783a3d2c2e3ba9d6e79b75ef98024d4": "2945500000000000000000", + "0xe80e7fef18a5db15b01473f3ad6b78b2a2f8acd9": "500000000000000000000", + "0x261575e9cf59c8226fa7aaf91de86fb70f5ac3ae": "300022000000000000000", + "0x7e71171f2949fa0c3ac254254b1f0440e5e6a038": "40000000000000000000", + "0x96ea6ac89a2bac95347b51dba63d8bd5ebdedce1": "2000000000000000000000", + "0xe6ec5cf0c49b9c317e1e706315ef9eb7c0bf11a7": "17200000000000000000000", + "0x2b99b42e4f42619ee36baa7e4af2d65eacfcba35": "40000000000000000000000", + "0xc6e4cc0c7283fc1c85bc4813effaaf72b49823c0": "276926000000000000000", + "0xdbc1ce0e49b1a705d22e2037aec878ee0d75c703": "250000000000000000000", + "0x806f44bdeb688037015e84ff218049e382332a33": "1999000000000000000000", + "0x1a3a330e4fcb69dbef5e6901783bf50fd1c15342": "4200000000000000000000", + "0xd2a84f75675c62d80c88756c428eee2bcb185421": "1200000000000000000000", + "0xc593b546b7698710a205ad468b2c13152219a342": "1550000000000000000000", + "0x3f627a769e6a950eb87017a7cd9ca20871136831": "13790000000000000000000", + "0xf2d5763ce073127e2cedde6faba786c73ca94141": "7900000000000000000000", + "0x162110f29eac5f7d02b543d8dcd5bb59a5e33b73": "2000000000000000000000", + "0x59473cd300fffae240f5785626c65dfec792b9af": "20000000000000000000", + "0x4dcd11815818ae29b85d01367349a8a7fb12d06b": "7900000000000000000000", + "0x9329ffdc268babde8874b366406c81445b9b2d35": "422415000000000000000", + "0x0ab4281ebb318590abb89a81df07fa3af904258a": "500000000000000000000", + "0x875061ee12e820041a01942cb0e65bb427b00060": "2800000000000000000000", + "0xc9b698e898d20d4d4f408e4e4d061922aa856307": "40000000000000000000", + "0xca49a5f58adbefae23ee59eea241cf0482622eaa": "1430000000000000000000", + "0x196e85df7e732b4a8f0ed03623f4db9db0b8fa31": "21165000000000000000", + "0x4c760cd9e195ee4f2d6bce2500ff96da7c43ee91": "60000000000000000000000", + "0x024a098ae702bef5406c9c22b78bd4eb2cc7a293": "4000000000000000000000", + "0x9d81aea69aed6ad07089d61445348c17f34bfc5b": "300000000000000000000", + "0x76ab87dd5a05ad839a4e2fc8c85aa6ba05641730": "2000000000000000000000", + "0xc6e2f5af979a03fd723a1b6efa728318cf9c1800": "668500000000000000000", + "0x5db69fe93e6fb6fbd450966b97238b110ad8279a": "40000000000000000000000", + "0xa4259f8345f7e3a8b72b0fec2cf75e321fda4dc2": "1910000000000000000000", + "0x095030e4b82692dcf8b8d0912494b9b378ec9328": "1340000000000000000000", + "0x4b470f7ba030bc7cfcf338d4bf0432a91e2ea5ff": "2000000000000000000000", + "0x99c9f93e45fe3c1418c353e4c5ac3894eef8121e": "101870000000000000000", + "0xffac3db879a6c7158e8dec603b407463ba0d31cf": "1970000000000000000000", + "0xac8e87ddda5e78fcbcb9fa7fc3ce038f9f7d2e34": "2000000000000000000000", + "0x7a0589b143a8e5e107c9ac66a9f9f8597ab3e7ab": "1510990000000000000000", + "0xb7d581fe0af1ec383f3b3c416783f385146a7612": "20000000000000000000000", + "0xbb3fc0a29c034d710812dcc775c8cab9d28d6975": "1066806000000000000000", + "0x2c603ff0fe93616c43573ef279bfea40888d6ae7": "4740000000000000000000", + "0x15f2b7b16432ee50a5f55b41232f6334ed58bdc0": "400000000000000000000", + "0x7f3d7203c8a447f7bf36d88ae9b6062a5eee78ae": "6000000000000000000000", + "0xf067e1f1d683556a4cc4fd0c0313239f32c4cfd8": "1000000000000000000000", + "0x52738c90d860e04cb12f498d96fdb5bf36fc340e": "30000000000000000000", + "0x45781bbe7714a1c8f73b1c747921df4f84278b70": "2000000000000000000000", + "0x4a97e8fcf4635ea7fc5e96ee51752ec388716b60": "546000000000000000000", + "0x54939ff08921b467cf2946751d856378296c63ed": "1000000000000000000000", + "0x6485470e61db110aebdbafd536769e3c599cc908": "600000000000000000000", + "0xe20d1bcb71286dc7128a9fc7c6ed7f733892eef5": "1003400000000000000000", + "0xd6eea898d4ae2b718027a19ce9a5eb7300abe3ca": "27475000000000000000", + "0x014974a1f46bf204944a853111e52f1602617def": "2000000000000000000000", + "0x6aa5732f3b86fb8c81efbe6b5b47b563730b06c8": "1000000000000000000000", + "0x6107d71dd6d0eefb11d4c916404cb98c753e117d": "2000000000000000000000", + "0xdd7bcda65924aaa49b80984ae173750258b92847": "10000000000000000000000", + "0x4e7b54474d01fefd388dfcd53b9f662624418a05": "8000000000000000000000", + "0x24fc73d20793098e09ddab5798506224fa1e1850": "200000000000000000000", + "0x2b8488bd2d3c197a3d26151815b5a798d27168dc": "6680000000000000000000", + "0x949131f28943925cfc97d41e0cea0b262973a730": "2800000000000000000000", + "0x60b8d6b73b79534fb08bb8cbcefac7f393c57bfe": "1760000000000000000000", + "0xd6acc220ba2e51dfcf21d443361eea765cbd35d8": "20000000000000000000", + "0xc4c6cb723dd7afa7eb535615e53f3cef14f18118": "1999999000000000000000", + "0x4c9a862ad115d6c8274ed0b944bdd6a5500510a7": "100000000000000000000", + "0x85732c065cbd64119941aed430ac59670b6c51c4": "731345000000000000000", + "0x0126e12ebc17035f35c0e9d11dd148393c405d7a": "1999600000000000000000", + "0x472048cc609aeb242165eaaa8705850cf3125de0": "1000000000000000000000", + "0xd2edd1ddd6d86dc005baeb541d22b640d5c7cae5": "20000000000000000000", + "0x4549b15979255f7e65e99b0d5604db98dfcac8bf": "4000000000000000000000", + "0xc6c7c191379897dd9c9d9a33839c4a5f62c0890d": "4000085000000000000000", + "0xd367009ab658263b62c2333a1c9e4140498e1389": "2000000000000000000000", + "0x143f5f1658d9e578f4f3d95f80c0b1bd3933cbda": "1490000000000000000000", + "0x1a09fdc2c7a20e23574b97c69e93deba67d37220": "1998000000000000000000", + "0xac8b509aefea1dbfaf2bb33500d6570b6fd96d51": "1820000000000000000000", + "0x16ffac84032940f0121a09668b858a7e79ffa3bb": "3879210000000000000000", + "0xf338459f32a159b23db30ac335769ab2351aa63c": "30000000000000000000000", + "0xd82251456dc1380f8f5692f962828640ab9f2a03": "4879980000000000000000", + "0x47f4696bd462b20da09fb83ed2039818d77625b3": "149000000000000000000", + "0x3dde8b15b3ccbaa5780112c3d674f313bba68026": "1773000000000000000000", + "0xf70d637a845c06db6cdc91e6371ce7c4388a628e": "20000000000000000000", + "0x68295e8ea5afd9093fc0a465d157922b5d2ae234": "19982000000000000000", + "0x614e8bef3dd2c59b59a4145674401018351884ea": "20000000000000000000", + "0x4737d042dc6ae73ec73ae2517acea2fdd96487c5": "1000000000000000000000", + "0xcec6fc65853f9cce5f8e844676362e1579015f02": "2000000000000000000000", + "0xae47e2609cfafe369d66d415d939de05081a9872": "27060000000000000000000", + "0x09a928d528ec1b3e25ffc83e218c1e0afe8928c7": "18200000000000000000", + "0x9b444fd337e5d75293adcfff70e1ea01db023222": "100000000000000000000", + "0x168bdec818eafc6d2992e5ef54aa0e1601e3c561": "1000110000000000000000", + "0x353dbec42f92b50f975129b93c4c997375f09073": "1999000000000000000000", + "0x6fcc2c732bdd934af6ccd16846fb26ef89b2aa9b": "10001242000000000000000", + "0x6f2576da4de283bbe8e3ee69ddd66e5e711db3f5": "1260800000000000000000", + "0x3a3dd104cd7eb04f21932fd433ea7affd39369f5": "357500000000000000000", + "0xd44f4ac5fad76bdc1537a3b3af6472319b410d9d": "1600000000000000000000", + "0x3d9d6be57ff83e065985664f12564483f2e600b2": "2041600000000000000000", + "0x88f1045f19f2d3191816b1df18bb6e1435ad1b38": "240000000000000000000", + "0xddab75fb2ff9fecb88f89476688e2b00e367ebf9": "19400000000000000000000", + "0x092e815558402d67f90d6bfe6da0b2fffa91455a": "60000000000000000000", + "0xa7024cfd742c1ec13c01fea18d3042e65f1d5dee": "11272229000000000000000", + "0x7f46bb25460dd7dae4211ca7f15ad312fc7dc75c": "6685000000000000000000", + "0x93f18cd2526040761488c513174d1e7963768b2c": "2416500000000000000000", + "0x352f25babf4a690673e35195efa8f79d05848aad": "66800000000000000000000", + "0xf7b151cc5e571c17c76539dbe9964cbb6fe5de79": "2148000000000000000000", + "0xff3eee57c34d6dae970d8b311117c53586cd3502": "1700000000000000000000", + "0xae6f0c73fdd77c489727512174d9b50296611c4c": "6000000000000000000000", + "0x7819b0458e314e2b53bfe00c38495fd4b9fdf8d6": "20000000000000000000", + "0x7fdba031c78f9c096d62d05a369eeab0bccc55e5": "2800000000000000000000", + "0x735e328666ed5637142b3306b77ccc5460e72c3d": "1968682000000000000000", + "0x0bfbb6925dc75e52cf2684224bbe0550fea685d3": "1970000000000000000000", + "0x6be16313643ebc91ff9bb1a2e116b854ea933a45": "500000000000000000000", + "0xd6acffd0bfd99c382e7bd56ff0e6144a9e52b08e": "160000000000000000000", + "0x276a006e3028ecd44cdb62ba0a77ce94ebd9f10f": "1800000000000000000000", + "0x10711c3dda32317885f0a2fd8ae92e82069b0d0b": "4000000000000000000000", + "0x43cb9652818c6f4d6796b0e89409306c79db6349": "2000000000000000000000", + "0x7109dd011d15f3122d9d3a27588c10d77744508b": "2000000000000000000000", + "0x3497dd66fd118071a78c2cb36e40b6651cc82598": "109600000000000000000", + "0x9bf672d979b36652fc5282547a6a6bc212ae4368": "656000000000000000000", + "0xeaed16eaf5daab5bf0295e5e077f59fb8255900b": "4000000000000000000000", + "0x7ac58f6ffc4f8107ae6e30378e4e9f99c57fbb24": "40000000000000000000", + "0x45a570dcc2090c86a6b3ea29a60863dde41f13b5": "232500000000000000000", + "0x433a3b68e56b0df1862b90586bbd39c840ff1936": "2000000000000000000000", + "0xe8eaf12944092dc3599b3953fa7cb1c9761cc246": "1800000000000000000000", + "0xec11362cec810985d0ebbd7b73451444985b369f": "30000047000000000000000", + "0x78e83f80b3678c7a0a4e3e8c84dccde064426277": "1790000000000000000000", + "0x0cc67f8273e1bae0867fd42e8b8193d72679dbf8": "500000000000000000000", + "0xc70d856d621ec145303c0a6400cd17bbd6f5eaf7": "20000000000000000000", + "0xf468906e7edf664ab0d8be3d83eb7ab3f7ffdc78": "1700000000000000000000", + "0x3c286cfb30146e5fd790c2c8541552578de334d8": "10203000000000000000000", + "0xc401c427cccff10decb864202f36f5808322a0a8": "3329300000000000000000", + "0xafd019ff36a09155346b69974815a1c912c90aa4": "2000000000000000000000", + "0x96fe59c3dbb3aa7cc8cb62480c65e56e6204a7e2": "20000000000000000000000", + "0xa47779d8bc1c7bce0f011ccb39ef68b854f8de8f": "2000000000000000000000", + "0x58c650ced40bb65641b8e8a924a039def46854df": "18500000000000000000", + "0x86f4f40ad984fbb80933ae626e0e42f9333fdd41": "1000000000000000000000", + "0xb22d5055d9623135961e6abd273c90deea16a3e7": "1400000000000000000000", + "0xee3564f5f1ba0f94ec7bac164bddbf31c6888b55": "100000000000000000000", + "0xcf26b47bd034bc508e6c4bcfd6c7d30034925761": "1800000000000000000000", + "0xe87dbac636a37721df54b08a32ef4959b5e4ff82": "2000000000000000000000", + "0x3bf86ed8a3153ec933786a02ac090301855e576b": "450000000000000000000000", + "0xcfd2728dfb8bdbf3bf73598a6e13eaf43052ea2b": "170000000000000000000", + "0x85b16f0b8b34dff3804f69e2168a4f7b24d1042b": "317000000000000000000", + "0x84db1459bb00812ea67ecb3dc189b72187d9c501": "148851000000000000000", + "0x8c3a9ee71f729f236cba3867b4d79d8ceee25dbc": "100000000000000000000", + "0xe677c31fd9cb720075dca49f1abccd59ec33f734": "7800000000000000000000", + "0x8889448316ccf14ed86df8e2f478dc63c4338340": "15200000000000000000", + "0xb279c7d355c2880392aad1aa21ee867c3b3507df": "1261000000000000000000", + "0x12b5e28945bb2969f9c64c63cc05b6f1f8d6f4d5": "7722162000000000000000", + "0x8d2303341e1e1eb5e8189bde03f73a60a2a54861": "100000000000000000000", + "0x94d81074db5ae197d2bb1373ab80a87d121c4bd3": "9400000000000000000000", + "0x752c9febf42f66c4787bfa7eb17cf5333bba5070": "1966448000000000000000", + "0x16816aac0ede0d2d3cd442da79e063880f0f1d67": "2000000000000000000000", + "0xdaac91c1e859d5e57ed3084b50200f9766e2c52b": "400000000000000000000", + "0x32c2fde2b6aabb80e5aea2b949a217f3cb092283": "5614827000000000000000", + "0xcdab46a5902080646fbf954204204ae88404822b": "544942000000000000000", + "0xfdf42343019b0b0c6bf260b173afab7e45b9d621": "1999944000000000000000", + "0x791f6040b4e3e50dcf3553f182cd97a90630b75d": "4000000000000000000000", + "0x4b762166dd1118e84369f804c75f9cd657bf730c": "500000000000000000000", + "0xa76d3f156251b72c0ccf4b47a3393cbd6f49a9c5": "1337000000000000000000", + "0xc5eb42295e9cadeaf2af12dede8a8d53c579c469": "3820000000000000000000", + "0xdb9371b30c4c844e59e03e924be606a938d1d310": "2000000000000000000000", + "0x2cd39334ac7eac797257abe3736195f5b4b5ce0f": "99964000000000000000", + "0xad44357e017e244f476931c7b8189efee80a5d0a": "300000000000000000000", + "0x4ca7b717d9bc8793b04e051a8d23e1640f5ba5e3": "1248980000000000000000", + "0x73e4a2b60cf48e8baf2b777e175a5b1e4d0c2d8f": "100000000000000000000", + "0x5a1d2d2d1d520304b6208849570437eb3091bb9f": "1970000000000000000000", + "0x53047dc8ac9083d90672e8b3473c100ccd278323": "40000000000000000000", + "0x26fe174cbf526650e0cd009bd6126502ce8e684d": "11640000000000000000000", + "0xe2df23f6ea04becf4ab701748dc0963184555cdb": "2000000000000000000000", + "0xc1170dbaadb3dee6198ea544baec93251860fda5": "1200000000000000000000", + "0x8bbeacfc29cfe93402db3c41d99ab759662e73ec": "2000000000000000000000", + "0x165305b787322e25dc6ad0cefe6c6f334678d569": "2000000000000000000000", + "0x095457f8ef8e2bdc362196b9a9125da09c67e3ab": "200000000000000000000", + "0x702802f36d00250fab53adbcd696f0176f638a49": "2000000000000000000000", + "0x489334c2b695c8ee0794bd864217fb9fd8f8b135": "18200000000000000000", + "0xfa8cf4e627698c5d5788abb7880417e750231399": "4244640000000000000000", + "0x3329eb3baf4345d600ced40e6e9975656f113742": "4999711000000000000000", + "0xb4dd5499daeb2507fb2de12297731d4c72b16bb0": "20000000000000000000", + "0x88c2516a7cdb09a6276d7297d30f5a4db1e84b86": "4000000000000000000000", + "0x612ced8dc0dc9e899ee46f7962333315f3f55e44": "338830000000000000000", + "0xd71e43a45177ad51cbe0f72184a5cb503917285a": "200000000000000000000", + "0x2fb566c94bbba4e3cb67cdda7d5fad7131539102": "2000000000000000000000", + "0x03be5b4629aefbbcab9de26d39576cb7f691d764": "200550000000000000000", + "0x025367960304beee34591118e9ac2d1358d8021a": "2000000000000000000000", + "0xa5d5b8b62d002def92413710d13b6ff8d4fc7dd3": "400000000000000000000", + "0xdf3b72c5bd71d4814e88a62321a93d4011e3578b": "4000000000000000000000", + "0x3588895ac9fbafec012092dc05c0c302d90740fa": "3000000000000000000000", + "0x6021e85a8814fce1e82a41abd1d3b2dad2faefe0": "2000000000000000000000", + "0x17ee9f54d4ddc84d670eff11e54a659fd72f4455": "16000000000000000000000", + "0x873c6f70efb6b1d0f2bbc57eebcd70617c6ce662": "1013478000000000000000", + "0x1fcc7ce6a8485895a3199e16481f72e1f762defe": "1000000000000000000000", + "0xd0a7209b80cf60db62f57d0a5d7d521a69606655": "160000000000000000000", + "0xa514d00edd7108a6be839a638db2415418174196": "30000000000000000000000", + "0x046377f864b0143f282174a892a73d3ec8ec6132": "191000000000000000000", + "0xc126573d87b0175a5295f1dd07c575cf8cfa15f2": "10000000000000000000000", + "0x0e123d7da6d1e6fac2dcadd27029240bb39052fe": "1000000000000000000000", + "0xad5a8d3c6478b69f657db3837a2575ef8e1df931": "36990000000000000000", + "0xdb882eacedd0eff263511b312adbbc59c6b8b25b": "9100000000000000000000", + "0x0b43bd2391025581d8956ce42a072579cbbfcb14": "18800000000000000000", + "0xaffea0473722cb7f0e0e86b9e11883bf428d8d54": "1940000000000000000000", + "0xe32b1c4725a1875449e98f970eb3e54062d15800": "200000000000000000000", + "0x98f4af3af0aede5fafdc42a081ecc1f89e3ccf20": "9400000000000000000000", + "0x3b4768fd71e2db2cbe7fa050483c27b4eb931df3": "2000000000000000000000", + "0xd5f7c41e07729dfa6dfc64c4423160a22c609fd3": "1790000000000000000000", + "0xd944c8a69ff2ca1249690c1229c7192f36251062": "1970000000000000000000", + "0x5ae64e853ba0a51282cb8db52e41615e7c9f733f": "2000000000000000000000", + "0xb13f93af30e8d7667381b2b95bc1a699d5e3e129": "420000000000000000000", + "0x8a20e5b5cee7cd1f5515bace3bf4f77ffde5cc07": "80000000000000000000", + "0x2448596f91c09baa30bc96106a2d37b5705e5d28": "2000000000000000000000", + "0xccca24d8c56d6e2c07db086ec07e585be267ac8d": "200000000000000000000", + "0xf67bb8e2118bbcd59027666eedf6943ec9f880a5": "4000000000000000000000", + "0x7ae659eb3bc46852fa86fac4e21c768d50388945": "286000000000000000000", + "0x467e0ed54f3b76ae0636176e07420815a021736e": "2000000000000000000000", + "0xa46cd237b63eea438c8e3b6585f679e4860832ac": "1000000000000000000000", + "0x6b760d4877e6a627c1c967bee451a8507ddddbab": "910000000000000000000", + "0x593044670faeff00a55b5ae051eb7be870b11694": "133700000000000000000", + "0x533c06928f19d0a956cc28866bf6c8d8f4191a94": "292320000000000000000", + "0x262dc1364ccf6df85c43268ee182554dae692e29": "4927600000000000000000", + "0xe4368bc1420b35efda95fafbc73090521916aa34": "4000000000000000000000", + "0xfeb92d30bf01ff9a1901666c5573532bfa07eeec": "1000000000000000000000", + "0xee25b9a7032679b113588ed52c137d1a053a1e94": "199820000000000000000", + "0x20134cbff88bfadc466b52eceaa79857891d831e": "1000000000000000000000", + "0x07b1a306cb4312df66482c2cae72d1e061400fcd": "20000000000000000000000", + "0xe791d585b89936b25d298f9d35f9f9edc25a2932": "2000000000000000000000", + "0x2e6933543d4f2cc00b5350bd8068ba9243d6beb0": "2000000000000000000000", + "0xdae0d33eaa341569fa9ff5982684854a4a328a6e": "1000000000000000000000", + "0x125cc5e4d56b2bcc2ee1c709fb9e68fb177440bd": "2000000000000000000000", + "0xec99e95dece46ffffb175eb6400fbebb08ee9b95": "100000000000000000000", + "0xc538a0ff282aaa5f4b75cfb62c70037ee67d4fb5": "2000000000000000000000", + "0x60676d1fa21fca052297e24bf96389c5b12a70d7": "241500000000000000000", + "0x4b3dfbdb454be5279a3b8addfd0ed1cd37a9420d": "2000000000000000000000", + "0xcdb597299030183f6e2d238533f4642aa58754b6": "400000000000000000000", + "0x1ef2dcbfe0a500411d956eb8c8939c3d6cfe669d": "776000000000000000000", + "0xa7247c53d059eb7c9310f628d7fc6c6a0a773f08": "500000000000000000000", + "0x9799ca21dbcf69bfa1b3f72bac51b9e3ca587cf9": "1700000000000000000000", + "0xddf95c1e99ce2f9f5698057c19d5c94027ee4a6e": "6000000000000000000000", + "0x83563bc364ed81a0c6da3b56ff49bbf267827a9c": "17332000000000000000000", + "0xa192698007cc11aa603d221d5feea076bcf7c30d": "2000000000000000000000", + "0x0134ff38155fabae94fd35c4ffe1d79de7ef9c59": "985000000000000000000", + "0x80977316944e5942e79b0e3abad38da746086519": "38800000000000000000", + "0x193d37ed347d1c2f4e35350d9a444bc57ca4db43": "60000000000000000000", + "0x009a6d7db326679b77c90391a7476d238f3ba33e": "200200000000000000000", + "0x337b3bdf86d713dbd07b5dbfcc022b7a7b1946ae": "3980000000000000000000", + "0x7de7fe419cc61f91f408d234cc80d5ca3d054d99": "20000000000000000000", + "0xf47bb134da30a812d003af8dccb888f44bbf5724": "5190000000000000000000", + "0xfd920f722682afb5af451b0544d4f41b3b9d5742": "2330200000000000000000", + "0x0a917f3b5cb0b883047fd9b6593dbcd557f453b9": "1000000000000000000000", + "0xce9786d3712fa200e9f68537eeaa1a06a6f45a4b": "1790000000000000000000", + "0x9ab98d6dbb1eaae16d45a04568541ad3d8fe06cc": "272451000000000000000", + "0x0b7bb342f01bc9888e6a9af4a887cbf4c2dd2caf": "16000000000000000000000", + "0x4c0b1515dfced7a13e13ee12c0f523ae504f032b": "50000000000000000000000", + "0xac2889b5966f0c7f9edb42895cb69d1c04f923a2": "5000000000000000000000", + "0xd008513b27604a89ba1763b6f84ce688b346945b": "1000000000000000000000", + "0xa4b09de6e713dc69546e76ef0acf40b94f0241e6": "322656000000000000000", + "0xb153f828dd076d4a7c1c2574bb2dee1a44a318a8": "400000000000000000000", + "0x02ade5db22f8b758ee1443626c64ec2f32aa0a15": "20000000000000000000000", + "0x0a0650861f785ed8e4bf1005c450bbd06eb48fb6": "3066860000000000000000", + "0xb75149e185f6e3927057739073a1822ae1cf0df2": "4000086000000000000000", + "0x84cb7da0502df45cf561817bbd2362f451be02da": "1337000000000000000000", + "0xc91bb562e42bd46130e2d3ae4652b6a4eb86bc0f": "540000000000000000000", + "0xb234035f7544463ce1e22bc553064684c513cd51": "249750000000000000000", + "0xe5e33800a1b2e96bde1031630a959aa007f26e51": "1337000000000000000000", + "0xae5ce3355a7ba9b332760c0950c2bc45a85fa9a0": "400000000000000000000", + "0xe6f5eb649afb99599c414b27a9c9c855357fa878": "2674000000000000000000", + "0x7010be2df57bd0ab9ae8196cd50ab0c521aba9f9": "1970000000000000000000", + "0xca4288014eddc5632f5facb5e38517a8f8bc5d98": "340000000000000000000", + "0x2784903f1d7c1b5cd901f8875d14a79b3cbe2a56": "22388000000000000000000", + "0xf8dce867f0a39c5bef9eeba609229efa02678b6c": "2000000000000000000000", + "0xe020e86362b487752836a6de0bc02cd8d89a8b6a": "6000000000000000000000", + "0xc4088c025f3e85013f5439fb3440a17301e544fe": "2325000000000000000000", + "0xbefb448c0c5f683fb67ee570baf0db5686599751": "1970000000000000000000", + "0x2f187d5a704d5a338c5b2876a090dce964284e29": "4000000000000000000000", + "0xec0e18a01dc4dc5daae567c3fa4c7f8f9b590205": "315900000000000000000", + "0x637f5869d6e4695f0eb9e27311c4878aff333380": "1969212000000000000000", + "0xd1100dd00fe2ddf18163ad964d0b69f1f2e9658a": "5959598000000000000000", + "0x17ef4acc1bf147e326749d10e677dcffd76f9e06": "39980000000000000000000", + "0x200dfc0b71e359b2b465440a36a6cdc352773007": "1500000000000000000000", + "0xefe0675da98a5dda70cd96196b87f4e726b43348": "1164000000000000000000", + "0xd5bd5e8455c130169357c471e3e681b7996a7276": "841500000000000000000", + "0x9c7b6dc5190fe2912963fcd579683ec7395116b0": "776000000000000000000", + "0xb105dd3d987cffd813e9c8500a80a1ad257d56c6": "1999944000000000000000", + "0x145250b06e4fa7cb2749422eb817bdda8b54de5f": "219000000000000000000", + "0xd96db33b7b5a950c3efa2dc31b10ba10a532ef87": "2000000000000000000000", + "0xaf529bdb459cc185bee5a1c58bf7e8cce25c150d": "197000000000000000000", + "0x185546e8768d506873818ac9751c1f12116a3bef": "200000000000000000000", + "0x51d24bc3736f88dd63b7222026886630b6eb878d": "2000000000000000000000", + "0x69af28b0746cac0da17084b9398c5e36bb3a0df2": "1004700000000000000000", + "0x76f83ac3da30f7092628c7339f208bfc142cb1ee": "2842600000000000000000", + "0x00f463e137dcf625fbf3bca39eca98d2b968cf7f": "5910000000000000000000", + "0x2084fce505d97bebf1ad8c5ff6826fc645371fb2": "30000000000000000000", + "0x53a714f99fa00fef758e23a2e746326dad247ca7": "1490000000000000000000", + "0x0bf064428f83626722a7b5b26a9ab20421a7723e": "133700000000000000000", + "0xac6f68e837cf1961cb14ab47446da168a16dde89": "1337000000000000000000", + "0x4b3c7388cc76da3d62d40067dabccd7ef0433d23": "100076000000000000000", + "0xdeb9a49a43873020f0759185e20bbb4cf381bb8f": "211628000000000000000", + "0x5bf9f2226e5aeacf1d80ae0a59c6e38038bc8db5": "6000000000000000000000", + "0x9d0e7d92fb305853d798263bf15e97c72bf9d7e0": "1000000000000000000000", + "0x2b5c60e84535eeb4d580de127a12eb2677ccb392": "20000000000000000000000", + "0xd8d65420c18c2327cc5af97425f857e4a9fd51b3": "1760000000000000000000", + "0x30ec9392244a2108c987bc5cdde0ed9f837a817b": "1560562000000000000000", + "0x56a1d60d40f57f308eebf087dee3b37f1e7c2cba": "1159600000000000000000", + "0xa9a1cdc33bfd376f1c0d76fb6c84b6b4ac274d68": "5000000000000000000000", + "0xa67f38819565423aa85f3e3ab61bc763cbab89dd": "2130000000000000000000", + "0x62d5cc7117e18500ac2f9e3c26c86b0a94b0de15": "105000000000000000000", + "0x4970d3acf72b5b1f32a7003cf102c64ee0547941": "140000000000000000000000", + "0x76628150e2995b5b279fc83e0dd5f102a671dd1c": "40000000000000000000000", + "0x3d8f39881b9edfe91227c33fa4cdd91e678544b0": "86111000000000000000", + "0xff0b7cb71da9d4c1ea6ecc28ebda504c63f82fd1": "1043000000000000000000", + "0x8d795c5f4a5689ad62da961671f028065286d554": "2048000000000000000000", + "0xbe2346a27ff9b702044f500deff2e7ffe6824541": "20000000000000000000", + "0x0dbd417c372b8b0d01bcd944706bd32e60ae28d1": "340000000000000000000", + "0x467fbf41441600757fe15830c8cd5f4ffbbbd560": "10000000000000000000000", + "0x090cd67b60e81d54e7b5f6078f3e021ba65b9a1e": "1000000000000000000000", + "0x55a4cac0cb8b582d9fef38c5c9fff9bd53093d1f": "1970000000000000000000", + "0x3b7b4f53c45655f3dc5f017edc23b16f9bc536fa": "100000000000000000000", + "0xd508d39c70916f6abc4cc7f999f011f077105802": "100470000000000000000", + "0x037dd056e7fdbd641db5b6bea2a8780a83fae180": "140000000000000000000", + "0x660557bb43f4be3a1b8b85e7df7b3c5bcd548057": "6000000000000000000000", + "0x02089361a3fe7451fb1f87f01a2d866653dc0b07": "39976000000000000000", + "0xc4bec96308a20f90cab18399c493fd3d065abf45": "14000000000000000000000", + "0xcca07bb794571d4acf041dad87f0d1ef3185b319": "2000000000000000000000", + "0xf2d0e986d814ea13c8f466a0538c53dc922651f0": "1380000000000000000000", + "0x662cfa038fab37a01745a364e1b98127c503746d": "3940000000000000000000", + "0x3336c3ef6e8b50ee90e037b164b7a8ea5faac65d": "272712000000000000000", + "0x30e33358fc21c85006e40f32357dc8895940aaf0": "1910000000000000000000", + "0x41a9a404fc9f5bfee48ec265b12523338e29a8bf": "388000000000000000000", + "0x6af235d2bbe050e6291615b71ca5829658810142": "3000000000000000000000", + "0xfd5a63157f914fd398eab19c137dd9550bb7715c": "100000000000000000000", + "0x8a4314fb61cd938fc33e15e816b113f2ac89a7fb": "432800000000000000000", + "0xb216dc59e27c3d7279f5cd5bb2becfb2606e14d9": "400000000000000000000", + "0xf5a5459fcdd5e5b273830df88eea4cb77ddadfb9": "74500000000000000000", + "0xdf31025f5649d2c6eea41ed3bdd3471a790f759a": "20000000000000000000", + "0x721f9d17e5a0e74205947aeb9bc6a7938961038f": "51900000000000000000", + "0x08d0864dc32f9acb36bf4ea447e8dd6726906a15": "2000200000000000000000", + "0x54575c3114751e3c631971da6a2a02fd3ffbfcc8": "1940000000000000000000", + "0x8f60895fbebbb5017fcbff3cdda397292bf25ba6": "429177000000000000000", + "0x91fe8a4c6164df8fa606995d6ba7adcaf1c893ce": "17000000000000000000000", + "0x889087f66ff284f8b5efbd29493b706733ab1447": "9850000000000000000000", + "0x051633080d07a557adde319261b074997f14692d": "5800000000000000000000", + "0x59a12df2e3ef857aceff9306b309f6a500f70134": "1000000000000000000000", + "0x9f64a8e8dacf4ade30d10f4d59b0a3d5abfdbf74": "1000060000000000000000", + "0x8846928d683289a2d11df8db7a9474988ef01348": "10000000000000000000000", + "0xdff1b220de3d8e9ca4c1b5be34a799bcded4f61c": "385428000000000000000", + "0x7e7c1e9a61a08a83984835c70ec31d34d3eaa87f": "191000000000000000000", + "0xfe210b8f04dc6d4f76216acfcbd59ba83be9b630": "20000000000000000000", + "0xdc8c2912f084a6d184aa73638513ccbc326e0102": "1295000000000000000000", + "0xdddd7b9e6eab409b92263ac272da801b664f8a57": "500000000000000000000000", + "0x86a5f8259ed5b09e188ce346ee92d34aa5dd93fa": "200000000000000000000", + "0xdc1f1979615f082140b8bb78c67b27a1942713b1": "60000000000000000000", + "0xea66e7b84dcdbf36eea3e75b85382a75f1a15d96": "1729135000000000000000", + "0x039e7a4ebc284e2ccd42b1bdd60bd6511c0f7706": "17300000000000000000", + "0x36bfe1fa3b7b70c172eb042f6819a8972595413e": "1000000000000000000000", + "0x039ef1ce52fe7963f166d5a275c4b1069fe3a832": "400008000000000000000", + "0xf1df55dcc34a051012b575cb968bc9c458ea09c9": "4000000000000000000000", + "0x168b5019b818691644835fe69bf229e17112d52c": "28000000000000000000000", + "0xf60bd735543e6bfd2ea6f11bff627340bc035a23": "2000000000000000000000", + "0x2cbb0c73df91b91740b6693b774a7d05177e8e58": "1850000000000000000000", + "0x9ffcf5ef46d933a519d1d16c6ba3189b27496224": "1000000000000000000000", + "0x0e11d77a8977fac30d268445e531149b31541a24": "2000000000000000000000", + "0xdfb1626ef48a1d7d7552a5e0298f1fc23a3b482d": "1713860000000000000000", + "0xcc943be1222cd1400a2399dd1b459445cf6d54a9": "12530000000000000000000", + "0xb37c2b9f50637bece0ca959208aefee6463ba720": "400000000000000000000", + "0x96b906ea729f4655afe3e57d35277c967dfa1577": "1000000000000000000000", + "0x7995bd8ce2e0c67bf1c7a531d477bca1b2b97561": "5945100000000000000000", + "0x96f820500b70f4a3e3239d619cff8f222075b135": "200000000000000000000", + "0xad3565d52b688added08168b2d3872d17d0a26ae": "100000000000000000000", + "0x9e7c2050a227bbfd60937e268cea3e68fea8d1fe": "100000000000000000000", + "0x7e59dc60be8b2fc19abd0a5782c52c28400bce97": "1000000000000000000000", + "0x01ed5fba8d2eab673aec042d30e4e8a611d8c55a": "2000000000000000000000", + "0x59a087b9351ca42f58f36e021927a22988284f38": "18500000000000000000", + "0x2fe0023f5722650f3a8ac01009125e74e3f82e9b": "3000000000000000000000", + "0xbd1803370bddb129d239fd16ea8526a6188ae58e": "500000000000000000000", + "0xc70527d444c490e9fc3f5cc44e66eb4f306b380f": "4000000000000000000000", + "0x0f206e1a1da7207ea518b112418baa8b06260328": "600000000000000000000", + "0x6e1a046caf5b4a57f4fd4bc173622126b4e2fd86": "1790000000000000000000", + "0x84008a72f8036f3feba542e35078c057f32a8825": "100000000000000000000", + "0x246291165b59332df5f18ce5c98856fae95897d6": "1700000000000000000000", + "0x7e99dfbe989d3ba529d19751b7f4317f8953a3e2": "400000000000000000000", + "0x748c285ef1233fe4d31c8fb1378333721c12e27a": "2000000000000000000000", + "0x3dd12e556a603736feba4a6fa8bd4ac45d662a04": "167450000000000000000000", + "0xd0ae735d915e946866e1fea77e5ea466b5cadd16": "2000000000000000000000", + "0x4f767bc8794aef9a0a38fea5c81f14694ff21a13": "512200000000000000000", + "0x0e2f8e28a681f77c583bd0ecde16634bdd7e00cd": "95060000000000000000", + "0xd74a6e8d6aab34ce85976814c1327bd6ea0784d2": "100000000000000000000000", + "0x629be7ab126a5398edd6da9f18447e78c692a4fd": "2000000000000000000000", + "0x2e46fcee6a3bb145b594a243a3913fce5dad6fba": "10000000000000000000000", + "0xe39b11a8ab1ff5e22e5ae6517214f73c5b9b55dc": "2000000000000000000000", + "0x119aa64d5b7d181dae9d3cb449955c89c1f963fa": "700000000000000000000", + "0xce079f51887774d8021cb3b575f58f18e9acf984": "180000000000000000000", + "0x550c306f81ef5d9580c06cb1ab201b95c748a691": "665800000000000000000", + "0x06dc7f18cee7edab5b795337b1df6a9e8bd8ae59": "400000000000000000000", + "0xe21c778ef2a0d7f751ea8c074d1f812243863e4e": "5308559000000000000000", + "0x45d4b54d37a8cf599821235f062fa9d170ede8a4": "324000000000000000000", + "0x893a6c2eb8b40ab096b4f67e74a897b840746e86": "1730000000000000000000", + "0xd44d81e18f46e2cfb5c1fcf5041bc8569767d100": "36381800000000000000000", + "0xc5de1203d3cc2cea31c82ee2de5916880799eafd": "5000000000000000000000", + "0x7f0f04fcf37a53a4e24ede6e93104e78be1d3c9e": "2000000000000000000000", + "0x3ce1dc97fcd7b7c4d3a18a49d6f2a5c1b1a906d7": "200000000000000000000", + "0xac4ee9d502e7d2d2e99e59d8ca7d5f00c94b4dd6": "1000000000000000000000", + "0x7640a37f8052981515bce078da93afa4789b5734": "2000000000000000000000", + "0x76cac488111a4fd595f568ae3a858770fc915d5f": "200000000000000000000", + "0xff4a408f50e9e72146a28ce4fc8d90271f116e84": "1970000000000000000000", + "0x249db29dbc19d1235da7298a04081c315742e9ac": "1801800000000000000000", + "0x3a04572847d31e81f7765ca5bfc9d557159f3683": "133031000000000000000", + "0xb6771b0bf3427f9ae7a93e7c2e61ee63941fdb08": "18800000000000000000000", + "0x30c26a8e971baa1855d633ba703f028cc7873140": "10000000000000000000000", + "0x167e3e3ae2003348459392f7dfce44af7c21ad59": "500000000000000000000", + "0x43f16f1e75c3c06a9478e8c597a40a3cb0bf04cc": "2914000000000000000000", + "0x056b1546894f9a85e203fb336db569b16c25e04f": "169397000000000000000", + "0x70616e2892fa269705b2046b8fe3e72fa55816d3": "20000000000000000000000", + "0x8f4d1d41693e462cf982fd81d0aa701d3a5374c9": "4000000000000000000000", + "0xc518799a5925576213e21896e0539abb85b05ae3": "1000000000000000000000", + "0x0e3a28c1dfafb0505bdce19fe025f506a6d01ceb": "2000000000000000000000", + "0xe4a47e3933246c3fd62979a1ea19ffdf8c72ef37": "148273000000000000000", + "0xd231929735132102471ba59007b6644cc0c1de3e": "1000090000000000000000", + "0x555d8d3ce1798aca902754f164b8be2a02329c6c": "10000000000000000000000", + "0x5ab1a5615348001c7c775dc75748669b8be4de14": "690200000000000000000", + "0x2fee36a49ee50ecf716f1047915646779f8ba03f": "1056230000000000000000", + "0x54db5e06b4815d31cb56a8719ba33af2d73e7252": "670000000000000000000", + "0x7c8bb65a6fbb49bd413396a9d7e31053bbb37aa9": "6000000000000000000000", + "0xc1384c6e717ebe4b23014e51f31c9df7e4e25b31": "500000000000000000000", + "0x474158a1a9dc693c133f65e47b5c3ae2f773a86f": "200200000000000000000", + "0x2934c0df7bbc172b6c186b0b72547ace8bf75454": "60000000000000000000", + "0x6966063aa5de1db5c671f3dd699d5abe213ee902": "8000000000000000000000", + "0x9225d46a5a80943924a39e5b84b96da0ac450581": "40000000000000000000000", + "0x671bbca099ff899bab07ea1cf86965c3054c8960": "50000000000000000000", + "0xf1f766b0e46d73fcd4d52e7a72e1b9190cc632b3": "8000000000000000000000", + "0xef0dc7dd7a53d612728bcbd2b27c19dd4d7d666f": "705668000000000000000", + "0x38d2e9154964b41c8d50a7487d391e7ee2c3d3c2": "3500000000000000000000", + "0x352a785f4a921632504ce5d015f83c49aa838d6d": "4314800000000000000000", + "0x743de50026ca67c94df54f066260e1d14acc11ac": "2000000000000000000000", + "0xb188078444027e386798a8ae68698919d5cc230d": "267400000000000000000", + "0x53608105ce4b9e11f86bf497ffca3b78967b5f96": "20000000000000000000000", + "0x3b159099075207c6807663b1f0f7eda54ac8cce3": "1969543000000000000000", + "0x141a5e39ee2f680a600fbf6fa297de90f3225cdd": "10000000000000000000000", + "0x44fff37be01a3888d3b8b8e18880a7ddefeeead3": "259145000000000000000", + "0xc5a629a3962552cb8eded889636aafbd0c18ce65": "10000000000000000000000", + "0xfdba5359f7ec3bc770ac49975d844ec9716256f1": "1000000000000000000000", + "0x7c1df24a4f7fb2c7b472e0bb006cb27dcd164156": "1000000000000000000000", + "0xab7d54c7c6570efca5b4b8ce70f52a5773e5d53b": "279600000000000000000", + "0x3f173aa6edf469d185e59bd26ae4236b92b4d8e1": "320000000000000000000", + "0xa3f4ad14e0bb44e2ce2c14359c75b8e732d37054": "200000000000000000000", + "0xac5f627231480d0d95302e6d89fc32cb1d4fe7e3": "200000000000000000000", + "0xd0775dba2af4c30a3a78365939cd71c2f9de95d2": "1940000000000000000000", + "0xad94235fc3b3f47a2413af31e884914908ef0c45": "500008000000000000000", + "0xeaedcc6b8b6962d5d9288c156c579d47c0a9fcff": "85000000000000000000", + "0x7ac48d40c664cc9a6d89f1c5f5c80a1c70e744e6": "3008000000000000000000", + "0xec73114c5e406fdbbe09b4fa621bd70ed54ea1ef": "24500000000000000000000", + "0xa690f1a4b20ab7ba34628620de9ca040c43c1963": "4000000000000000000000", + "0xcad14f9ebba76680eb836b079c7f7baaf481ed6d": "238600000000000000000", + "0x6c714a58fff6e97d14b8a5e305eb244065688bbd": "4000000000000000000000", + "0x3e618350fa01657ab0ef3ebac8e37012f8fc2b6f": "2804400000000000000000", + "0xc946d5acc1346eba0a7279a0ac1d465c996d827e": "16385128000000000000000", + "0x1164caaa8cc5977afe1fad8a7d6028ce2d57299b": "400000000000000000000", + "0x7917e5bd82a9790fd650d043cdd930f7799633db": "3999800000000000000000", + "0xd52aecc6493938a28ca1c367b701c21598b6a02e": "1100000000000000000000", + "0x98bed3a72eccfbafb923489293e429e703c7e25b": "2000000000000000000000", + "0x42db0b902559e04087dd5c441bc7611934184b89": "2014420000000000000000", + "0x43bc2d4ddcd6583be2c7bc094b28fb72e62ba83b": "2000000000000000000000", + "0x85f0e7c1e3aff805a627a2aaf2cff6b4c0dbe9cb": "20000000000000000000", + "0x581b9fd6eae372f3501f42eb9619eec820b78a84": "19699015000000000000000", + "0x541db20a80cf3b17f1621f1b3ff79b882f50def3": "1000000000000000000000", + "0x4e8a6d63489ccc10a57f885f96eb04ecbb546024": "18500000000000000000000", + "0x28349f7ef974ea55fe36a1583b34cec3c45065f0": "234490000000000000000", + "0xa3241d890a92baf52908dc4aa049726be426ebd3": "19999560000000000000000", + "0xb4b11d109f608fa8edd3fea9f8c315649aeb3d11": "5000000000000000000000", + "0x5f321b3daaa296cadf29439f9dab062a4bffedd6": "81868000000000000000", + "0xc5ae86b0c6c7e3900f1368105c56537faf8d743e": "188000000000000000000", + "0x9a8eca4189ff4aa8ff7ed4b6b7039f0902219b15": "20000000000000000000", + "0xa3facc50195c0b4933c85897fecc5bbd995c34b8": "20000000000000000000", + "0xf07bd0e5c2ce69c7c4a724bd26bbfa9d2a17ca03": "5910000000000000000000", + "0x640aba6de984d94517377803705eaea7095f4a11": "10000000000000000000000", + "0x204ac98867a7c9c7ed711cb82f28a878caf69b48": "6000000000000000000000", + "0x9d34dac25bd15828faefaaf28f710753b39e89dc": "1090400000000000000000", + "0xfe418b421a9c6d373602790475d2303e11a75930": "1015200000000000000000", + "0x3f472963197883bbda5a9b7dfcb22db11440ad31": "481445000000000000000", + "0x1578bdbc371b4d243845330556fff2d5ef4dff67": "100000000000000000000", + "0xdba4796d0ceb4d3a836b84c96f910afc103f5ba0": "166666000000000000000", + "0x466fda6b9b58c5532750306a10a2a8c768103b07": "199955000000000000000", + "0x2770f14efb165ddeba79c10bb0af31c31e59334c": "3000000000000000000000", + "0x7c382c0296612e4e97e440e02d3871273b55f53b": "197600000000000000000", + "0x1fb7bd310d95f2a6d9baaf8a8a430a9a04453a8b": "3000000000000000000000", + "0xa9acf600081bb55bb6bfbab1815ffc4e17e85a95": "200000000000000000000", + "0xf93d5bcb0644b0cce5fcdda343f5168ffab2877d": "209978000000000000000", + "0xdb0cc78f74d9827bdc8a6473276eb84fdc976212": "2000000000000000000000", + "0xb66411e3a02dedb726fa79107dc90bc1cae64d48": "2000000000000000000000", + "0x4d6e8fe109ccd2158e4db114132fe75fecc8be5b": "25019000000000000000", + "0x6fd947d5a73b175008ae6ee8228163da289b167d": "30000000000000000000000", + "0x32d950d5e93ea1d5b48db4714f867b0320b31c0f": "1015200000000000000000", + "0x9c99b62606281b5cefabf36156c8fe62839ef5f3": "4000000000000000000000", + "0x86c8d0d982b539f48f9830f9891f9d607a942659": "13260000000000000000000", + "0xf2127d54188fedef0f338a5f38c7ff73ad9f6f42": "20000000000000000000000", + "0xe864fec07ed1214a65311e11e329de040d04f0fd": "1656353000000000000000", + "0x1d09ad2412691cc581c1ab36b6f9434cd4f08b54": "7000000000000000000000", + "0x4ea70f04313fae65c3ff224a055c3d2dab28dddf": "19999800000000000000000", + "0xe0668fa82c14d6e8d93a53113ef2862fa81581bc": "870400000000000000000", + "0xf0d858105e1b648101ac3f85a0f8222bf4f81d6a": "600000000000000000000", + "0x0f3a1023cac04dbf44f5a5fa6a9cf8508cd4fddf": "1820000000000000000000", + "0x5793abe6f1533311fd51536891783b3f9625ef1c": "827268000000000000000", + "0x8d667637e29eca05b6bfbef1f96d460eefbf9984": "4000000000000000000000", + "0xd76dbaebc30d4ef67b03e6e6ecc6d84e004d502d": "2019250000000000000000", + "0x42d1a6399b3016a8597f8b640927b8afbce4b215": "2980000000000000000000", + "0x21fd47c5256012198fa5abf131c06d6aa1965f75": "7880000000000000000000", + "0x2f2bba1b1796821a766fce64b84f28ec68f15aea": "20000000000000000000", + "0xd24bf12d2ddf457decb17874efde2052b65cbb49": "14000000000000000000000", + "0x88de13b09931877c910d593165c364c8a1641bd3": "3000000000000000000000", + "0x555ca9f05cc134ab54ae9bea1c3ff87aa85198ca": "100000000000000000000", + "0xae9ecd6bdd952ef497c0050ae0ab8a82a91898ce": "30000000000000000000", + "0xad8bfef8c68a4816b3916f35cb7bfcd7d3040976": "40000000000000000000000", + "0xdad136b88178b4837a6c780feba226b98569a94c": "200000000000000000000", + "0x800e7d631c6e573a90332f17f71f5fd19b528cb9": "152000000000000000000", + "0x94a9a71691317c2064271b51c9353fbded3501a8": "3340000000000000000000", + "0x80a0f6cc186cf6201400736e065a391f52a9df4a": "10000000000000000000000", + "0x712ff7370a13ed360973fedc9ff5d2c93a505e9e": "3940000000000000000000", + "0x42399659aca6a5a863ea2245c933fe9a35b7880e": "2044000000000000000000", + "0xae239acffd4ebe2e1ba5b4170572dc79cc6533ec": "12000000000000000000000", + "0x007b9fc31905b4994b04c9e2cfdc5e2770503f42": "1999000000000000000000", + "0x7480de62254f2ba82b578219c07ba5be430dc3cb": "7040000000000000000000", + "0x917b8f9f3a8d09e9202c52c29e724196b897d35e": "161000000000000000000", + "0x708ea707bae4357f1ebea959c3a250acd6aa21b3": "500000000000000000000", + "0x6dc7053a718616cfc78bee6382ee51add0c70330": "2000000000000000000000", + "0xc4dac5a8a0264fbc1055391c509cc3ee21a6e04c": "6501000000000000000000", + "0xc1b2a0fb9cad45cd699192cd27540b88d3384279": "500000000000000000000", + "0xb07cb9c12405b711807543c4934465f87f98bd2d": "2000000000000000000000", + "0xc7f72bb758016b374714d4899bce22b4aec70a31": "1072706000000000000000", + "0x0c480de9f7461002908b49f60fc61e2b62d3140b": "10000000000000000000000", + "0x83d532d38d6dee3f60adc68b936133c7a2a1b0dd": "500000000000000000000", + "0x12afbcba1427a6a39e7ba4849f7ab1c4358ac31b": "20000000000000000000000", + "0xf8f6645e0dee644b3dad81d571ef9baf840021ad": "2000000000000000000000", + "0x40cf890591eae4a18f812a2954cb295f633327e6": "48132000000000000000", + "0x735b97f2fc1bd24b12076efaf3d1288073d20c8c": "20000000000000000000", + "0x47c7e5efb48b3aed4b7c6e824b435f357df4c723": "18200000000000000000", + "0xd34d708d7398024533a5a2b2309b19d3c55171bb": "400000000000000000000", + "0x64370e87202645125a35b207af1231fb6072f9a7": "200000000000000000000", + "0xb055af4cadfcfdb425cf65ba6431078f07ecd5ab": "100000000000000000000", + "0xc7de5e8eafb5f62b1a0af2195cf793c7894c9268": "1000000000000000000000", + "0xc63cd7882118b8a91e074d4c8f4ba91851303b9a": "260000000000000000000", + "0x164d7aac3eecbaeca1ad5191b753f173fe12ec33": "744090000000000000000", + "0xe4fb26d1ca1eecba3d8298d9d148119ac2bbf580": "400000000000000000000", + "0x613ac53be565d46536b820715b9b8d3ae68a4b95": "3760000000000000000000", + "0x7f616c6f008adfa082f34da7d0650460368075fb": "1000000000000000000000", + "0x9af100cc3dae83a33402051ce4496b16615483f6": "2000000000000000000000", + "0xb45cca0d36826662683cf7d0b2fdac687f02d0c4": "1000000000000000000000", + "0x93a6b3ab423010f981a7489d4aad25e2625c5741": "20190033000000000000000", + "0xee049af005974dd1c7b3a9ca8d9aa77175ba53aa": "333333000000000000000", + "0x687927e3048bb5162ae7c15cf76bd124f9497b9e": "2000000000000000000000", + "0x1aa40270d21e5cde86b6316d1ac3c533494b79ed": "20000000000000000000", + "0x426259b0a756701a8b663528522156c0288f0f24": "9900000000000000000000", + "0x91c75e3cb4aa89f34619a164e2a47898f5674d9c": "2000000000000000000000", + "0x437983388ab59a4ffc215f8e8269461029c3f1c1": "20000000000000000000000", + "0x272a131a5a656a7a3aca35c8bd202222a7592258": "2674000000000000000000", + "0xbc0ca4f217e052753614d6b019948824d0d8688b": "400000000000000000000", + "0xcc6c03bd603e09de54e9c4d5ac6d41cbce715724": "98500000000000000000", + "0xd79aff13ba2da75d46240cac0a2467c656949823": "1730000000000000000000", + "0x477b24eee8839e4fd19d1250bd0b6645794a61ca": "8000000000000000000000", + "0x79fd6d48315066c204f9651869c1096c14fc9781": "2000000000000000000000", + "0x1463a873555bc0397e575c2471cf77fa9db146e0": "10000000000000000000000", + "0x89ab13ee266d779c35e8bb04cd8a90cc2103a95b": "60000000000000000000000", + "0x90acced7e48c08c6b934646dfa0adf29dc94074f": "56154000000000000000", + "0x31ea6eab19d00764e9a95e183f2b1b22fc7dc40f": "20000000000000000000", + "0x87a53ea39f59a35bada8352521645594a1a714cb": "1910000000000000000000", + "0x1e1aed85b86c6562cb8fa1eb6f8f3bc9dcae6e79": "4516200000000000000000", + "0xe36a8ea87f1e99e8a2dc1b2608d166667c9dfa01": "100000000000000000000", + "0xec2cb8b9378dff31aec3c22e0e6dadff314ab5dd": "2000000000000000000000", + "0x3cadeb3d3eed3f62311d52553e70df4afce56f23": "4000000000000000000000", + "0x3ceca96bb1cdc214029cbc5e181d398ab94d3d41": "80000000000000000000000", + "0x3283eb7f9137dd39bed55ffe6b8dc845f3e1a079": "66224000000000000000", + "0x0954a8cb5d321fc3351a7523a617d0f58da676a7": "2506000000000000000000", + "0xde33d708a3b89e909eaf653b30fdc3a5d5ccb4b3": "177300000000000000000", + "0x1c6702b3b05a5114bdbcaeca25531aeeb34835f4": "26071500000000000000000", + "0xe5b96fc9ac03d448c1613ac91d15978145dbdfd1": "200000000000000000000", + "0xfbf204c813f836d83962c7870c7808ca347fd33e": "20000000000000000000", + "0x3b13631a1b89cb566548899a1d60915cdcc4205b": "2000000000000000000000", + "0xa87f7abd6fa31194289678efb63cf584ee5e2a61": "4000000000000000000000", + "0xc0a39308a80e9e84aaaf16ac01e3b01d74bd6b2d": "136499000000000000000", + "0xffd6da958eecbc016bab91058440d39b41c7be83": "20000000000000000000000", + "0x0e3dd7d4e429fe3930a6414035f52bdc599d784d": "40110000000000000000", + "0xe0663e8cd66792a641f56e5003660147880f018e": "2000000000000000000000", + "0x5b78eca27fbdea6f26befba8972b295e7814364b": "2000000000000000000000", + "0xec9851bd917270610267d60518b54d3ca2b35b17": "40000000000000000000000", + "0xbc9c95dfab97a574cea2aa803b5caa197cef0cff": "420000000000000000000", + "0x100b4d0977fcbad4debd5e64a0497aeae5168fab": "314500000000000000000", + "0x1b6610fb68bad6ed1cfaa0bbe33a24eb2e96fafb": "152000000000000000000", + "0xb4524c95a7860e21840296a616244019421c4aba": "8000000000000000000000", + "0x88975a5f1ef2528c300b83c0c607b8e87dd69315": "83500000000000000000", + "0x853e6abaf44469c72f151d4e223819aced4e3728": "2000000000000000000000", + "0xd604abce4330842e3d396ca73ddb5519ed3ec03f": "163940000000000000000", + "0xd209482bb549abc4777bea6d7f650062c9c57a1c": "320880000000000000000", + "0x590acbda37290c0d3ec84fc2000d7697f9a4b15d": "500000000000000000000", + "0x571950ea2c90c1427d939d61b4f2de4cf1cfbfb0": "20000000000000000000", + "0xcb94e76febe208116733e76e805d48d112ec9fca": "1000000000000000000000", + "0xfa8e3b1f13433900737daaf1f6299c4887f85b5f": "715000000000000000000", + "0x162d76c2e6514a3afb6fe3d3cb93a35c5ae783f1": "2000000000000000000000", + "0x4bea288eea42c4955eb9faad2a9faf4783cbddac": "28790618000000000000000", + "0xc8ab1a3cf46cb8b064df2e222d39607394203277": "2000000000000000000000", + "0x318b2ea5f0aaa879c4d5e548ac9d92a0c67487b7": "200000000000000000000", + "0x53c5fe0119e1e848640cee30adea96940f2a5d8b": "21746000000000000000000", + "0x0701f9f147ec486856f5e1b71de9f117e99e2105": "173360000000000000000", + "0x337cfe1157a5c6912010dd561533791769c2b6a6": "1000000000000000000000", + "0xfd60d2b5af3d35f7aaf0c393052e79c4d823d985": "56400000000000000000", + "0x0f049a8bdfd761de8ec02cee2829c4005b23c06b": "252000000000000000000", + "0x924bce7a853c970bb5ec7bb759baeb9c7410857b": "13700000000000000000", + "0x16abb8b021a710bdc78ea53494b20614ff4eafe8": "158000000000000000000", + "0x9e7f65a90e8508867bccc914256a1ea574cf07e3": "1240000000000000000000", + "0x01d03815c61f416b71a2610a2daba59ff6a6de5b": "9553100000000000000000", + "0x3df762049eda8ac6927d904c7af42f94e5519601": "2000000000000000000000", + "0x5593c9d4b664730fd93ca60151c25c2eaed93c3b": "200000000000000000000", + "0xe023f09b2887612c7c9cf1988e3a3a602b3394c9": "2000000000000000000000", + "0x4c13980c32dcf3920b78a4a7903312907c1b123f": "60024000000000000000", + "0xa282e969cac9f7a0e1c0cd90f5d0c438ac570da3": "627760000000000000000", + "0x3b22da2a0271c8efe102532773636a69b1c17e09": "502000000000000000000", + "0x1aa1021f550af158c747668dd13b463160f95a40": "1470000000000000000000", + "0xf15178ffc43aa8070ece327e930f809ab1a54f9d": "197600000000000000000", + "0xdb1293a506e90cad2a59e1b8561f5e66961a6788": "2000000000000000000000", + "0x88c361640d6b69373b081ce0c433bd590287d5ec": "50000000000000000000000", + "0x3737216ee91f177732fb58fa4097267207e2cf55": "1520000000000000000000", + "0xa16d9e3d63986159a800b46837f45e8bb980ee0b": "2030400000000000000000", + "0xec76f12e57a65504033f2c0bce6fc03bd7fa0ac4": "3580000000000000000000", + "0xd9f1b26408f0ec67ad1d0d6fe22e8515e1740624": "24000000000000000000", + "0x716ba01ead2a91270635f95f25bfaf2dd610ca23": "44750000000000000000000", + "0x42a98bf16027ce589c4ed2c95831e2724205064e": "10000000000000000000000", + "0x0f88aac9346cb0e7347fba70905475ba8b3e5ece": "10000000000000000000000", + "0x2d8c52329f38d2a2fa9cbaf5c583daf1490bb11c": "20000000000000000000", + "0x3cea302a472a940379dd398a24eafdbadf88ad79": "3000000000000000000000", + "0xa29d5bda74e003474872bd5894b88533ff64c2b5": "10000000000000000000000", + "0x2d23766b6f6b05737dad80a419c40eda4d77103e": "3820000000000000000000", + "0xb07249e055044a9155359a402937bbd954fe48b6": "100000000000000000000", + "0xf1e980c559a1a8e5e50a47f8fffdc773b7e06a54": "30104784000000000000000", + "0x8275cd684c3679d5887d03664e338345dc3cdde1": "15800000000000000000", + "0xb27c1a24204c1e118d75149dd109311e07c073ab": "3100000000000000000000", + "0x451b3699475bed5d7905f8905aa3456f1ed788fc": "2560000000000000000000", + "0x31ad4d9946ef09d8e988d946b1227f9141901736": "22880000000000000000000", + "0x52b8a9592634f7300b7c5c59a3345b835f01b95c": "2000000000000000000000", + "0xb161725fdcedd17952d57b23ef285b7e4b1169e8": "50071000000000000000", + "0x74fc5a99c0c5460503a13b0509459da19ce7cd90": "200000000000000000000", + "0xd99df7421b9382e42c89b006c7f087702a0757c0": "480000000000000000000", + "0x8a4f4a7f52a355ba105fca2072d3065fc8f7944b": "500000000000000000000", + "0x12316fc7f178eac22eb2b25aedeadf3d75d00177": "19999999000000000000000", + "0xf598db2e09a8a5ee7d720d2b5c43bb126d11ecc2": "200000000000000000000", + "0x37b8beac7b1ca38829d61ab552c766f48a10c32f": "400000000000000000000", + "0x851dc38adb4593729a76f33a8616dab6f5f59a77": "100000000000000000000", + "0xbf4096bc547dbfc4e74809a31c039e7b389d5e17": "3940000000000000000000", + "0x98d3731992d1d40e1211c7f735f2189afa0702e0": "8000000000000000000000", + "0x0f4073c1b99df60a1549d69789c7318d9403a814": "20000000000000000000000", + "0xa430995ddb185b9865dbe62539ad90d22e4b73c2": "10000000000000000000000", + "0x898c72dd736558ef9e4be9fdc34fef54d7fc7e08": "1000000000000000000000", + "0xf9b617f752edecae3e909fbb911d2f8192f84209": "2674000000000000000000", + "0xe1ae029b17e373cde3de5a9152201a14cac4e119": "99968000000000000000", + "0xd8e8474292e7a051604ca164c0707783bb2885e8": "13370000000000000000000", + "0xf476f2cb7208a32e051fd94ea8662992638287a2": "100000000000000000000", + "0x3a84e950ed410e51b7e8801049ab2634b285fea1": "18690000000000000000000", + "0x5b7784caea01799ca30227827667ce207c5cbc76": "2000000000000000000000", + "0x3af65b3e28895a4a001153391d1e69c31fb9db39": "3940000000000000000000", + "0x95fb5afb14c1ef9ab7d179c5c300503fd66a5ee2": "34225000000000000000", + "0xa8446c4781a737ac4328b1e15b8a0b3fbb0fd668": "21390500000000000000000", + "0x4888fb25cd50dbb9e048f41ca47d78b78a27c7d9": "17300000000000000000000", + "0x566c10d638e8b88b47d6e6a414497afdd00600d4": "99960000000000000000", + "0xbd47f5f76e3b930fd9485209efa0d4763da07568": "1000000000000000000000", + "0x1e1c6351776ac31091397ecf16002d979a1b2d51": "1400000000000000000000", + "0xedf603890228d7d5de9309942b5cad4219ef9ad7": "5000000000000000000000", + "0x1923cfc68b13ea7e2055803645c1e320156bd88d": "1337000000000000000000", + "0x8f8f37d0ad8f335d2a7101b41156b688a81a9cbe": "70000000000000000000", + "0x63334fcf1745840e4b094a3bb40bb76f9604c04c": "3978000000000000000000", + "0x001762430ea9c3a26e5749afdb70da5f78ddbb8c": "200000000000000000000", + "0x512116817ba9aaf843d1507c65a5ea640a7b9eec": "50000000000000000000", + "0x2961fb391c61957cb5c9e407dda29338d3b92c80": "999942000000000000000", + "0xfc2952b4c49fedd0bc0528a308495e6d6a1c71d6": "2000000000000000000000", + "0x13ec812284026e409bc066dfebf9d5a4a2bf801e": "1610000000000000000000", + "0xef463c2679fb279164e20c3d2691358773a0ad95": "2000000000000000000000", + "0x3aadf98b61e5c896e7d100a3391d3250225d61df": "234000000000000000000", + "0xe8137fc1b2ec7cc7103af921899b4a39e1d959a1": "1490000000000000000000", + "0xb1a2b43a7433dd150bb82227ed519cd6b142d382": "2738000000000000000000", + "0xc1f39bd35dd9cec337b96f47c677818160df37b7": "20000000000000000000", + "0xb587b44a2ca79e4bc1dd8bfdd43a207150f2e7e0": "630400000000000000000", + "0x41485612d03446ec4c05e5244e563f1cbae0f197": "970000000000000000000", + "0xa12623e629df93096704b16084be2cd89d562da4": "8500000000000000000000", + "0x3f2f381491797cc5c0d48296c14fd0cd00cdfa2d": "804000000000000000000", + "0x9470cc36594586821821c5c996b6edc83b6d5a32": "24000000000000000000", + "0x3605372d93a9010988018f9f315d032ed1880fa1": "500066000000000000000", + "0x12632388b2765ee4452b50161d1fffd91ab81f4a": "740000000000000000000", + "0x274a3d771a3d709796fbc4d5f48fce2fe38c79d6": "20000000000000000000", + "0xd60a52580728520df7546bc1e283291788dbae0c": "999910000000000000000", + "0x1ab53a11bcc63ddfaa40a02b9e186496cdbb8aff": "1996800000000000000000", + "0xc282e6993fbe7a912ea047153ffd9274270e285b": "139939000000000000000", + "0xa291e9c7990d552dd1ae16cebc3fca342cbaf1d1": "20000000000000000000000", + "0x5547fdb4ae11953e01292b7807fa9223d0e4606a": "98940000000000000000", + "0xbded11612fb5c6da99d1e30e320bc0995466141e": "400000000000000000000", + "0xb73b4ff99eb88fd89b0b6d57a9bc338e886fa06a": "32000000000000000000", + "0xb1c751786939bba0d671a677a158c6abe7265e46": "10000000000000000000000", + "0xe881bbbe69722d81efecaa48d1952a10a2bfac8f": "16000000000000000000000", + "0xfe96c4cd381562401aa32a86e65b9d52fa8aee27": "2640000000000000000000", + "0x683dba36f7e94f40ea6aea0d79b8f521de55076e": "140000000000000000000", + "0x5ac2908b0f398c0df5bac2cb13ca7314fba8fa3d": "199800000000000000000", + "0x8914a680a5aec5226d4baaec2e5552b44dd7c874": "100076000000000000000", + "0x041170f581de80e58b2a045c8f7c1493b001b7cb": "889800000000000000000", + "0x4665e47396c7db97eb2a03d90863d5d4ba319a94": "600000000000000000000", + "0xed4be04a052d7accb3dcce90319dba4020ab2c68": "37547947000000000000000", + "0x4b0619d9d8aa313a9531ac7dbe04ca0d6a5ad1b6": "2000000000000000000000", + "0xa21442ab05340ade68c915f3c3399b9955f3f7eb": "775000000000000000000", + "0x655934da8e744eaa3de34dbbc0894c4eda0b61f2": "200000000000000000000", + "0x6038740ae28d66ba93b0be08482b3205a0f7a07b": "316000000000000000000", + "0x99924a9816bb7ddf3fec1844828e9ad7d06bf4e6": "1760000000000000000000", + "0x6847825bdee8240e28042c83cad642f286a3bddc": "1500000000000000000000", + "0xa718aaad59bf395cba2b23e09b02fe0c89816247": "999600000000000000000", + "0x2c89f5fdca3d155409b638b98a742e55eb4652b7": "98500000000000000000000", + "0x1a7044e2383f8708305b495bd1176b92e7ef043a": "200000000000000000000", + "0x282e80a554875a56799fa0a97f5510e795974c4e": "1000000000000000000000", + "0xffb3bcc3196a8c3cb834cec94c34fed35b3e1054": "1340000000000000000000", + "0xd135794b149a18e147d16e621a6931f0a40a969a": "20000000000000000000000", + "0x6b94615db750656ac38c7e1cf29a9d13677f4e15": "12000000000000000000000", + "0xecbe425e670d39094e20fb5643a9d818eed236de": "5000000000000000000000", + "0x511e0efb04ac4e3ff2e6550e498295bfcd56ffd5": "668500000000000000000", + "0xff65511cada259260c1ddc41974ecaecd32d6357": "1760000000000000000000", + "0x9ffc5fe06f33f5a480b75aa94eb8556d997a16c0": "20000000000000000000", + "0x57df23bebdc65eb75feb9cb2fad1c073692b2baf": "4000000000000000000000", + "0x207ef80b5d60b6fbffc51f3a64b8c72036a5abbd": "6685000000000000000000", + "0xc573e841fa08174a208b060ccb7b4c0d7697127f": "668500000000000000000", + "0x411610b178d5617dfab934d293f512a93e5c10e1": "170000000000000000000", + "0x9991614c5baa47dd6c96874645f97add2c3d8380": "1970000000000000000000", + "0x2d3480bf0865074a72c7759ee5137b4d70c51ce9": "200000000000000000000", + "0x9d40e012f60425a340d82d03a1c757bfabc706fb": "169799000000000000000", + "0x47648bed01f3cd3249084e635d14daa9e7ec3c8a": "194000000000000000000", + "0xa5ff62222d80c013cec1a0e8850ed4d354dac16d": "207600000000000000000", + "0xf80d3619702fa5838c48391859a839fb9ce7160f": "1992800000000000000000", + "0x7c0f5e072043c9ee740242197e78cc4b98cdf960": "200000000000000000000", + "0xa40aa2bbce0c72b4d0dfffcc42715b2b54b01bfa": "1000000000000000000000", + "0x2eeed50471a1a2bf53ee30b1232e6e9d80ef866d": "20000000000000000000", + "0x0c2808b951ed9e872d7b32790fcc5994ae41ffdc": "102000000000000000000000", + "0x7f06c89d59807fa60bc60136fcf814cbaf2543bd": "10000000000000000000000", + "0x8d4b603c5dd4570c34669515fdcc665890840c77": "18200000000000000000", + "0xd5e5c135d0c4c3303934711993d0d16ff9e7baa0": "2000000000000000000000", + "0x241361559feef80ef137302153bd9ed2f25db3ef": "20000000000000000000000", + "0xdb63122de7037da4971531fae9af85867886c692": "277000000000000000000", + "0x417e4e2688b1fd66d821529e46ed4f42f8b3db3d": "2000000000000000000000", + "0x127db1cadf1b771cbd7475e1b272690f558c8565": "14000000000000000000000", + "0x48659d8f8c9a2fd44f68daa55d23a608fbe500dc": "2000000000000000000000", + "0xb3a64b1176724f5409e1414a3523661baee74b4a": "25610000000000000000", + "0xaa14422d6f0ae5a758194ed15780c838d67f1ee1": "28503824000000000000000", + "0xa0a0e65204541fca9b2fb282cd95138fae16f809": "10000000000000000000000", + "0xd2107b353726c3a2b46566eaa7d9f80b5d21dbe3": "20000000000000000000", + "0xe4cafb727fb5c6b70bb27533b8a9ccc9ef6888e1": "300443000000000000000", + "0x09f3f601f605441140586ce0656fa24aa5b1d9ae": "1539400000000000000000", + "0x87fcbe7c4193ffcb08143779c9bec83fe7fda9fc": "100275000000000000000", + "0x03ebc63fda6660a465045e235fbe6e5cf195735f": "141840000000000000000", + "0xbdbaf6434d40d6355b1e80e40cc4ab9c68d96116": "100000000000000000000", + "0x4e2225a1bb59bc88a2316674d333b9b0afca6655": "155000000000000000000", + "0x4dc3da13b2b4afd44f5d0d3189f444d4ddf91b1b": "2000000000000000000000", + "0x4ba8e0117fc0b6a3e56b24a3a58fe6cef442ff98": "5640000000000000000000", + "0x27146913563aa745e2588430d9348e86ea7c3510": "400000000000000000000", + "0x4c5afe40f18ffc48d3a1aec41fc29de179f4d297": "2000000000000000000000", + "0x8a810114b2025db9fbb50099a6e0cb9e2efa6bdc": "1910000000000000000000", + "0x2dee90a28f192d676a8773232b56f18f239e2fad": "18587970000000000000000", + "0x60676e92d18b000509c61de540e6c5ddb676d509": "1200000000000000000000", + "0x9bfc659c9c601ea42a6b21b8f17084ec87d70212": "10000000000000000000000", + "0x5d5d6e821c6eef96810c83c491468560ef70bfb5": "2000000000000000000000", + "0xd5787668c2c5175b01a8ee1ac3ecc9c8b2aba95a": "1999944000000000000000", + "0x33b336f5ba5edb7b1ccc7eb1a0d984c1231d0edc": "2000000000000000000000", + "0x3abb8adfc604f48d5984811d7f1d52fef6758270": "4475000000000000000000", + "0x980a84b686fc31bdc83c221058546a71b11f838a": "779471000000000000000", + "0x0b507cf553568daaf65504ae4eaa17a8ea3cdbf5": "2000000000000000000000", + "0x896009526a2c7b0c09a6f63a80bdf29d9c87de9c": "3462830000000000000000", + "0x9696052138338c722f1140815cf7749d0d3b3a74": "500000000000000000000", + "0x3831757eae7557cb8a37a4b10644b63e4d3b3c75": "200000000000000000000", + "0x62dc72729024375fc37cbb9c7c2393d10233330f": "2000000000000000000000", + "0x44098866a69b68c0b6bc168229b9603587058967": "188000000000000000000", + "0x25adb8f96f39492c9bb47c5edc88624e46075697": "26740000000000000000000", + "0xfd4de8e3748a289cf7d060517d9d38388db01fb8": "250000000000000000000", + "0x6be7595ea0f068489a2701ec4649158ddc43e178": "2000000000000000000000", + "0xd402b4f6a099ebe716cb14df4f79c0cd01c6071b": "2000000000000000000000", + "0xa07682000b1bcf3002f85c80c0fa2949bd1e82fd": "4000000000000000000000", + "0xeb4f00e28336ea09942588eeac921811c522143c": "2000000000000000000000", + "0x8f31c7005197ec997a87e69bec48649ab94bb2a5": "4000000000000000000000", + "0xe7fd8fd959aed2767ea7fa960ce1db53af802573": "1000000000000000000000", + "0xa8ef9ad274436042903e413c3b0c62f5f52ed584": "10000000000000000000000", + "0xd83ad260e9a6f432fb6ea28743299b4a09ad658c": "2000000000000000000000", + "0xb5c816a8283ca4df68a1a73d63bd80260488df08": "200000000000000000000", + "0xd7d3c75920590438b82c3e9515be2eb6ed7a8b1a": "60000000000000000000000", + "0xaf3cb5965933e7dad883693b9c3e15beb68a4873": "2000000000000000000000", + "0x6e899e59a9b41ab7ea41df7517860f2acb59f4fd": "20000000000000000000000", + "0x527a8ca1268633a6c939c5de1b929aee92aeac8d": "900000000000000000000", + "0x1680cec5021ee93050f8ae127251839e74c1f1fd": "13098657000000000000000", + "0xff7843c7010aa7e61519b762dfe49124a76b0e4e": "933580000000000000000000", + "0x140fba58dbc04803d84c2130f01978f9e0c73129": "400000000000000000000", + "0x0261ad3a172abf1315f0ffec3270986a8409cb25": "203500000000000000000", + "0xab5a79016176320973e8cd38f6375530022531c0": "1000000000000000000000", + "0xfca73eff8771c0103ba3cc1a9c259448c72abf0b": "1000000000000000000000", + "0x07d41217badca5e0e60327d845a3464f0f27f84a": "4000000000000000000000", + "0x2c1c19114e3d6de27851484b8d2715e50f8a1065": "100000000000000000000", + "0xabd21eff954fc6a7de26912a7cbb303a6607804e": "1517000000000000000000", + "0xf303d5a816affd97e83d9e4dac2f79072bb0098f": "960000000000000000000", + "0x114cfefe50170dd97ae08f0a44544978c599548d": "863000000000000000000", + "0x647b85044df2cf0b4ed4882e88819fe22ae5f793": "1000032000000000000000", + "0x1b130d6fa51d5c48ec8d1d52dc8a227be8735c8a": "2000000000000000000000", + "0x0d9d3f9bc4a4c6efbd59679b69826bc1f63d9916": "600000000000000000000", + "0xc765e00476810947816af142d46d2ee7bca8cc4f": "500000000000000000000", + "0xb57b04fa23d1203fae061eac4542cb60f3a57637": "191000000000000000000", + "0xe192489b85a982c1883246d915b229cb13207f38": "5000000000000000000000", + "0x5f483ffb8f680aedf2a38f7833afdcde59b61e4b": "2000000000000000000000", + "0xb46d1182e5aacaff0d26b2fcf72f3c9ffbcdd97d": "3139000000000000000000", + "0x59c7f785c93160e5807ed34e5e534bc6188647a7": "640000000000000000000", + "0x18e4ce47483b53040adbab35172c01ef64506e0c": "9000000000000000000000", + "0x296d66b521571a4e4103a7f562c511e6aa732d81": "668500000000000000000", + "0xbcd99edc2160f210a05e3a1fa0b0434ced00439b": "2000000000000000000000", + "0xf14f0eb86db0eb68753f16918e5d4b807437bd3e": "200000000000000000000", + "0x60d5667140d12614b21c8e5e8a33082e32dfcf23": "20000000000000000000000", + "0x8ccabf25077f3aa41545344d53be1b2b9c339000": "1695400000000000000000", + "0x8cc0d7c016fa7aa950114aa1db094882eda274ea": "159800000000000000000", + "0xc71145e529c7a714e67903ee6206e4c3042b6727": "1430000000000000000000", + "0xc5e9939334f1252ed2ba26814487dfd2982b3128": "70000000000000000000", + "0xf09b3e87f913ddfd57ae8049c731dba9b636dfc3": "608000000000000000000", + "0x4349225a62f70aea480a029915a01e5379e64fa5": "2598000000000000000000", + "0x666b4f37d55d63b7d056b615bb74c96b3b01991a": "4000000000000000000000", + "0x8bd6b1c6d74d010d1008dba6ef835d4430b35c32": "50000000000000000000", + "0x7363cd90fbab5bb8c49ac20fc62c398fe6fb744c": "2000000000000000000000", + "0xb7479dab5022c4d5dbaaf8de171b4e951dd1a457": "80000000000000000000", + "0x5a5468fa5ca226c7532ecf06e1bc1c45225d7ec9": "1910000000000000000000", + "0x32a20d028e2c6218b9d95b445c771524636a22ef": "9500000000000000000000", + "0x1bd28cd5c78aee51357c95c1ef9235e7c18bc854": "2000000000000000000000", + "0x693492a5c51396a482881669ccf6d8d779f00951": "345827000000000000000", + "0xbd723b289a7367b6ece2455ed61edb49670ab9c4": "4999995000000000000000", + "0x1be3542c3613687465f15a70aeeb81662b65cca8": "2000000000000000000000", + "0x5803e68b34da121aef08b602badbafb4d12481ca": "18000000000000000000000", + "0x9ac907ee85e6f3e223459992e256a43fa08fa8b2": "10000000000000000000000", + "0x833b6a8ec8da408186ac8a7d2a6dd61523e7ce84": "16000000000000000000000", + "0x64628c6fb8ec743adbd87ce5e018d531d9210437": "26740000000000000000", + "0x566c28e34c3808d9766fe8421ebf4f2b1c4f7d77": "1970000000000000000000", + "0x171ad9a04bedc8b861e8ed4bddf5717813b1bb48": "400000000000000000000", + "0x4f85bc1fc5cbc9c001e8f1372e07505370d8c71f": "940000000000000000000", + "0x6d2f976734b9d0070d1883cf7acab8b3e4920fc1": "10000000000000000000000", + "0x357a02c0a9dfe287de447fb67a70ec5b62366647": "26740000000000000000", + "0x44a01fb04ac0db2cce5dbe281e1c46e28b39d878": "1999944000000000000000", + "0x3630c5e565ceaa8a0f0ffe32875eae2a6ce63c19": "170016000000000000000", + "0x334340ee4b9cdc81f850a75116d50ee9b69825bf": "2000000000000000000000", + "0xc0afb7d8b79370cfd663c68cc6b9702a37cd9eff": "1000000000000000000000", + "0x2016895df32c8ed5478269468423aea7b7fbce50": "20000000000000000000", + "0x1e2fe4e4a77d141ff49a0c7fbc95b0a2b283eeeb": "2000000000000000000000", + "0x260df8943a8c9a5dba7945327fd7e0837c11ad07": "200000000000000000000", + "0x32fbeed6f626fcdfd51acafb730b9eeff612f564": "2000000000000000000000", + "0x9bd88068e13075f3a8cac464a5f949d6d818c0f6": "6000000000000000000000", + "0xab4572fbb1d72b575d69ec6ad17333873e8552fc": "1999942000000000000000", + "0xe44ea51063405154aae736be2bf1ee3b9be639ae": "4000000000000000000000", + "0x617f20894fa70e94a86a49cd74e03238f64d3cd9": "5000057000000000000000", + "0x3e914e3018ac00449341c49da71d04dfeeed6221": "4000000000000000000000", + "0x590181d445007bd0875aaf061c8d51153900836a": "2000000000000000000000", + "0x27987110221a880826adb2e7ab5eca78c6e31aec": "4000000000000000000000", + "0x06618e9d5762df62028601a81d4487d6a0ecb80e": "1337000000000000000000", + "0x8cc652dd13e7fe14dabbb36d5d320db9ffee8a54": "1790000000000000000000", + "0x8973aefd5efaee96095d9e288f6a046c97374b43": "141000000000000000000", + "0xdbd51cdf2c3bfacdff106221de2e19ad6d420414": "1760000000000000000000", + "0x25697ef20cccaa70d32d376f8272d9c1070c3d78": "200000000000000000000", + "0x0726c42e00f45404836eb1e280d073e7059687f5": "1623331000000000000000", + "0x5e0785532c7723e4c0af9357d5274b73bdddddde": "25000088000000000000000", + "0x38430e931d93be01b4c3ef0dc535f1e0a9610063": "10000000000000000000000", + "0x143d536b8b1cb84f56a39e0bc81fd5442bcacce1": "100000000000000000000", + "0x5c6d041da7af4487b9dc48e8e1f60766d0a56dbc": "1457800000000000000000", + "0xf9bfb59d538afc4874d4f5941b08c9730e38e24b": "40000000000000000000", + "0x83dbfd8eda01d0de8e158b16d0935fc2380a5dc7": "600000000000000000000", + "0x0e6cd664ad9c1ed64bf98749f40644b626e3792c": "60000000000000000000000", + "0xce2e0da8934699bb1a553e55a0b85c169435bea3": "4999962000000000000000", + "0xa39bfee4aec9bd75bd22c6b672898ca9a1e95d32": "10000000000000000000000", + "0x1bc44c8761231ba1f11f5faa40fa669a013e12ce": "203586000000000000000", + "0x68809af5d532a11c1a4d6e32aac75c4c52b08ead": "10000000000000000000000", + "0x80cc21bd99f39005c58fe4a448909220218f66cb": "1000072000000000000000", + "0x1080c1d8358a15bc84dac8253c6883319020df2c": "2674000000000000000000", + "0x9eaf6a328a4076024efa6b67b48b21eedcc0f0b8": "158000000000000000000", + "0x1e7b5e4d1f572becf2c00fc90cb4767b4a6e33d4": "112970000000000000000", + "0xacbd185589f7a68a67aa4b1bd65077f8c64e4e21": "200000000000000000000", + "0xff78541756ab2b706e0d70b18adb700fc4f1643d": "43250000000000000000000", + "0x7f0ec3db804692d4d1ea3245365aab0590075bc4": "4000000000000000000000", + "0x4a918032439159bb315b6725b6830dc83697739f": "343800000000000000000", + "0xbc1b021a78fde42d9b5226d6ec26e06aa3670090": "80000000000000000000", + "0x2f2523cc834f0086052402626296675186a8e582": "16000000000000000000000", + "0x9db2e15ca681f4c66048f6f9b7941ed08b1ff506": "4000000000000000000000", + "0x20b9a9e6bd8880d9994ae00dd0b9282a0beab816": "500000000000000000000", + "0x3bddbc8134f77d55597fc97c26d26698090604eb": "13700000000000000000", + "0x80c3a9f695b16db1597286d1b3a8b7696c39fa27": "100000000000000000000", + "0x53194d8afa3e883502767edbc30586af33b114d3": "2000000000000000000000", + "0xe2efd0a9bc407ece03d67e8ec8e9d283f48d2a49": "12280000000000000000000", + "0x1cb450920078aab2317c7db3b38af7dd298b2d41": "340000000000000000000", + "0xca8276c477b4a07b80107b843594189607b53bec": "6000000000000000000000", + "0x147f4210ab5804940a0b7db8c14c28396b62a6bf": "2000000000000000000000", + "0xd3df3b53cb3b4755de54e180451cc44c9e8ae0aa": "659801000000000000000", + "0xf7c708015071d4fb0a3a2a09a45d156396e3349e": "3000000000000000000000", + "0xa8cafac32280d021020bf6f2a9782883d7aabe12": "100000000000000000000", + "0x399aa6f5d078cb0970882bc9992006f8fbdf3471": "1000000000000000000000", + "0x15669180dee29598869b08a721c7d24c4c0ee63f": "1000000000000000000000", + "0xbba8ab22d2fedbcfc63f684c08afdf1c175090b5": "99091000000000000000", + "0x5e5a441974a83d74c687ebdc633fb1a49e7b1ad7": "3000000000000000000000", + "0x98b769cc305cecfb629a00c907069d7ef9bc3a12": "26000000000000000000", + "0xc820c711f07705273807aaaa6de44d0e4b48be2e": "155000000000000000000", + "0x12aa7d86ddfbad301692feac8a08f841cb215c37": "137000000000000000000", + "0x6ff5d361b52ad0b68b1588607ec304ae5665fc98": "1940000000000000000000", + "0x2382a9d48ec83ea3652890fd0ee79c907b5b2dc1": "133700000000000000000", + "0xb2a144b1ea67b9510f2267f9da39d3f93de26642": "2000000000000000000000", + "0xb3e20eb4de18bd060221689894bee5aeb25351ee": "73535000000000000000", + "0x101a0a64f9afcc448a8a130d4dfcbee89537d854": "15200000000000000000000", + "0x1b826fb3c012b0d159e294ba5b8a499ff3c0e03c": "2000000000000000000000", + "0xaafb7b013aa1f8541c7e327bf650adbd194c208f": "1358000000000000000000", + "0x96eb523e832f500a017de13ec27f5d366c560eff": "307600000000000000000", + "0xc7bf17c4c11f98941f507e77084fffbd2dbd3db5": "1000000000000000000000", + "0x840ec83ea93621f034e7bb3762bb8e29ded4c479": "2500000000000000000000", + "0x0e9c511864a177f49be78202773f60489fe04e52": "6000000000000000000000", + "0xf6f1a44309051c6b25e47dff909b179bb9ab591c": "1940000000000000000000", + "0x63fe6bcc4b8a9850abbe75803730c932251f145b": "18200000000000000000", + "0xf88b58db37420b464c0be88b45ee2b95290f8cfa": "40000000000000000000", + "0x9d4d321177256ebd9afbda304135d517c3dc5693": "616000000000000000000", + "0x8c1fbe5f0aea359c5aa1fa08c8895412ca8e05a6": "1000000000000000000000", + "0xcb0dd7cf4e5d8661f6028943a4b9b75c914436a7": "120000000000000000000000", + "0xa3979a92760a135adf69d72f75e167755f1cb8c3": "100000000000000000000", + "0xca22cda3606da5cad013b8074706d7e9e721a50c": "6816200000000000000000", + "0x157559adc55764cc6df79323092534e3d6645a66": "6000000000000000000000", + "0x4f52ad6170d25b2a2e850eadbb52413ff2303e7f": "3040000000000000000000", + "0xeed28c3f068e094a304b853c950a6809ebcb03e0": "17300000000000000000000", + "0x2e47f287f498233713850d3126823cc67dcee255": "14600000000000000000", + "0x6c359e58a13d4578a9338e335c67e7639f5fb4d7": "218000000000000000000", + "0x4968a2cedb457555a139295aea28776e54003c87": "10092310000000000000000", + "0x4041374b0feef4792e4b33691fb86897a4ff560c": "365000000000000000000", + "0x83e48055327c28b5936fd9f4447e73bdb2dd3376": "2674000000000000000000", + "0x32b7feebc5c59bf65e861c4c0be42a7611a5541a": "2212000000000000000000", + "0x21a6db6527467bc6dad54bc16e9fe2953b6794ed": "14000000000000000000000", + "0xe8ead1bb90ccc3aea2b0dcc5b58056554655d1d5": "7760000000000000000000", + "0x7a94b19992ceb8ce63bc92ee4b5aded10c4d9725": "16770000000000000000000", + "0x90e93e4dc17121487952333614002be42356498e": "1910000000000000000000", + "0xaab00abf5828d7ebf26b47ceaccdb8ba03325166": "10000000000000000000000", + "0x0a9ab2638b1cfd654d25dab018a0aebddf85fd55": "21801000000000000000", + "0xb12ed07b8a38ad5506363fc07a0b6d799936bdaf": "10000000000000000000000", + "0xf4a9d00cefa97b7a58ef9417fc6267a5069039ee": "21800000000000000000", + "0x04a1cada1cc751082ff8da928e3cfa000820a9e9": "40000000000000000000", + "0x9018cc1f48d2308e252ab6089fb99a7c1d569410": "200000000000000000000", + "0x895d694e880b13ccd0848a86c5ce411f88476bbf": "199955000000000000000", + "0x40a7f72867a7dc86770b162b7557a434ed50cce9": "1000000000000000000000", + "0x467ea10445827ef1e502daf76b928a209e0d4032": "2000000000000000000000", + "0x7553aa23b68aa5f57e135fe39fdc235eaca8c98c": "1000000000000000000000", + "0x31b43b015d0081643c6cda46a7073a6dfdbca825": "50019600000000000000000", + "0xd82fd9fdf6996bedad2843159c06f37e0924337d": "1688800000000000000000", + "0x24a4eb36a7e498c36f99975c1a8d729fd6b305d7": "258000000000000000000", + "0x91d66ea6288faa4b3d606c2aa45c7b6b8a252739": "2000000000000000000000", + "0x83a402438e0519773d5448326bfb61f8b20cf52d": "1520000000000000000000", + "0xc2fafdd30acb6d6706e9293cb02641f9edbe07b5": "1494224000000000000000", + "0x79dba256472db4e058f2e4cdc3ea4e8a42773833": "1460000000000000000000", + "0x498abdeb14c26b7b7234d70fceaef361a76dff72": "3000000000000000000000", + "0x7b73242d75ca9ad558d650290df17692d54cd8b8": "2000200000000000000000", + "0x6ec3659571b11f889dd439bcd4d67510a25be57e": "123000000000000000000", + "0xab098633eeee0ccefdf632f9575456f6dd80fc86": "200000000000000000000000", + "0xf4a51fce4a1d5b94b0718389ba4e7814139ca738": "300000000000000000000", + "0x8f561b41b209f248c8a99f858788376250609cf3": "1700000000000000000000", + "0x05d0f4d728ebe82e84bf597515ad41b60bf28b39": "4200000000000000000000", + "0xdfdf43393c649caebe1bb18059decb39f09fb4e8": "400000000000000000000", + "0x0089508679abf8c71bf6781687120e3e6a84584d": "1800000000000000000000", + "0x80907f593148b57c46c177e23d25abc4aae18361": "100000000000000000000", + "0x94fcceadfe5c109c5eaeaf462d43873142c88e22": "4800000000000000000000", + "0xe89249738b7eced7cb666a663c49cbf6de8343ea": "2000000000000000000000", + "0x23c99ba087448e19c9701df66e0cab52368331fa": "2000000000000000000000", + "0xa68e0c30cba3bc5a883e540320f999c7cd558e5c": "1799869000000000000000", + "0x88888a57bd9687cbf950aeeacf9740dcc4d1ef59": "1820000000000000000000", + "0xe9b36fe9b51412ddca1a521d6e94bc901213dda8": "10000000000000000000000", + "0xa9145046fa3628cf5fd4c613927be531e6db1fdd": "112000000000000000000", + "0xe82c58c579431b673546b53a86459acaf1de9b93": "1000000000000000000000", + "0xbd6a474d66345bcdd707594adb63b30c7822af54": "4000000000000000000000", + "0x6a6159074ab573e0ee581f0f3df2d6a594629b74": "310000000000000000000", + "0x2e7f465520ec35cc23d68e75651bb6689544a196": "1050049000000000000000", + "0xac6d02e9a46b379fac4ac9b1d7b5d47bc850ce16": "1760000000000000000000", + "0xbd59094e074f8d79142ab1489f148e32151f2089": "20000000000000000000", + "0x0ba6e46af25a13f57169255a34a4dac7ce12be04": "500000000000000000000", + "0x35145f620397c69cb8e00962961f0f4886643989": "6000000000000000000000", + "0xd84b922f7841fc5774f00e14604ae0df42c8551e": "4011000000000000000000", + "0x44232ff66ddad1fd841266380036afd7cf7d7f42": "200000000000000000000", + "0x516954025fca2608f47da81c215eedfd844a09ff": "382000000000000000000", + "0xe5aa0b833bb916dc19a8dd683f0ede241d988eba": "3000000000000000000000", + "0x80ea1acc136eca4b68c842a95adf6b7fee7eb8a2": "4000000000000000000000", + "0x98a0e54c6d9dc8be96276cebf4fec460f6235d85": "1969803000000000000000", + "0x91620f3eb304e813d28b0297556d65dc4e5de5aa": "3820000000000000000000", + "0x7bb984c6dbb9e279966afafda59c01d02627c804": "8050000000000000000000", + "0x41f489a1ec747bc29c3e5f9d8db97877d4d1b4e9": "133700000000000000000", + "0x8dbc3e6cb433e194f40f82b40faadb1f8b856116": "1910000000000000000000", + "0x889da40fb1b60f9ea9bd7a453e584cf7b1b4d9f7": "40000000000000000000", + "0xdebbdd831e0f20ae6e378252decdf92f7cf0c658": "2000000000000000000000", + "0xa22ade0ddb5c6ef8d0cd8de94d82b11082cb2e91": "1020000000000000000000", + "0x823219a25976bb2aa4af8bad41ac3526b493361f": "2000000000000000000000", + "0x6d39a9e98f81f769d73aad2cead276ac1387babe": "394000000000000000000", + "0x751abcb6cc033059911815c96fd191360ab0442d": "8000000000000000000000", + "0x64d80c3b8ba68282290b75e65d8978a15a87782c": "1970000000000000000000", + "0x6ba8f7e25fc2d871618e24e40184199137f9f6aa": "400020000000000000000", + "0x25a74c2ac75dc8baa8b31a9c7cb4b7829b2456da": "2000000000000000000000", + "0x0f7b61c59b016322e8226cafaee9d9e76d50a1b3": "4000000000000000000000", + "0x7526e482529f0a14eec98871dddd0e721b0cd9a2": "20000000000000000000", + "0x071dd90d14d41f4ff7c413c24238d3359cd61a07": "36400000000000000000000", + "0xa986762f7a4f294f2e0b173279ad2c81a2223458": "20000000000000000000", + "0xe667f652f957c28c0e66d0b63417c80c8c9db878": "601650000000000000000", + "0x7b98e23cb96beee80a168069ebba8f20edd55ccf": "214500000000000000000", + "0x2d8e5bb8d3521695c77e7c834e0291bfacee7408": "1970000000000000000000", + "0xf23d01589eb12d439f7448ff54307529f191858d": "2000000000000000000000", + "0xabd9605b3e91acfd777830d16463478ae0fc7720": "133700000000000000000", + "0xeabb90d37989aab31feae547e0e6f3999ce6a35d": "2000000000000000000000", + "0x0abfb39b11486d79572866195ba26c630b6784db": "121500000000000000000000", + "0xd56a144d7af0ae8df649abae535a15983aa04d02": "5000000000000000000000", + "0x998c1f93bcdb6ff23c10d0dc924728b73be2ff9f": "1002750000000000000000", + "0xbc62b3096a91e7dc11a1592a293dd2542150d751": "1000000000000000000000", + "0x0c8f66c6017bce5b20347204b602b743bad78d60": "2000000000000000000000", + "0x4c5b3dc0e2b9360f91289b1fe13ce12c0fbda3e1": "2000000000000000000000", + "0xb44605552471a6eee4daab71ff3bb41326d473e0": "839200000000000000000", + "0xfc3d226bb36a58f526568857b0bb12d109ec9301": "2000000000000000000000", + "0xadc8228ef928e18b2a807d00fb3c6c79cd1d9e96": "22800000000000000000", + "0x9df32a501c0b781c0281022f42a1293ffd7b892a": "9000000000000000000000", + "0xe7da609d40cde80f00ce5b4ffb6aa9d0b03494fc": "1000000000000000000000", + "0x9b64d3cd8d2b73f66841b5c46bb695b88a9ab75d": "20769000000000000000", + "0x8e9c08f738661f9676236eff82ba6261dd3f4822": "100000000000000000000", + "0xdeb97254474c0d2f5a7970dcdb2f52fb1098b896": "1000000000000000000000", + "0xb4256273962bf631d014555cc1da0dcc31616b49": "2000000000000000000000", + "0x23abd9e93e7957e5b636be6579051c15e5ce0b0e": "17188400000000000000000", + "0x382591e7217b435e8e884cdbf415fe377a6fe29e": "8022000000000000000000", + "0xf17adb740f45cbbde3094e7e13716f8103f563bd": "2000000000000000000000", + "0x61ed5596c697207f3d55b2a51aa7d50f07fa09e8": "2000000000000000000000", + "0x788e809741a3b14a22a4b1d937c82cfea489eebe": "7000000000000000000000", + "0x992646ac1acaabf5ddaba8f9429aa6a94e7496a7": "1000110000000000000000", + "0x51296f5044270d17707646129c86aad1645eadc1": "1337133000000000000000", + "0x6ee8aad7e0a065d8852d7c3b9a6e5fdc4bf50c00": "20000000000000000000", + "0x30db6b9b107e62102f434a9dd0960c2021f5ce4c": "599742000000000000000", + "0x63fc93001305adfbc9b85d29d9291a05f8f1410b": "1000000000000000000000", + "0xdf6ed6006a6abe886ed33d95a4de28fc12183927": "910000000000000000000", + "0x4745ab181a36aa8cbf2289d0c45165bc7ebe2381": "39400000000000000000", + "0x7bb0fdf5a663b5fba28d9c902af0c811e252f298": "200000000000000000000", + "0xe0ff0bd9154439c4a5b7233e291d7d868af53f33": "396110000000000000000", + "0x09261f9acb451c3788844f0c1451a35bad5098e3": "8664000000000000000000", + "0x2813d263fc5ff2479e970595d6b6b560f8d6d6d1": "2000000000000000000000", + "0x2cd19694d1926a0fa9189edebafc671cf1b2caa5": "1000000000000000000000", + "0x05336e9a722728d963e7a1cf2759fd0274530fca": "915583000000000000000", + "0xe5b7af146986c0ff8f85d22e6cc334077d84e824": "2000000000000000000000", + "0x3e4fbd661015f6461ed6735cefef01f31445de3a": "16200000000000000000000", + "0x4f5df5b94357de948604c51b7893cddf6076baad": "3760000000000000000000", + "0x9567a0de811de6ff095b7ee64e7f1b83c2615b80": "267400000000000000000", + "0x955db3b74360b9a268677e73cea821668af6face": "30000000000000000000000", + "0x3e040d40cb80ba0125f3b15fdefcc83f3005da1b": "1038000000000000000000", + "0x43f470ed659e2991c375957e5ddec5bd1d382231": "100000000000000000000", + "0x047f9bf1529daf87d407175e6f171b5e59e9ff3e": "650000000000000000000", + "0x15e3b584056b62c973cf5eb096f1733e54c15c91": "936702000000000000000", + "0xc03de42a109b657a64e92224c08dc1275e80d9b2": "20000000000000000000", + "0xe4fc13cfcbac1b17ce7783acd423a845943f6b3a": "20000000000000000000", + "0x65ff874fafce4da318d6c93d57e2c38a0d73e820": "1000160000000000000000", + "0x8b997dbc078ad02961355da0a159f2927ed43d64": "197000000000000000000", + "0x2f5080b83f7e2dc0a1dd11b092ad042bff788f4c": "3338355000000000000000", + "0x1b3920d001c43e72b24e7ca46f0fd6e0c20a5ff2": "2000000000000000000000", + "0x5ade77fd81c25c0af713b10702768c1eb2f975e7": "20000000000000000000", + "0xacaaddcbf286cb0e215dda55598f7ff0f4ada5c6": "1000000000000000000000", + "0x64e0217a5b38aa40583625967fa9883690388b6f": "200000000000000000000", + "0xae648155a658370f929be384f7e001047e49dd46": "13561000000000000000000", + "0xf7c1b443968b117b5dd9b755572fcd39ca5ec04b": "456082000000000000000", + "0xde027efbb38503226ed871099cb30bdb02af1335": "1000000000000000000000", + "0x49cf1e54be363106b920729d2d0ba46f0867989a": "268000000000000000000", + "0xe7f4d7fe6f561f7fa1da3005fd365451ad89df89": "200000000000000000000", + "0xb036916bdacf94b69e5a8a65602975eb026104dd": "20000000000000000000", + "0xe923c06177b3427ea448c0a6ff019b54cc548d95": "36281000000000000000", + "0xad927e03d1599a78ca2bf0cad2a183dceb71eac0": "1970000000000000000000", + "0xef39ca9173df15531d73e6b72a684b51ba0f2bb4": "1598000000000000000000", + "0x6443b8ae639de91cf73c5ae763eeeed3ddbb9253": "2000000000000000000000", + "0x8026435aac728d497b19b3e7e57c28c563954f2b": "1730000000000000000000", + "0xed327a14d5cfadd98103fc0999718d7ed70528ea": "1440000000000000000000", + "0x38a3dccf2fcfe0c91a2624bd0cbf88ee4a076c33": "2000000000000000000000", + "0xf0b1f9e27832c6de6914d70afc238c749995ace4": "2000000000000000000000", + "0x770d98d31b4353fceee8560c4ccf803e88c0c4e0": "600000000000000000000", + "0xba1f0e03cb9aa021f4dcebfa94e5c889c9c7bc9e": "32200000000000000000000", + "0x233842b1d0692fd11140cf5acda4bf9630bae5f8": "2000000000000000000000", + "0xb5dd50a15da34968890a53b4f13fe1af081baaaa": "4000000000000000000000", + "0x72072a0ef1cff3d567cdd260e708ddc11cbc9a31": "100000000000000000000", + "0x81a88196fac5f23c3e12a69dec4b880eb7d97310": "2000000000000000000000", + "0x6c63f84556d290bfcd99e434ee9997bfd779577a": "2000000000000000000000", + "0x5f167aa242bc4c189adecb3ac4a7c452cf192fcf": "1999980000000000000000", + "0x445cb8de5e3df520b499efc980f52bff40f55c76": "2000000000000000000000", + "0xaec27ce2133e82d052520afb5c576d9f7eb93ed2": "65232380000000000000000", + "0x07dc2bf83bc6af19a842ffea661af5b41b67fda1": "1500000000000000000000", + "0xfebd48d0ffdbd5656cd5e686363a61145228f279": "2800000000000000000000", + "0xa86db07d9f812f4796622d40e03d135874a88a74": "20000000000000000000", + "0x5413c97ffa4a6e2a7bba8961dc9fce8530a787d7": "1000000000000000000000", + "0xe2ff9ee4b6ecc14141cc74ca52a9e7a2ee14d908": "1400000000000000000000", + "0x2e8eb30a716e5fe15c74233e039bfb1106e81d12": "100000000000000000000", + "0xfd88d114220f081cb3d5e15be8152ab07366576a": "300000000000000000000", + "0xe408fceaa1b98f3c640f48fcba39f056066d6308": "10000000000000000000000", + "0x057dd29f2d19aa3da42327ea50bce86ff5c911d9": "4000000000000000000000", + "0xed1065dbcf9d73c04ffc7908870d881468c1e132": "2000000000000000000000", + "0xbbc9d8112e5beb02dd29a2257b1fe69b3536a945": "2000000000000000000000", + "0x79c1be19711f73bee4e6316ae7549459aacea2e0": "400000000000000000000", + "0x1bcf3441a866bdbe963009ce33c81cbb0261b02c": "182000000000000000000", + "0xe2e26e4e1dcf30d048cc6ecf9d51ec1205a4e926": "4000000000000000000000", + "0x77701e2c493da47c1b58f421b5495dee45bea39b": "6068279000000000000000", + "0x37a05aceb9395c8635a39a7c5d266ae610d10bf2": "30000000000000000000000", + "0xc6355ec4768c70a49af69513cd83a5bca7e3b9cd": "6000000000000000000000", + "0xe3c0c128327a9ad80148139e269773428e638cb0": "2000000000000000000000", + "0xf7f4898c4c526d955f21f055cb6e47b915e51964": "2288000000000000000000", + "0x29824e94cc4348bc963279dcdf47391715324cd3": "1940000000000000000000", + "0xeaa45cea02d87d2cc8fda9434e2d985bd4031584": "1920750000000000000000", + "0xe08b9aba6bd9d28bc2056779d2fbf0f2855a3d9d": "2000000000000000000000", + "0x87c498170934b8233d1ad1e769317d5c475f2f40": "1015200000000000000000", + "0x352d29a26e8a41818181746467f582e6e84012e0": "6000000000000000000000", + "0x403220600a36f73f24e190d1edb2d61be3f41354": "304000000000000000000", + "0x0a48296f7631708c95d2b74975bc4ab88ac1392a": "5000000000000000000000", + "0xffe0e997f1977a615f5a315af413fd4869343ba0": "100076000000000000000", + "0xca66b2280fa282c5b67631ce552b62ee55ad8474": "1969488000000000000000", + "0x2b6ed29a95753c3ad948348e3e7b1a251080ffb9": "250000000000000000000000", + "0x492e70f04d18408cb41e25603730506b35a2876b": "39400000000000000000", + "0x0e6baaa3deb989f289620076668618e9ac332865": "200000000000000000000", + "0xb753a75f9ed10b21643a0a3dc0517ac96b1a4068": "401800000000000000000", + "0x3ad915d550b723415620f5a9b5b88a85f382f035": "1000000000000000000000", + "0xc992be59c6721caf4e028f9e8f05c25c55515bd4": "20000000000000000000", + "0x02b643d6fabd437a851accbe79abb7fde126dccf": "7200000000000000000000", + "0x88797e58675ed5cc4c19980783dbd0c956085153": "2000000000000000000000", + "0xac142eda1157b9a9a64390df7e6ae694fac98905": "200000000000000000000", + "0x656579daedd29370d9b737ee3f5cd9d84bc2b342": "1430000000000000000000", + "0x9bb9b02a26bfe1ccc3f0c6219e261c397fc5ca78": "1337000000000000000000", + "0xbee8d0b008421954f92d000d390fb8f8e658eaee": "1000000000000000000000", + "0x7989d09f3826c3e5af8c752a8115723a84d80970": "415554000000000000000", + "0x7cd5d81eab37e11e6276a3a1091251607e0d7e38": "62856000000000000000", + "0x6ce1b0f6adc47051e8ab38b39edb4186b03babcc": "1207800000000000000000", + "0xabfcf5f25091ce57875fc674dcf104e2a73dd2f2": "19700000000000000000", + "0x1c3ef05dae9dcbd489f3024408669de244c52a02": "20000000000000000000000", + "0xcfa8b37127149bdbfee25c34d878510951ea10eb": "2000000000000000000000", + "0x74863acec75d03d53e860e64002f2c165e538377": "1000000000000000000000", + "0x59b9e733cba4be00429b4bd9dfa64732053a7d55": "20000000000000000000", + "0xaeadfcd0978edad74a32bd01a0a51d37f246e661": "260000000000000000000", + "0x08090876baadfee65c3d363ba55312748cfa873d": "1700170000000000000000", + "0xe589fa76984db5ec4004b46ee8a59492c30744ce": "2800000000000000000000", + "0x3485361ee6bf06ef6508ccd23d94641f814d3e2f": "2000000000000000000000", + "0x5cb731160d2e8965670bde925d9de5510935347d": "40000000000000000000", + "0x8ef4d8a2c23c5279187b64e96f741404085385f3": "299598000000000000000", + "0xe246683cc99db7c4a52bcbacaab0b32f6bfc93d7": "2000000000000000000000", + "0x7d273e637ef1eac481119413b91c989dc5eac122": "500000000000000000000", + "0x6efba8fb2ac5b6730729a972ec224426a287c3ad": "283152000000000000000", + "0x0773eeacc050f74720b4a1bd57895b1cceeb495d": "10000000000000000000000", + "0x88a122a2382c523931fb51a0ccad3beb5b7259c3": "2000000000000000000000", + "0xb0b779b94bfa3c2e1f587bcc9c7e21789222378f": "1550000000000000000000", + "0x86f95c5b11a293940e35c0b898d8b75f08aab06d": "29605000000000000000000", + "0xcf2288ef4ebf88e86db13d8a0e0bf52a056582c3": "2533000000000000000000", + "0x71ea5b11ad8d29b1a4cb67bf58ca6c9f9c338c16": "1600000000000000000000", + "0x9917d68d4af341d651e7f0075c6de6d7144e7409": "5660000000000000000000", + "0x1e5800227d4dcf75e30f5595c5bed3f72e341e3b": "248300000000000000000", + "0x123759f333e13e3069e2034b4f05398918119d36": "20000000000000000000000", + "0xf798d16da4e460c460cd485fae0fa0599708eb82": "1000000000000000000000", + "0x864bec5069f855a4fd5892a6c4491db07c88ff7c": "1000000000000000000000", + "0xfa283299603d8758e8cab082125d2c8f7d445429": "6415633000000000000000", + "0xc811c2e9aa1ac3462eba5e88fcb5120e9f6e2ca2": "1400140000000000000000", + "0x61547d376e5369bcf978fc162c3c56ae453547e8": "200000000000000000000", + "0x0d747ee5969bf79d57381d6fe3a2406cd0d8ce27": "100000000000000000000000", + "0xf8962b75db5d24c7e8b7cef1068c3e67cebb30a5": "280000000000000000000", + "0x35bf6688522f35467a7f75302314c02ba176800e": "17400000000000000000000", + "0x05cb6c3b0072d3116761b532b218443b53e8f6c5": "141722000000000000000000", + "0x91c80caa081b38351d2a0e0e00f80a34e56474c1": "1000000000000000000000", + "0xd75a502a5b677287470f65c5aa51b87c10150572": "907400000000000000000", + "0x3e194b4ecef8bb711ea2ff24fec4e87bd032f7d1": "2575465000000000000000", + "0x736bf1402c83800f893e583192582a134eb532e9": "9999996000000000000000", + "0xc2cb1ada5da9a0423873814793f16144ef36b2f3": "1334326000000000000000", + "0xefcce06bd6089d0e458ef561f5a689480afe7000": "600000000000000000000", + "0xbfe6bcb0f0c07852643324aa5df5fd6225abc3ca": "74500000000000000000", + "0x9d799e943e306ba2e5b99c8a6858cbb52c0cf735": "300000000000000000000", + "0xf45b1dcb2e41dc27ffa024daadf619c11175c087": "19700000000000000000", + "0x08e38ee0ce48c9ca645c1019f73b5355581c56e6": "1600000000000000000000", + "0x2cb4c3c16bb1c55e7c6b7a19b127a1ac9390cc09": "3397053000000000000000", + "0xbdc02cd4330c93d6fbda4f6db2a85df22f43c233": "2000000000000000000000", + "0xacec91ef6941cf630ba9a3e787a012f4a2d91dd4": "80000000000000000000000", + "0x27ac073be79ce657a93aa693ee43bf0fa41fef04": "50000000000000000000000", + "0x22fe884d9037291b4d52e6285ae68dea0be9ffb5": "2000000000000000000000", + "0xc3107a9af3322d5238df0132419131629539577d": "492650000000000000000", + "0xb5cac5ed03477d390bb267d4ebd46101fbc2c3da": "197000000000000000000", + "0x58fb947364e7695765361ebb1e801ffb8b95e6d0": "200000000000000000000", + "0x32860997d730b2d83b73241a25d3667d51c908ef": "499938000000000000000", + "0xc79d5062c796dd7761f1f13e558d73a59f82f38b": "8000000000000000000000", + "0xfa142fe47eda97e6503b386b18a2bedd73ccb5b1": "850080000000000000000", + "0x6ca5de00817de0cedce5fd000128dede12648b3c": "20000000000000000000", + "0x214b743955a512de6e0d886a8cbd0282bee6d2a2": "2000000000000000000000", + "0xede79ae1ff4f1606d59270216fa46ab2ddd4ecaa": "146000000000000000000", + "0x528101ce46b720a2214dcdae6618a53177ffa377": "508876000000000000000", + "0xb5870ce342d43343333673038b4764a46e925f3e": "1000000000000000000000", + "0x843bd3502f45f8bc4da370b323bdac3fcf5f19a6": "1476000000000000000000", + "0x5067f4549afbfe884c59cbc12b96934923d45db0": "1000000000000000000000", + "0x6f2a42e6e033d01061131929f7a6ee1538021e52": "2000000000000000000000", + "0xe9e1f7cb00a110edd0ebf8b377ef8a7bb856117f": "200000000000000000000", + "0xa387ecde0ee4c8079499fd8e03473bd88ad7522a": "1970000000000000000000", + "0x6dff90e6dc359d2590882b1483edbcf887c0e423": "1000000000000000000000", + "0x22e512149a18d369b73c71efa43e86c9edabaf1d": "1455000000000000000000", + "0xa3203095edb7028e6871ce0a84f548459f83300a": "4000000000000000000000", + "0x93b4bf3fdff6de3f4e56ba6d7799dc4b93a6548f": "19100000000000000000", + "0x8c75956e8fed50f5a7dd7cfd27da200f6746aea6": "1000000000000000000000", + "0xafc8ebe8988bd4105acc4c018e546a1e8f9c7888": "500000000000000000000", + "0xbf9acd4445d9c9554689cabbbab18800ff1741c2": "1000000000000000000000", + "0x603f2fab7afb6e017b94766069a4b43b38964923": "1656954000000000000000", + "0xa1f765c44fe45f790677944844be4f2d42165fbd": "3687750000000000000000", + "0x4dc9d5bb4b19cecd94f19ec25d200ea72f25d7ed": "2000000000000000000000", + "0x48f60a35484fe7792bcc8a7b6393d0dda1f6b717": "3600000000000000000000", + "0x588ed990a2aff44a94105d58c305257735c868ac": "16100000000000000000000", + "0x710be8fd5e2918468be2aabea80d828435d79612": "17600000000000000000", + "0x03ea6d26d080e57aee3926b18e8ed73a4e5b2826": "200000000000000000000", + "0x20824ba1dbebbef9846ef3d0f6c1b017e6912ec4": "7170194000000000000000", + "0xf7500c166f8bea2f82347606e5024be9e4f4ce99": "20000000000000000000", + "0x9d369165fb70b81a3a765f188fd60cbe5e7b0968": "2000000000000000000000", + "0x6fddbd9bca66e28765c2162c8433548c1052ed11": "82720000000000000000000", + "0x8b81156e698639943c01a75272ad3d35851ab282": "344946000000000000000", + "0x75804aac64b4199083982902994d9c5ed8828f11": "557800000000000000000", + "0xd6e8e97ae9839b9ee507eedb28edfb7477031439": "2000000000000000000000", + "0x6c808cabb8ff5fbb6312d9c8e84af8cf12ef0875": "4000086000000000000000", + "0xafa539586e4719174a3b46b9b3e663a7d1b5b987": "5000000000000000000000", + "0xf8a065f287d91d77cd626af38ffa220d9b552a2b": "1910000000000000000000", + "0x30e60900cacc7203f314dc604347255167fc2a0f": "2000000000000000000000", + "0x796f87ba617a2930b1670be92ed1281fb0b346e1": "128400000000000000000", + "0xf114ff0d0f24eff896edde5471dea484824a99b3": "13700000000000000000", + "0x0b80fc70282cbdd5fde35bf78984db3bdb120188": "1000160000000000000000", + "0xda7ad025ebde25d22243cb830ea1d3f64a566323": "500000000000000000000", + "0x65a52141f56bef98991724c6e7053381da8b5925": "60140000000000000000", + "0xbbc8eaff637e94fcc58d913c7770c88f9b479277": "200000000000000000000", + "0x0469e8c440450b0e512626fe817e6754a8152830": "2000000000000000000000", + "0x0727be0a2a00212048b5520fbefb953ebc9d54a0": "10000000000000000000000", + "0x7d858493f07415e0912d05793c972113eae8ae88": "1818000000000000000000", + "0x7091303116d5f2389b23238b4d656a8596d984d3": "1094014000000000000000", + "0x3702e704cc21617439ad4ea27a5714f2fda1e932": "1000000000000000000000", + "0xb87de1bcd29269d521b8761cc39cfb4319d2ead5": "1000000000000000000000", + "0xf639ac31da9f67271bd10402b7654e5ce763bd47": "399996000000000000000", + "0xe7735ec76518fc6aa92da8715a9ee3f625788f13": "1997803000000000000000", + "0x51277fe7c81eebd252a03df69a6b9f326e272207": "59965000000000000000", + "0x3b8098533f7d9bdcd307dbb23e1777ca18418936": "2000000000000000000000", + "0x2cba6d5d0dc204ea8a25ada2e26f5675bd5f2fdc": "1330755000000000000000", + "0x5c3c1c645b917543113b3e6c1c054da1fe742b9a": "800000000000000000000", + "0x5ecdbaeab9106ffe5d7b519696609a05baeb85ad": "20000000000000000000", + "0x45a820a0672f17dc74a08112bc643fd1167736c3": "199943000000000000000", + "0xbeef94213879e02622142bea61290978939a60d7": "5728109000000000000000", + "0x6cd212aee04e013f3d2abad2a023606bfb5c6ac7": "1999944000000000000000", + "0x92698e345378c62d8eda184d94366a144b0c105b": "1400000000000000000000", + "0x2d5b42fc59ebda0dfd66ae914bc28c1b0a6ef83a": "206764195000000000000000", + "0xb7a6791c16eb4e2162f14b6537a02b3d63bfc602": "780700000000000000000", + "0xfa105f1a11b6e4b1f56012a27922e2ac2da4812f": "9550000000000000000000", + "0x2306df931a940d58c01665fa4d0800802c02edfe": "1000000000000000000000", + "0xf37bf78c5875154711cb640d37ea6d28cfcb1259": "200000000000000000000", + "0x66201bd227ae6dc6bdfed5fbde811fecfe5e9dd9": "594808000000000000000", + "0x2bafbf9e9ed2c219f7f2791374e7d05cb06777e7": "220000000000000000000", + "0x8e9b35ad4a0a86f758446fffde34269d940ceacd": "4000000000000000000000", + "0x1b43232ccd4880d6f46fa751a96cd82473315841": "80000000000000000000", + "0x6eefdc850e87b715c72791773c0316c3559b58a4": "4000000000000000000000", + "0xf2c03e2a38998c21648760f1e5ae7ea3077d8522": "2642456000000000000000", + "0x0625d06056968b002206ff91980140242bfaa499": "1000000000000000000000", + "0x6158e107c5eb54cb7604e0cd8dc1e07500d91c3c": "50000000000000000000", + "0x02477212ffdd75e5155651b76506b1646671a1eb": "1760000000000000000000", + "0xfa44a855e404c86d0ca8ef3324251dfb349c539e": "1552000000000000000000", + "0x49897fe932bbb3154c95d3bce6d93b6d732904dd": "4000000000000000000000", + "0x9b6641b13e172fc072ca4b8327a3bc28a15b66a9": "120000000000000000000", + "0xa46b4387fb4dcce011e76e4d73547d4481e09be5": "1337000000000000000000", + "0x72bb27cb99f3e2c2cf90a98f707d30e4a201a071": "1640000000000000000000", + "0xb6bfe1c3ef94e1846fb9e3acfe9b50c3e9069233": "1999944000000000000000", + "0xe6cb3f3124c9c9cc3834b1274bc3336456a38bac": "427382000000000000000", + "0xfcbc5c71ace79741450b012cf6b8d3f17db68a70": "9550000000000000000000", + "0x15dbb48c98309764f99ced3692dcca35ee306bac": "150000000000000000000000", + "0x2e10910ba6e0bc17e055556614cb87090f4d7e5b": "200000000000000000000", + "0xe5fbe34984b637196f331c679d0c0c47d83410e1": "2000050000000000000000", + "0x6d120f0caae44fd94bcafe55e2e279ef96ba5c7a": "4000000000000000000000", + "0xaa5afcfd8309c2df9d15be5e6a504e7d706624c5": "5846763000000000000000", + "0x37959c20b7e9931d72f5a8ae869dafddad3b6d5c": "200000000000000000000", + "0xb041310fe9eed6864cedd4bee58df88eb4ed3cac": "10000000000000000000000", + "0x986df47e76e4d7a789cdee913cc9831650936c9d": "5000000000000000000000", + "0x35aaa0465d1c260c420fa30e2629869fb6559207": "704976000000000000000", + "0x7f655c6789eddf455cb4b88099720639389eebac": "6000000000000000000000", + "0x9e3eb509278fe0dcd8e0bbe78a194e06b6803943": "940000000000000000000", + "0x3e9410d3b9a87ed5e451a6b91bb8923fe90fb2b5": "200000000000000000000", + "0x9e960dcd03d5ba99cb115d17ff4c09248ad4d0be": "200000000000000000000", + "0xf057aa66ca767ede124a1c5b9cc5fc94ef0b0137": "2077730000000000000000", + "0xf38a6ca80168537e974d14e1c3d13990a44c2c1b": "6000000000000000000000", + "0x229e430de2b74f442651ddcdb70176bc054cad54": "13545000000000000000", + "0x27bf9f44ba7d05c33540c3a53bb02cbbffe7c3c6": "2000000000000000000000", + "0x10389858b800e8c0ec32f51ed61a355946cc409b": "200000000000000000000", + "0xfd2929271e9d2095a264767e7b0df52ea0d1d400": "3000040000000000000000", + "0x44250d476e062484e9080a3967bf3a4a732ad73f": "20000000000000000000", + "0x0c67033dd8ee7f0c8ae534d42a51f7d9d4f7978f": "200000000000000000000", + "0xe083d34863e0e17f926b7928edff317e998e9c4b": "400000000000000000000", + "0x7f7192c0df1c7db6d9ed65d71184d8e4155a17ba": "79800000000000000000", + "0x51e7b55c2f9820eed73884361b5066a59b6f45c6": "2000000000000000000000", + "0x4fa983bb5e3073a8edb557effeb4f9fb1d60ef86": "1599800000000000000000", + "0x5a5ee8e9bb0e8ab2fecb4b33d29478be50bbd44b": "776000000000000000000", + "0x1f3959fc291110e88232c36b7667fc78a379613f": "18200000000000000000", + "0x2d7d5c40ddafc450b04a74a4dabc2bb5d665002e": "2000000000000000000000", + "0x5215183b8f80a9bc03d26ce91207832a0d39e620": "1000000000000000000000", + "0x5607590059a9fec1881149a44b36949aef85d560": "2000000000000000000000", + "0xf7c50f922ad16b61c6d1baa045ed816815bac48f": "12566370000000000000000", + "0xda10978a39a46ff0bb848cf65dd9c77509a6d70e": "2000000000000000000000", + "0xa7dcbba9b9bf6762c145416c506a71e3b497209c": "1999944000000000000000", + "0x54e01283cc8b384538dd646770b357c960d6cacd": "5000000000000000000000", + "0x78cf8336b328db3d87813a472b9e89b75e0cf3bc": "1000000000000000000000", + "0xba24fc436753a739db2c8d40e6d4d04c528e86fa": "13000000000000000000000", + "0xdfe929a61c1b38eddbe82c25c2d6753cb1e12d68": "402500000000000000000", + "0x2b49fba29830360fcdb6da23bbfea5c0bbac5281": "20000000000000000000", + "0x76becae4a31d36f3cb577f2a43594fb1abc1bb96": "24860000000000000000000", + "0xe0cf698a053327ebd16b7d7700092fe2e8542446": "95275000000000000000", + "0xa3802d8a659e89a2c47e905430b2a827978950a7": "1000000000000000000000", + "0x75636cdb109050e43d5d6ec47e359e218e857eca": "22886800000000000000000", + "0x3d813ff2b6ed57b937dabf2b381d148a411fa085": "100000000000000000000", + "0xa9252551a624ae513719dabe5207fbefb2fd7749": "40000000000000000000", + "0xc749668042e71123a648975e08ed6382f83e05e2": "14000000000000000000000", + "0x04eca501630abce35218b174956b891ba25efb23": "1000060000000000000000", + "0x790f91bd5d1c5cc4739ae91300db89e1c1303c93": "2000000000000000000000", + "0x009560a3de627868f91fa8bfe1c1b7afaf08186b": "524000000000000000000", + "0x1329dd19cd4baa9fc64310efeceab22117251f12": "200000000000000000000", + "0x7005a772282b1f62afda63f89b5dc6ab64c84cb9": "18000000000000000000000", + "0xabfe936425dcc7b74b955082bbaaf2a11d78bc05": "1400000000000000000000", + "0x97d0d9725e3b70e675843173938ed371b62c7fac": "170000000000000000000", + "0x41ed2d8e7081482c919fc23d8f0091b3c82c4685": "1295460000000000000000", + "0x992365d764c5ce354039ddfc912e023a75b8e168": "18200000000000000000", + "0xe1c607c0a8a060da8f02a8eb38a013ea8cda5b8c": "805000000000000000000", + "0x3b2c45990e21474451cf4f59f01955b331c7d7c9": "2000000000000000000000", + "0x29ac2b458454a36c7e96c73a8667222a12242c71": "4000000000000000000000", + "0xb8555010776e3c5cb311a5adeefe9e92bb9a64b9": "4000000000000000000000", + "0x30380087786965149e81423b15e313ba32c5c783": "18200000000000000000", + "0xa2f86bc061884e9eef05640edd51a2f7c0596c69": "2000050000000000000000", + "0x9f98eb34d46979b0a6de8b05aa533a89b825dcf1": "86500000000000000000", + "0xc81fb7d20fd2800192f0aac198d6d6a37d3fcb7d": "259500000000000000000", + "0xa4035ab1e5180821f0f380f1131b7387c8d981cd": "20000000000000000000", + "0x782f52f0a676c77716d574c81ec4684f9a020a97": "850055000000000000000", + "0x261e0fa64c51137465eecf5b90f197f7937fdb05": "18000000000000000000000", + "0x276fd7d24f8f883f5a7a28295bf17151c7a84b03": "2000000000000000000000", + "0xa1f5b840140d5a9acef402ac3cc3886a68cad248": "2000000000000000000000", + "0xd2bf67a7f3c6ce56b7be41675dbbadfe7ea93a33": "400000000000000000000", + "0x8ee584337ddbc80f9e3498df55f0a21eacb57fb1": "20000000000000000000", + "0x34393c5d91b9de597203e75bac4309b5fa3d28c3": "194000000000000000000", + "0x114cbbbf6fb52ac414be7ec61f7bb71495ce1dfa": "3000000000000000000000", + "0xab7c42c5e52d641a07ad75099c62928b7f86622f": "335940000000000000000", + "0x80bf995ed8ba92701d10fec49f9e7d014dbee026": "572153000000000000000", + "0x4a192035e2619b24b0709d56590e9183ccf2c1d9": "10000000000000000000000", + "0x376cd7577383e902951b60a2017ba7ea29e33576": "2000000000000000000000", + "0xf5437e158090b2a2d68f82b54a5864b95dd6dbea": "4010732000000000000000", + "0x13a5eecb38305df94971ef2d9e179ae6cebab337": "330000000000000000000", + "0xefc8cf1963c9a95267b228c086239889f4dfd467": "10000000000000000000000", + "0xdb77b88dcb712fd17ee91a5b94748d720c90a994": "2000000000000000000000", + "0x9aaafa0067647ed999066b7a4ca5b4b3f3feaa6f": "1000000000000000000000", + "0xae36f7452121913e800e0fcd1a65a5471c23846f": "164000000000000000000", + "0xb124bcb6ffa430fcae2e86b45f27e3f21e81ee08": "2000000000000000000000", + "0xf2813a64c5265d020235cb9c319b6c96f906c41e": "350000000000000000000", + "0xe848ca7ebff5c24f9b9c316797a43bf7c356292d": "114000000000000000000", + "0x21a6feb6ab11c766fdd977f8df4121155f47a1c0": "57200000000000000000", + "0xe95e92bbc6de07bf3a660ebf5feb1c8a3527e1c5": "18200000000000000000", + "0x0b369e002e1b4c7913fcf00f2d5e19c58165478f": "64520000000000000000", + "0x0909648c18a3ce5bae7a047ec2f868d24cdda81d": "3820000000000000000000", + "0xd32b45564614516c91b07fa9f72dcf787cce4e1c": "291000000000000000000", + "0xcf1bdb799b2ea63ce134668bdc198b54840f180b": "18200000000000000000", + "0xae062c448618643075de7a0030342dced63dbad7": "825982000000000000000", + "0x99dfd0504c06c743e46534fd7b55f1f9c7ec3329": "2000000000000000000000", + "0x87fc4635263944ce14a46c75fa4a821f39ce7f72": "20000000000000000000", + "0x27c2d7ca504daa3d9066dc09137dc42f3aaab452": "600000000000000000000", + "0xcc60f836acdef3548a1fefcca13ec6a937db44a0": "86500000000000000000", + "0xc910a970556c9716ea53af66ddef93143124913d": "1580000000000000000000", + "0x8173c835646a672e0152be10ffe84162dd256e4c": "492000000000000000000", + "0xe989733ca1d58d9e7b5029ba5d444858bec03172": "581595000000000000000", + "0x86806474c358047d9406e6a07f40945bc8328e67": "6884000000000000000000", + "0x5395a4455d95d178b4532aa4725b193ffe512961": "1000000000000000000000", + "0x56397638bb3cebf1f62062794b5eb942f916171d": "2000000000000000000000", + "0x6958f83bb2fdfb27ce0409cd03f9c5edbf4cbedd": "20000000000000000000000", + "0x26ff0a51e7cece8400276978dbd6236ef162c0e6": "100020000000000000000000", + "0x4ca783b556e5bf53aa13c8116613d65782c9b642": "25200000000000000000000", + "0x15a0aec37ff9ff3d5409f2a4f0c1212aaccb0296": "1000000000000000000000", + "0x50378af7ef54043f892ab7ce97d647793511b108": "19700000000000000000", + "0xe7c6b5fc05fc748e5b4381726449a1c0ad0fb0f1": "2000000000000000000000", + "0x5317ecb023052ca7f5652be2fa854cfe4563df4d": "499986000000000000000", + "0xc94f7c35c027d47df8ef4f9df85a9248a17dd23b": "29944000000000000000", + "0x6a63fc89abc7f36e282d80787b7b04afd6553e71": "160000000000000000000", + "0x5fd3d6777ec2620ae83a05528ed425072d3ca8fd": "2000000000000000000000", + "0x29adcf83b6b20ac6a434abb1993cbd05c60ea2e4": "10000000000000000000000", + "0x8c6f9f4e5b7ae276bf58497bd7bf2a7d25245f64": "2730000000000000000000", + "0xd94a57882a52739bbe2a0647c80c24f58a2b4f1c": "1341230000000000000000", + "0x7286e89cd9de8f7a8a00c86ffdb53992dd9251d1": "1940000000000000000000", + "0x5773b6026721a1dd04b7828cd62b591bfb34534c": "27000000000000000000000", + "0x11fefb5dc1a4598aa712640c517775dfa1d91f8c": "10000000000000000000000", + "0xc6e324beeb5b36765ecd464260f7f26006c5c62e": "2000000000000000000000", + "0x118fbd753b9792395aef7a4d78d263cdcaabd4f7": "999800000000000000000", + "0xf8298591523e50b103f0b701d623cbf0f74556f6": "200000000000000000000", + "0xab0ced762e1661fae1a92afb1408889413794825": "1910000000000000000000", + "0xfa67b67b4f37a0150915110ede073b05b853bda2": "647490000000000000000", + "0xca122cf0f2948896b74843f49afed0ba1618eed7": "560000000000000000000", + "0x186b95f8e5effddcc94f1a315bf0295d3b1ea588": "1999944000000000000000", + "0x2915624bcb679137b8dae9ab57d11b4905eaee4b": "20000000000000000000", + "0x0c6845bf41d5ee273c3ee6b5b0d69f6fd5eabbf7": "3000026000000000000000", + "0xcb7479109b43b26657f4465f4d18c6f974be5f42": "1820000000000000000000", + "0x8dd6a9bae57f518549ada677466fea8ab04fd9b4": "4000000000000000000000", + "0x34958a46d30e30b273ecc6e5d358a212e5307e8c": "2000000000000000000000", + "0x2003717907a72560f4307f1beecc5436f43d21e7": "500000000000000000000", + "0x55ab99b0e0e55d7bb874b7cfe834de631c97ec23": "1031400000000000000000", + "0x79b48d2d6137c3854d611c01ea42427a0f597bb7": "191000000000000000000", + "0xd609ec0be70d0ad26f6e67c9d4762b52ee51122c": "1000000000000000000000", + "0xe8c3f045bb7d38c9d2f395b0ba8492b253230901": "9000000000000000000000", + "0xaaca60d9d700e78596bbbbb1f1e2f70f4627f9d8": "999996000000000000000", + "0x89d75b8e0831e46f80bc174188184e006fde0eae": "1000000000000000000000", + "0xb3667894b7863c068ad344873fcff4b5671e0689": "20000000000000000000000", + "0xbc1609d685b76b48ec909aa099219022f89b2ccd": "1182000000000000000000", + "0x88ee7f0efc8f778c6b687ec32be9e7d6f020b674": "2000000000000000000000", + "0x470ac5d1f3efe28f3802af925b571e63868b397d": "2000000000000000000000", + "0xabf8ffe0708a99b528cc1ed4e9ce4b0d0630be8c": "2263600000000000000000", + "0x8cee38d6595788a56e3fb94634b3ffe1fbdb26d6": "20000000000000000000000", + "0x19798cbda715ea9a9b9d6aab942c55121e98bf91": "1200000000000000000000", + "0xe25a167b031e84616d0f013f31bda95dcc6350b9": "10560000000000000000000", + "0x6196c3d3c0908d254366b7bca55745222d9d4db1": "4000000000000000000000", + "0xe8e9850586e94f5299ab494bb821a5f40c00bd04": "3820000000000000000000", + "0x1059cbc63e36c43e88f30008aca7ce058eeaa096": "100000000000000000000000", + "0xc4f2913b265c430fa1ab8adf26c333fc1d9b66f2": "20000000000000000000", + "0x26e9e2ad729702626417ef25de0dc800f7a779b3": "1000000000000000000000", + "0x0dfbd4817050d91d9d625c02053cf61a3ee28572": "340000000000000000000", + "0x709fe9d2c1f1ce42207c9585044a60899f35942f": "2000000000000000000000", + "0x7ad82caea1a8b4ed05319b9c9870173c814e06ee": "616000000000000000000", + "0x2a595f16eee4cb0c17d9a2d939b3c10f6c677243": "1100000000000000000000", + "0xa8f89dd5cc6e64d7b1eeace00702022cd7d2f03d": "700000000000000000000", + "0xc0a6cbad77692a3d88d141ef769a99bb9e3c9951": "100000000000000000000", + "0x868c23be873466d4c74c220a19b245d1787e807f": "1366481000000000000000", + "0x2905b192e83ce659aa355b9d0c204e3e95f9bb9a": "2160817000000000000000", + "0x50b9fef0a1329b02d16506255f5a2db71ec92d1f": "1325464000000000000000", + "0xfc10b7a67b3268d5331bfb6a14def5ea4a162ca3": "200000000000000000000", + "0x85eb256b51c819d60ea61a82d12c9358d59c1cae": "460000000000000000000", + "0x75de7e9352e90b13a59a5878ffecc7831cac4d82": "2740000000000000000000", + "0xd32b2c79c36478c5431901f6d700b04dbe9b8810": "396000000000000000000", + "0x2d0326b23f0409c0c0e9236863a133075a94ba18": "210380000000000000000", + "0xd2e21ed56868fab28e0947927adaf29f23ebad6c": "1994000000000000000000", + "0x2ad6c9d10c261819a1a0ca2c48d8c7b2a71728df": "1000000000000000000000", + "0x7d445267c59ab8d2a2d9e709990e09682580c49f": "1000000000000000000000", + "0xb6047cdf932db3e4045f4976122341537ed5961e": "20000000000000000000", + "0x2b3cf97311ff30f460945a9d8099f4a88e26d456": "2000000000000000000000", + "0x7f4f593b618c330ba2c3d5f41eceeb92e27e426c": "2775000000000000000000", + "0x72a2fc8675feb972fa41b50dffdbbae7fa2adfb7": "2853840000000000000000", + "0x076561a856455d7ef86e63f87c73dbb628a55f45": "900000000000000000000", + "0x03d1724fd00e54aabcd2de2a91e8462b1049dd3a": "2640000000000000000000", + "0x7ea0f96ee0a573a330b56897761f3d4c0130a8e3": "1337000000000000000000", + "0xfe65c4188d7922576909642044fdc52395560165": "4000000000000000000000", + "0x57883010b4ac857fedac03eab2551723a8447ffb": "1000000000000000000000", + "0x0729a8a4a5ba23f579d0025b1ad0f8a0d35cdfd2": "9700000000000000000000", + "0xe75c1fb177089f3e58b1067935a6596ef1737fb5": "99910000000000000000", + "0xe0e978753d982f7f9d1d238a18bd4889aefe451b": "9700000000000000000000", + "0x5620f46d1451c2353d6243a5d4b427130be2d407": "60000000000000000000", + "0xf3d688f06bbdbf50f9932c4145cbe48ecdf68904": "20000000000000000000", + "0x3aa948ea02397755effb2f9dc9392df1058f7e33": "850000000000000000000", + "0x20d1417f99c569e3beb095856530fe12d0fceaaa": "1182175000000000000000", + "0xac77bdf00fd5985b5db12bbef800380abc2a0677": "1000000000000000000000", + "0x267a7e6e82e1b91d51deddb644f0e96dbb1f7f7e": "20000000000000000000", + "0x4bbcbf38b3c90163a84b1cd2a93b58b2a3348d87": "8000000000000000000000", + "0x4c6b93a3bec16349540cbfcae96c9621d6645010": "2000000000000000000000", + "0xc9308879056dfe138ef8208f79a915c6bc7e70a8": "10000000000000000000000", + "0xc48b693cacefdbd6cb5d7895a42e3196327e261c": "1000000000000000000000", + "0xa0951970dfd0832fb83bda12c23545e79041756c": "600000000000000000000", + "0x7cdf74213945953db39ad0e8a9781add792e4d1d": "2000000000000000000000", + "0x75621865b6591365606ed378308c2d1def4f222c": "3100000000000000000000", + "0x67d6a8aa1bf8d6eaf7384e993dfdf10f0af68a61": "198067000000000000000", + "0x8f0af37566d152802f1ae8f928b25af9b139b448": "200000000000000000000", + "0x2c6afcd4037c1ed14fa74ff6758e0945a185a8e8": "17600000000000000000", + "0xc1b2aa8cb2bf62cdc13a47ecc4657facaa995f98": "1000129000000000000000", + "0x9e8144e08e89647811fe6b72d445d6a5f80ad244": "10000000000000000000000", + "0xe04ff5e5a7e2af995d8857ce0290b53a2b0eda5d": "1000000000000000000000", + "0x03dedfcd0b3c2e17c705da248790ef98a6bd5751": "1337000000000000000000", + "0x698a8a6f01f9ab682f637c7969be885f6c5302bf": "19400000000000000000", + "0xd82c6fedbdac98af2eed10b00f32b00056ca5a6d": "200000000000000000000", + "0x2697b339813b0c2d964b2471eb1c606f4ecb9616": "1154000000000000000000", + "0x987c9bcd6e3f3990a52be3eda4710c27518f4f72": "400000000000000000000", + "0xc5d48ca2db2f85d8c555cb0e9cfe826936783f9e": "200000000000000000000", + "0xda214c023e2326ff696c00393168ce46ffac39ec": "1000000000000000000000", + "0x86570ab259c9b1c32c9729202f77f590c07dd612": "200000000000000000000", + "0xa646a95c6d6f59f104c6541d7760757ab392b08c": "4200000000000000000000", + "0x1933e334c40f3acbad0c0b851158206924beca3a": "7551541000000000000000", + "0x3552a496eba67f12be6eedab360cd13661dc7480": "300000000000000000000", + "0x2a9c96c19151ffcbe29a4616d0c52b3933b4659f": "69263000000000000000", + "0x3b7b8e27de33d3ce7961b98d19a52fe79f6c25be": "100000000000000000000000", + "0xa1911405cf6e999ed011f0ddcd2a4ff7c28f2526": "40000000000000000000", + "0x0cae108e6db99b9e637876b064c6303eda8a65c8": "3000000000000000000000", + "0x3883becc08b9be68ad3b0836aac3b620dc0017ef": "2000000000000000000000", + "0xd0abcc70c0420e0e172f97d43b87d5e80c336ea9": "10000000000000000000000", + "0xcbf16a0fe2745258cd52db2bf21954c975fc6a15": "300000000000000000000", + "0x1b23cb8663554871fbbe0d9e60397efb6faedc3e": "200000000000000000000", + "0xfbede32c349f3300ef4cd33b4de7dc18e443d326": "3160000000000000000000", + "0x5e806e845730f8073e6cc9018ee90f5c05f909a3": "9480000000000000000000", + "0x425c338a1325e3a1578efa299e57d986eb474f81": "2000000000000000000000", + "0x8bf297f8f453523ed66a1acb7676856337b93bf0": "4000000000000000000000", + "0x38e8a31af2d265e31a9fff2d8f46286d1245a467": "20000000000000000000", + "0x7edafba8984baf631a820b6b92bbc2c53655f6bd": "2000000000000000000000", + "0xaa0200f1d17e9c54da0647bb96395d57a78538d8": "1056000000000000000000", + "0x433eb94a339086ed12d9bde9cd1d458603c97dd6": "100000000000000000000000", + "0xcd7e47909464d871b9a6dc76a8e9195db3485e7a": "9850000000000000000000", + "0x5975d78d974ee5bb9e4d4ca2ae77c84b9c3b4b82": "1370000000000000000000", + "0xcea2896623f4910287a2bdc5be83aea3f2e6de08": "9359000000000000000000", + "0xcb4ad0c723da46ab56d526da0c1d25c73daff10a": "510000000000000000000", + "0xe2cf360aa2329eb79d2bf7ca04a27a17c532e4d8": "102000000000000000000", + "0xea60549ec7553f511d2149f2d4666cbd9243d93c": "2000000000000000000000", + "0xcbb7be17953f2ccc93e1bc99805bf45511434e4c": "50440000000000000000000", + "0x3549bd40bbbc2b30095cac8be2c07a0588e0aed6": "20000000000000000000", + "0x6510df42a599bcb0a519cca961b488759a6f6777": "2000000000000000000000", + "0xed12a1ba1fb8adfcb20dfa19582e525aa3b74524": "6685000000000000000000", + "0x135eb8c0e9e101deedec11f2ecdb66ae1aae8867": "20000000000000000000000", + "0xee906d7d5f1748258174be4cbc38930302ab7b42": "200000000000000000000", + "0x253f1e742a2cec86b0d7b306e5eacb6ccb2f8554": "20040000000000000000000", + "0xecd1a62802351a41568d23033004acc6c005a5d3": "50000000000000000000", + "0x558c54649a8a6e94722bd6d21d14714f71780534": "2000000000000000000000", + "0xca657ec06fe5bc09cf23e52af7f80cc3689e6ede": "900000000000000000000", + "0x74bf7a5ab59293149b5c60cf364263e5ebf1aa0d": "115800000000000000000", + "0x7a6d781c77c4ba1fcadf687341c1e31799e93d27": "274000000000000000000", + "0x77028e409cc43a3bd33d21a9fc53ec606e94910e": "3880000000000000000000", + "0x4781a10a4df5eebc82f4cfe107ba1d8a7640bd66": "1790000000000000000000", + "0x78e08bc533413c26e291b3143ffa7cc9afb97b78": "200000000000000000000", + "0x03ef6ad20ff7bd4f002bac58d47544cf879ae728": "6895000000000000000000", + "0x0e3696cf1f4217b163d1bc12a5ea730f1c32a14a": "4000000000000000000000", + "0x825135b1a7fc1605614c8aa4d0ac6dbad08f480e": "1430000000000000000000", + "0x286b186d61ea1fd78d9930fe12b06537b05c3d51": "1000000000000000000000", + "0x8d6657f59711b1f803c6ebef682f915b62f92dc9": "2000000000000000000000", + "0xda8bbee182e455d2098acb338a6d45b4b17ed8b6": "2000000000000000000000", + "0x3f2da093bb16eb064f8bfa9e30b929d15f8e1c4c": "2000000000000000000000", + "0xf5d9cf00d658dd45517a48a9d3f5f633541a533d": "116400000000000000000", + "0xc5f64babb7033142f20e46d7aa6201ed86f67103": "2000000000000000000000", + "0xa2e2b5941e0c01944bfe1d5fb4e8a34b922ccfb1": "200000000000000000000", + "0x6114b0eae5576903f80bfb98842d24ed92237f1e": "100000000000000000000", + "0x38df0c4abe7ded5fe068eadf154ac691774324a4": "1790000000000000000000", + "0x1c2010bd662df417f2a271879afb13ef4c88a3ae": "4000000000000000000000", + "0x918967918cd897dd0005e36dc6c883ef438fc8c7": "140000000000000000000", + "0xa522de7eb6ae1250522a513133a93bd42849475c": "20000000000000000000000", + "0x7de442c82386154d2e993cbd1280bb7ca6b12ada": "4002000000000000000000", + "0x66424bd8785b8cb461102a900283c35dfa07ef6a": "40221000000000000000", + "0x7bbbec5e70bdead8bb32b42805988e9648c0aa97": "1000076000000000000000", + "0xfec06fe27b44c784b2396ec92f7b923ad17e9077": "2000000000000000000000", + "0x95d550427b5a514c751d73a0f6d29fb65d22ed10": "300000000000000000000", + "0x8dde60eb08a099d7daa356daaab2470d7b025a6b": "197000000000000000000", + "0x81bccbff8f44347eb7fca95b27ce7c952492aaad": "152240000000000000000", + "0x3995e096b08a5a726800fcd17d9c64c64e088d2b": "200000000000000000000", + "0x4ee13c0d41200b46d19dee5c4bcec71d82bb8e38": "7893915000000000000000", + "0xc41461a3cfbd32c9865555a4813137c076312360": "999999000000000000000", + "0x3300fb149aded65bcba6c04e9cd6b7a03b893bb1": "18200000000000000000", + "0x29f9286c0e738d1721a691c6b95ab3d9a797ede8": "200000000000000000000000", + "0x34c8e5f1330fcb4b14ca75cb2580a4b93d204e36": "2000000000000000000000", + "0xec5df227bfa85d7ad76b426e1cee963bc7f519dd": "1000000000000000000000", + "0x797510e386f56393ced8f477378a444c484f7dad": "1000000000000000000000", + "0x0191eb547e7bf6976b9b1b577546761de65622e2": "1999980000000000000000", + "0x615a6f36777f40d6617eb5819896186983fd3731": "5910000000000000000000", + "0x17580b766f7453525ca4c6a88b01b50570ea088c": "100000000000000000000", + "0x945d96ea573e8df7262bbfa572229b4b16016b0f": "209300000000000000000", + "0x2de0964400c282bdd78a919c6bf77c6b5f796179": "200000000000000000000", + "0x304ec69a74545721d7316aef4dcfb41ac59ee2f0": "200000000000000000000", + "0xbe2b326e78ed10e550fee8efa8f8070396522f5a": "39400000000000000000000", + "0x1a0841b92a7f7075569dc4627e6b76cab05ade91": "1520000000000000000000", + "0x5fa61f152de6123516c751242979285f796ac791": "204000000000000000000", + "0x68c8791dc342c373769ea61fb7b510f251d32088": "1000000000000000000000", + "0x4167cd48e733418e8f99ffd134121c4a4ab278c4": "3640000000000000000000", + "0x598aaabae9ed833d7bc222e91fcaa0647b77580b": "1800000000000000000000", + "0x979f30158b574b999aab348107b9eed85b1ff8c1": "970000000000000000000", + "0x3ad06149b21c55ff867cc3fb9740d2bcc7101231": "197000000000000000000000", + "0x7133843a78d939c69d4486e10ebc7b602a349ff7": "329000000000000000000", + "0x8bdfda6c215720eda2136f91052321af4e936c1f": "1000008000000000000000", + "0x3e1c53300e4c168912163c7e99b95da268ad280a": "1003200000000000000000", + "0xe07ebbc7f4da416e42c8d4f842aba16233c12580": "2000000000000000000000", + "0xbac8922c4acc7d2cb6fd59a14eb45cf3e702214b": "800000000000000000000", + "0xbb6c284aac8a69b75cddb00f28e145583b56bece": "2000000000000000000000", + "0x0372ee5508bf8163ed284e5eef94ce4d7367e522": "100000000000000000000", + "0x17125b59ac51cee029e4bd78d7f5947d1ea49bb2": "22000000000000000000000", + "0xc88ca1e6e5f4d558d13780f488f10d4ad3130d34": "1550000000000000000000", + "0xa825fd5abb7926a67cf36ba246a24bd27be6f6ed": "17600000000000000000", + "0x04241b41ecbd0bfdf1295e9d4fa59ea09e6c6186": "1870000000000000000000", + "0x6de4d15219182faf3aa2c5d4d2595ff23091a727": "1580000000000000000000", + "0xb203d29e6c56b92699c4b92d1f6f84648dc4cfbc": "400000000000000000000", + "0x80b42de170dbd723f454e88f7716452d92985092": "300202000000000000000", + "0x0a5b79d8f23b6483dbe2bdaa62b1064cc76366ae": "1969803000000000000000", + "0x32034e8581d9484e8af42a28df190132ec29c466": "3460000000000000000000", + "0x7ee604c7a9dc2909ce321de6b9b24f5767577555": "5533575000000000000000", + "0xa387ce4e961a7847f560075c64e1596b5641d21c": "668500000000000000000", + "0xfcc9d4a4262e7a027ab7519110d802c495ceea39": "6370000000000000000000", + "0xff8a2ca5a81333f19998255f203256e1a819c0aa": "224000000000000000000", + "0xf9811fa19dadbf029f8bfe569adb18228c80481a": "200000000000000000000", + "0x0d1f2a57713ebc6e94de29846e8844d376665763": "5000000000000000000000", + "0xeab0bd148309186cf8cbd13b7232d8095acb833a": "10691800000000000000000", + "0x36928b55bc861509d51c8cf1d546bfec6e3e90af": "1970000000000000000000", + "0x30480164bcd84974ebc0d90c9b9afab626cd1c73": "800000000000000000000", + "0x36339f84a5c2b44ce53dfdb6d4f97df78212a7df": "321600000000000000000", + "0xcfeacaaed57285e0ac7268ce6a4e35ecfdb242d7": "1086400000000000000000", + "0x572dd8cd3fe399d1d0ec281231b7cefc20b9e4bb": "10400000000000000000000", + "0x5dded049a6e1f329dc4b971e722c9c1f2ade83f0": "1000000000000000000000", + "0x9756e176c9ef693ee1eec6b9f8b151d313beb099": "1200000000000000000000", + "0x01e6415d587b065490f1ed7f21d6e0f386ee6747": "2000000000000000000000", + "0xb4413576869c08f9512ad311fe925988a52d3414": "10000000000000000000000", + "0xda9f55460946d7bfb570ddec757ca5773b58429a": "507600000000000000000", + "0x7180b83ee5574317f21c8072b191d895d46153c3": "460000000000000000000", + "0x0aca9a5626913b08cfc9a66d40508dce52b60f87": "1910000000000000000000", + "0x5cd0e475b54421bdfc0c12ea8e082bd7a5af0a6a": "59000000000000000000", + "0x7edb02c61a227287611ad950696369cc4e647a68": "274000000000000000000", + "0xb2676841ee9f2d31c172e82303b0fe9bbf9f1e09": "200000000000000000000", + "0xa2222259dd9c3e3ded127084f808e92a1887302c": "162000000000000000000", + "0x4b3a7cc3a7d7b00ed5282221a60259f25bf6538a": "1000000000000000000000", + "0xe33ff987541dde5cdee0a8a96dcc3f33c3f24cc2": "200000000000000000000000", + "0x1e1a4828119be309bd88236e4d482b504dc55711": "2955000000000000000000", + "0x9b1811c3051f46e664ae4bc9c824d18592c4574a": "199955000000000000000", + "0x59fe00696dbd87b7976b29d1156c8842a2e17914": "2000000000000000000000", + "0x48010ef3b8e95e3f308f30a8cb7f4eb4bf60d965": "2000000000000000000000", + "0xc90300cb1d4077e6a6d7e169a460468cf4a492d7": "2000000000000000000000", + "0x6dedf62e743f4d2c2a4b87a787f5424a7aeb393c": "180000000000000000000", + "0xfb744b951d094b310262c8f986c860df9ab1de65": "52009000000000000000", + "0x193ac65183651800e23580f8f0ead3bb597eb8a4": "50020000000000000000", + "0xbf05ff5ecf0df2df887759fb8274d93238ac267d": "800000000000000000000", + "0x6c0e712f405c59725fe829e9774bf4df7f4dd965": "57413800000000000000000", + "0x2744ff67464121e35afc2922177164fa2fcb0267": "100000000000000000000", + "0xd09cb2e6082d693a13e8d2f68dd1dd8461f55840": "1000000000000000000000", + "0xbc171e53d17ac9b61241ae436deec7af452e7496": "5348000000000000000000", + "0x71fa22cc6d33206b7d701a163a0dab31ae4d31d6": "1610000000000000000000", + "0x4da8030769844bc34186b85cd4c7348849ff49e9": "10000000000000000000000", + "0xc8616b4ec09128cdff39d6e4b9ac86eec471d5f2": "19400000000000000000", + "0x407295ebd94b48269c2d569c9b9af9aa05e83e5e": "10000000000000000000000", + "0xd45d5daa138dd1d374c71b9019916811f4b20a4e": "576000000000000000000", + "0x42c6edc515d35557808d13cd44dcc4400b2504e4": "197876000000000000000", + "0x0bc95cb32dbb574c832fa8174a81356d38bc92ac": "2000000000000000000000", + "0x5a6071bcebfcba4ab57f4db96fc7a68bece2ba5b": "2000000000000000000000", + "0x54c93e03a9b2e8e4c3672835a9ee76f9615bc14e": "19400000000000000000", + "0x3c03bbc023e1e93fa3a3a6e428cf0cd8f95e1ec6": "1520000000000000000000", + "0xba1531fb9e791896bcf3a80558a359f6e7c144bd": "3940000000000000000000", + "0xaa56a65dc4abb72f11bae32b6fbb07444791d5c9": "748600000000000000000", + "0xe437acbe0f6227b0e36f36e4bcf7cf613335fb68": "200000000000000000000", + "0x39d4a931402c0c79c457186f24df8729cf957031": "4000000000000000000000", + "0xe22b20c77894463baf774cc256d5bddbbf7ddd09": "1000000000000000000000", + "0x70a4067d448cc25dc8e70e651cea7cf84e92109e": "176000000000000000000", + "0xaa3925dc220bb4ae2177b2883078b6dc346ca1b2": "8000000000000000000000", + "0xad57aa9d00d10c439b35efcc0becac2e3955c313": "200000000000000000000", + "0xe93d47a8ca885d540c4e526f25d5c6f2c108c4b8": "112640000000000000000000", + "0x232ce782506225fd9860a2edc14a7a3047736da2": "20000000000000000000", + "0x49a645e0667dfd7b32d075cc2467dd8c680907c4": "129560000000000000000", + "0xcf2e734042a355d05ffb2e3915b16811f45a695e": "2000000000000000000000", + "0x39b1c471ae94e12164452e811fbbe2b3cd7275ac": "2000000000000000000000", + "0xffad3dd74e2c1f796ac640de56dc99b4c792a402": "5000000000000000000000", + "0xa69d7cd17d4842fe03f62a90b2fbf8f6af7bb380": "100000000000000000000", + "0x2001bef77b66f51e1599b02fb110194a0099b78d": "2000000000000000000000", + "0x95e7616424cd0961a71727247437f0069272280e": "400000000000000000000", + "0xc04f4bd4049f044685b883b62959ae631d667e35": "5820000000000000000000", + "0xede0147ec032c3618310c1ff25690bf172193dac": "2000000000000000000000", + "0x66719c0682b2ac7f9e27abebec7edf8decf0ae0d": "20000000000000000000", + "0x45272b8f62e9f9fa8ce04420e1aea3eba9686eac": "4000000000000000000000", + "0xd1da0c8fb7c210e0f2ec618f85bdae7d3e734b1c": "1970000000000000000000", + "0xe9133e7d31845d5f2b66a2618792e869311acf66": "24050000000000000000000", + "0xebb62cf8e22c884b1b28c6fa88fbbc17938aa787": "798000000000000000000", + "0x6205c2d5647470848a3840f3887e9b015d34755c": "1800000000000000000000", + "0x76ca22bcb8799e5327c4aa2a7d0949a1fcce5f29": "1524180000000000000000", + "0x6b925dd5d8ed6132ab6d0860b82c44e1a51f1fee": "1480000000000000000000", + "0x797bb7f157d9feaa17f76da4f704b74dc1038341": "3340000000000000000000", + "0xae8954f8d6166de507cf61297d0fc7ca6b9e7128": "300000000000000000000", + "0x75c1ad23d23f24b384d0c3149177e86697610d21": "6426082000000000000000", + "0x805d846fb0bc02a7337226d685be9ee773b9198a": "19999800000000000000000", + "0xc3cb6b36af443f2c6e258b4a39553a818747811f": "1610000000000000000000", + "0xcea43f7075816b60bbfce68b993af0881270f6c4": "2000000000000000000000", + "0xe0388aeddd3fe2ad56f85748e80e710a34b7c92e": "500000000000000000000", + "0xe131f87efc5ef07e43f0f2f4a747b551d750d9e6": "19999000000000000000000", + "0xc2b2cbe65bc6c2ee7a3c75b2e47c189c062e8d8b": "20000000000000000000000", + "0xbd8765f41299c7f479923c4fd18f126d7229047d": "4000000000000000000000", + "0xc83ba6dd9549be1d3287a5a654d106c34c6b5da2": "7000000000000000000000", + "0xf870995fe1e522321d754337a45c0c9d7b38951c": "20000000000000000000", + "0x0d8ed7d0d15638330ed7e4eaccab8a458d75737e": "2000000000000000000000", + "0x36c510bf8d6e569bf2f37d47265dbcb502ff2bce": "30000000000000000000000", + "0x0eccf617844fd61fba62cb0e445b7ac68bcc1fbe": "387260000000000000000", + "0xae10e27a014f0d306baf266d4897c89aeee2e974": "20000000000000000000000", + "0x1827039f09570294088fddf047165c33e696a492": "9550000000000000000000", + "0x23378f42926d0184b793b0c827a6dd3e3d334fcd": "56000000000000000000", + "0x467124ae7f452f26b3d574f6088894fa5d1cfb3b": "2700000000000000000000", + "0xaae61e43cb0d0c96b30699f77e00d711d0a3979b": "1000000000000000000000", + "0x15c7edb8118ee27b342285eb5926b47a855bc7a5": "20000000000000000000", + "0x0d5d98565c647ca5f177a2adb9d3022fac287f21": "200000000000000000000", + "0x7222fec7711781d26eaa4e8485f7aa3fac442483": "456000000000000000000", + "0xdc44275b1715baea1b0345735a29ac42c9f51b4f": "1164000000000000000000", + "0x04d82af9e01a936d97f8f85940b970f9d4db9936": "200000000000000000000", + "0x45533390e340fe0de3b3cf5fb9fc8ea552e29e62": "1460000000000000000000", + "0x1284f0cee9d2ff2989b65574d06ffd9ab0f7b805": "400000000000000000000", + "0xed9ebccba42f9815e78233266dd6e835b6afc31b": "6000000000000000000000", + "0xe4324912d64ea3aef76b3c2ff9df82c7e13ae991": "2000000000000000000000", + "0x94c742fd7a8b7906b3bfe4f8904fc0be5c768033": "20000000000000000000000", + "0x62fb8bd1f0e66b90533e071e6cbe6111fef0bc63": "17600000000000000000000", + "0x2c83aeb02fcf067d65a47082fd977833ab1cec91": "150400000000000000000", + "0x06cbfa08cdd4fba737bac407be8224f4eef35828": "593459000000000000000", + "0x67ee406ea4a7ae6a3a381eb4edd2f09f174b4928": "1036000000000000000000", + "0x83c23d8a502124ee150f08d71dc6727410a0f901": "33999600000000000000000", + "0xf7c00cdb1f020310d5acab7b496aaa44b779085e": "1670000000000000000000", + "0xd096565b7c7407d06536580355fdd6d239144aa1": "250000000000000000000", + "0xf8d52dcc5f96cc28007b3ecbb409f7e22a646caa": "149200000000000000000", + "0x0c222c7c41c9b048efcce0a232434362e12d673b": "10007600000000000000000", + "0x503bdbd8bc421c32a443032deb2e3e4cd5ba8b4e": "2000000000000000000000", + "0x77da5e6c72fb36bce1d9798f7bcdf1d18f459c2e": "22380000000000000000", + "0xe62f98650712eb158753d82972b8e99ca3f61877": "2000000000000000000000", + "0x87a7c508ef71582dd9a54372f89cb01f252fb180": "200000000000000000000", + "0xf61283b4bd8504058ca360e993999b62cbc8cd67": "255000000000000000000", + "0x9ccddcb2cfc2b25b08729a0a98d9e6f0202ea2c1": "100000000000000000000", + "0xd460a4b908dd2b056759b488850b66a838fc77a8": "1970000000000000000000", + "0x5431b1d18751b98fc9e2888ac7759f1535a2db47": "2000000000000000000000", + "0xda2a14f9724015d79014ed8e5909681d596148f1": "48499000000000000000", + "0xc989434f825aaf9c552f685eba7c11db4a5fc73a": "501000000000000000000", + "0x2b701d16c0d3cc1e4cd85445e6ad02eea4ac012d": "600000000000000000000", + "0x78b978a9d7e91ee529ea4fc4b76feaf8762f698c": "32000000000000000000000", + "0xc89cf504b9f3f835181fd8424f5ccbc8e1bddf7d": "10000000000000000000000", + "0xe94941b6036019b4016a30c1037d5a6903babaad": "780000000000000000000", + "0x95d98d0c1069908f067a52acac2b8b534da37afd": "2054053000000000000000", + "0x8284923b62e68bbf7c2b9f3414d13ef6c812a904": "3880000000000000000000", + "0x3e5a39fdda70df1126ab0dc49a7378311a537a1f": "2400000000000000000000", + "0xa2ace4c993bb1e5383f8ac74e179066e814f0591": "100000000000000000000", + "0x0609d83a6ce1ffc9b690f3e9a81e983e8bdc4d9d": "70000000000000000000000", + "0xd119417c46732cf34d1a1afb79c3e7e2cd8eece4": "2000000000000000000000", + "0xfdb33944f2360615e5be239577c8a19ba52d9887": "601650000000000000000", + "0xdd95dbe30f1f1877c5dd7684aeef302ab6885192": "8372000000000000000000", + "0x413f4b02669ccff6806bc826fcb7deca3b0ea9bc": "20000000000000000000", + "0x5800cd8130839e94495d2d8415a8ea2c90e0c5cb": "200000000000000000000", + "0x65053191319e067a25e6361d47f37f6318f83419": "394000000000000000000", + "0x9bc573bcda23b8b26f9073d90c230e8e71e0270b": "999544000000000000000", + "0x97f7760657c1e202759086963eb4211c5f8139b9": "49770000000000000000000", + "0x126897a311a14ad43b78e0920100c4426bfd6bdd": "973581000000000000000", + "0xd5276f0cd5ffd5ffb63f98b5703d5594ede0838b": "400000000000000000000", + "0xe9c35c913ca1fceab461582fe1a5815164b4fd21": "8000000000000000000000", + "0xb43067fe70d9b55973ba58dc64dd7f311e554259": "200000000000000000000", + "0x6f8f0d15cc96fb7fe94f1065bc6940f8d12957b2": "1000000000000000000000", + "0xb1dba5250ba9625755246e067967f2ad2f0791de": "80000000000000000000000", + "0x72b7a03dda14ca9c661a1d469fd33736f673c8e8": "2000000000000000000000", + "0xe792349ce9f6f14f81d0674096befa1f9221cdea": "1685365000000000000000", + "0x1815279dff9952da3be8f77249dbe22243377be7": "4749800000000000000000", + "0x33481e856ebed48ea708a27426ef28e867f57cd1": "200000000000000000000", + "0x8eb8c71982a00fb84275293253f8044544b66b49": "400000000000000000000", + "0x65f5870f26bce089677dfc23b5001ee492483428": "5067230000000000000000", + "0x8e23facd12c765c36ab81a6dd34d8aa9e68918ae": "167310000000000000000", + "0x4912d902931676ff39fc34fe3c3cc8fb2182fa7a": "20000000000000000000", + "0xc09a66172aea370d9a63da04ff71ffbbfcff7f94": "2000000000000000000000", + "0xe969ea1595edc5c4a707cfde380929633251a2b0": "200000000000000000000", + "0x4f2b47e2775a1fa7178dad92985a5bbe493ba6d6": "200000000000000000000", + "0xcab9a97ada065c87816e6860a8f1426fe6b3d775": "1000000000000000000000", + "0xcdfd8217339725d7ebac11a63655f265eff1cc3d": "4999962000000000000000", + "0xab4004c0403f7eabb0ea586f212156c4203d67f1": "1999944000000000000000", + "0x1c7cb2fe6bf3e09cbcdc187af38fa8f5053a70b6": "9970823000000000000000", + "0xa951b244ff50cfae591d5e1a148df6a938ef2a1a": "1734000000000000000000", + "0xb158db43fa62d30e65f3d09bf781c7b67372ebaa": "1999000000000000000000", + "0x25e037f00a18270ba5ec3420229ddb0a2ce38fa2": "10000000000000000000000", + "0x2aaea1f1046f30f109faec1c63ef5c7594eb08da": "4000000000000000000000", + "0x73d7269ff06c9ffd33754ce588f74a966abbbbba": "6600000000000000000000", + "0x4c767b65fd91161f4fbdcc6a69e2f6ad711bb918": "720000000000000000000", + "0x92ae5b7c7eb492ff1ffa16dd42ad9cad40b7f8dc": "865000000000000000000", + "0xa04f2ae02add14c12faf65cb259022d0830a8e26": "100000000000000000000000", + "0x63ef2fbc3daf5edaf4a295629ccf31bcdf4038e5": "1460000000000000000000", + "0x749ad6f2b5706bbe2f689a44c4b640b58e96b992": "100000000000000000000", + "0x4d836d9d3b0e2cbd4de050596faa490cffb60d5d": "300000000000000000000", + "0x59f6247b0d582aaa25e5114765e4bf3c774f43c2": "50000000000000000000", + "0x1293c78c7d6a443b9d74b0ba5ee7bb47fd418588": "6685000000000000000000", + "0x67bc85e87dc34c4e80aafa066ba8d29dbb8e438e": "402500000000000000000", + "0xa09f4d5eaa65a2f4cb750a49923401dae59090af": "140000000000000000000", + "0xebbd4db9019952d68b1b0f6d8cf0683c00387bb5": "332330000000000000000", + "0xb16479ba8e7df8f63e1b95d149cd8529d735c2da": "846477000000000000000", + "0xe1b2aca154b8e0766c4eba30bc10c7f35036f368": "19980000000000000000", + "0x5c464197791c8a3da3c925436f277ab13bf2faa2": "8000000000000000000000", + "0x170a88a8997f92d238370f1affdee6347050b013": "3000800000000000000000", + "0xdadbfafd8b62b92a24efd75256dd83abdbd7bbdb": "19700000000000000000", + "0xbb993b96ee925ada7d99d786573d3f89180ce3aa": "2000000000000000000000", + "0xf2c362b0ef991bc82fb36e66ff75932ae8dd8225": "74000000000000000000", + "0x7f2382ffd8f83956467937f9ba72374623f11b38": "600000000000000000000", + "0x74d1a4d0c7524e018d4e06ed3b648092b5b6af2c": "50000000000000000000", + "0x24a750eae5874711116dd7d47b7186ce990d3103": "200000000000000000000", + "0xa8e42a4e33d7526cca19d9a36dcd6e8040d0ea73": "1080000000000000000000", + "0x3e1b2230afbbd310b4926a4c776d5ae7819c661d": "30000000000000000000000", + "0x6af9f0dfeeaebb5f64bf91ab771669bf05295553": "400000000000000000000", + "0x41e4a20275e39bdcefeb655c0322744b765140c2": "10000000000000000000000", + "0xceb089ec8a78337e8ef88de11b49e3dd910f748f": "1000000000000000000000", + "0xe6bcd30a8fa138c5d9e5f6c7d2da806992812dcd": "260000000000000000000000", + "0xe08c60313106e3f9334fe6f7e7624d211130c077": "40000000000000000000", + "0xf5cffbba624e7eb321bc83c60ca68199b4e36671": "2000000000000000000000", + "0xd7c2803ed7b0e0837351411a8e6637d168bc5b05": "29549015000000000000000", + "0x0f3665d48e9f1419cd984fc7fa92788710c8f2e4": "2000000000000000000000", + "0xb48921c9687d5510744584936e8886bdbf2df69b": "1000000000000000000000", + "0xa94bbb8214cf8da0c2f668a2ac73e86248528d4b": "960000000000000000000", + "0xbe0c2a80b9de084b172894a76cf4737a4f529e1a": "1999944000000000000000", + "0xfcf199f8b854222f182e4e1d099d4e323e2aae01": "1000000000000000000000", + "0xb52dfb45de5d74e3df208332bc571c809b8dcf32": "6000000000000000000000", + "0x704819d2e44d6ed1da25bfce84c49fcca25613e5": "400000000000000000000", + "0x6ff6cc90d649de4e96cffee1077a5b302a848dcb": "28600000000000000000", + "0x4d9c77d0750c5e6fbc247f2fd79274686cb353d6": "20000000000000000000", + "0x68e8022740f4af29eb48db32bcecddfd148d3de3": "1000000000000000000000", + "0x2cb615073a40dcdb99faa848572e987b3b056efb": "799600000000000000000", + "0x64adcceec53dd9d9dd15c8cc1a9e736de4241d2c": "56000000000000000000", + "0x2aec809df9325b9f483996e99f7331097f08aa0e": "4000000000000000000000", + "0x438c2f54ff8e629bab36b1442b760b12a88f02ae": "2000000000000000000000", + "0x9e35399071a4a101e9194daa3f09f04a0b5f9870": "4000000000000000000000", + "0xa5c336083b04f9471b8c6ed73679b74d66c363ec": "3014100000000000000000", + "0x7ad3f307616f19dcb143e6444dab9c3c33611f52": "50000000000000000000", + "0x455cb8ee39ffbc752331e5aefc588ef0ee593454": "999963000000000000000", + "0xc4c01afc3e0f045221da1284d7878574442fb9ac": "7419944000000000000000", + "0x99268327c373332e06c3f6164287d455b9d5fa4b": "2000000000000000000000", + "0x4367ae4b0ce964f4a54afd4b5c368496db169e9a": "2000000000000000000000", + "0x2cd79eb52027b12c18828e3eaab2969bfcd287e9": "20000000000000000000", + "0xb96841cabbc7dbd69ef0cf8f81dff3c8a5e21570": "12000000000000000000000", + "0xd7ebddb9f93987779b680155375438db65afcb6a": "100600000000000000000", + "0x0631d18bbbbd30d9e1732bf36edae2ce8901ab80": "3024800000000000000000", + "0x5fad960f6b2c84569c9f4d47bf1985fcb2c65da6": "999972000000000000000", + "0x01d599ee0d5f8c38ab2d392e2c65b74c3ce31820": "510000000000000000000", + "0xff0cc8dac824fa24fc3caa2169e6e057cf638ad6": "4000000000000000000000", + "0xc25266c7676632f13ef29be455ed948add567792": "1337000000000000000000", + "0x9c344098ba615a398f11d009905b177c44a7b602": "1000000000000000000000", + "0x3b0accaf4b607cfe61d17334c214b75cdefdbd89": "2000000000000000000000", + "0x6d6634b5b8a40195d949027af4828802092ceeb6": "3000000000000000000000", + "0x208c45732c0a378f17ac8324926d459ba8b658b4": "2955000000000000000000", + "0xc24399b4bf86f7338fbf645e3b22b0e0b7973912": "2000000000000000000000", + "0x29763dd6da9a7c161173888321eba6b63c8fb845": "328000000000000000000", + "0x9c2fd54089af665df5971d73b804616039647375": "1000000000000000000000", + "0x0e09646c99af438e99fa274cb2f9c856cb65f736": "1910000000000000000000", + "0xbe73274d8c5aa44a3cbefc8263c37ba121b20ad3": "500000000000000000000", + "0xecfd004d02f36cd4d8b4a8c1a9533b6af85cd716": "5003800000000000000000", + "0xf978b025b64233555cc3c19ada7f4199c9348bf7": "400000000000000000000000", + "0x705ddd38355482b8c7d3b515bda1500dd7d7a817": "400000000000000000000", + "0x2b8a0dee5cb0e1e97e15cfca6e19ad21f995efad": "504206000000000000000", + "0x1098cc20ef84bad5146639c4cd1ca6c3996cb99b": "18200000000000000000", + "0xafdac5c1cb56e245bf70330066a817eaafac4cd1": "20000000000000000000", + "0x910e996543344c6815fb97cda7af4b8698765a5b": "103400000000000000000", + "0x94612781033b57b146ee74e753c672017f5385e4": "3600000000000000000000", + "0xd03fc165576aaed525e5502c8e140f8b2e869639": "6850000000000000000000", + "0x293384c42b6f8f2905ce52b7205c2274376c612b": "1400000000000000000000", + "0x09ee12b1b42b05af9cf207d5fcac255b2ec411f2": "58929000000000000000", + "0xdbd71efa4b93c889e76593de609c3b04cbafbe08": "20000000000000000000", + "0xfa86ca27bf2854d98870837fb6f6dfe4bf6453fc": "322061000000000000000", + "0x61ff8e67b34d9ee6f78eb36ffea1b9f7c15787af": "1640000000000000000000", + "0x6d4cbf3d8284833ae99344303e08b4d614bfda3b": "12000000000000000000000", + "0x2ff160c44f72a299b5ec2d71e28ce5446d2fcbaf": "360000000000000000000", + "0x94a7cda8f481f9d89d42c303ae1632b3b709db1d": "300000000000000000000", + "0x7566496162ba584377be040a4f87777a707acaeb": "4000000000000000000000", + "0xbdc461462b6322b462bdb33f22799e8108e2417d": "668500000000000000000", + "0x7e47637e97c14622882be057bea229386f4052e5": "440000000000000000000", + "0x3b5c251d7fd7893ba209fe541cecd0ce253a990d": "30000000000000000000000", + "0x0e498800447177b8c8afc3fdfa7f69f4051bb629": "2140234000000000000000", + "0xb71623f35107cf7431a83fb3d204b29ee0b1a7f4": "19700000000000000000", + "0x1d395b30adda1cf21f091a4f4a7b753371189441": "100000000000000000000000", + "0x2c2428e4a66974edc822d5dbfb241b2728075158": "2000000000000000000000", + "0xa575f2891dcfcda83c5cf01474af11ee01b72dc2": "100076000000000000000", + "0xad728121873f0456d0518b80ab6580a203706595": "500000000000000000000", + "0x48669eb5a801d8b75fb6aa58c3451b7058c243bf": "30940000000000000000000", + "0xb3ae54fba09d3ee1d6bdd1e957923919024c35fa": "65513000000000000000", + "0x0d35408f226566116fb8acdaa9e2c9d59b76683f": "940000000000000000000", + "0xdf211cd21288d6c56fae66c3ff54625dd4b15427": "2500024000000000000000", + "0x8a746c5d67064711bfca685b95a4fe291a27028e": "40000000000000000000", + "0x1cf105ab23023b554c583e86d7921179ee83169f": "1970000000000000000000", + "0x8cfedef198db0a9143f09129b3fd64dcbb9b4956": "2000000000000000000000", + "0x1e381adcf801a3bf9fd7bfac9ccc2b8482ad5e66": "600200000000000000000", + "0xe74608f506866ada6bfbfdf20fea440be76989ef": "1999944000000000000000", + "0x27e63989ca1e903bc620cf1b9c3f67b9e2ae6581": "1337000000000000000000", + "0xbb0857f1c911b24b86c8a70681473fe6aaa1cce2": "100000000000000000000", + "0x4f8e8d274fb22a3fd36a47fe72980471544b3434": "200000000000000000000", + "0x127d3fc5003bf63c0d83e93957836515fd279045": "111890000000000000000", + "0x95809e8da3fbe4b7f281f0b8b1715f420f7d7d63": "2000000000000000000000", + "0x28904bb7c4302943b709b14d7970e42b8324e1a1": "10027500000000000000000", + "0xc07e3867ada096807a051a6c9c34cc3b3f4ad34a": "1788210000000000000000", + "0xf0b469eae89d400ce7d5d66a9695037036b88903": "20000000000000000000000", + "0x7445202f0c74297a004eb3726aa6a82dd7c02fa1": "2000000000000000000000", + "0xc58f62fee9711e6a05dc0910b618420aa127f288": "3980000000000000000000", + "0x801d65c518b11d0e3f4f470221417013c8e53ec5": "4000000000000000000000", + "0x41010fc8baf8437d17a04369809a168a17ca56fb": "100000000000000000000", + "0xa1998144968a5c70a6415554cefec2824690c4a5": "20000000000000000000", + "0xe9559185f166fc9513cc71116144ce2deb0f1d4b": "20000000000000000000000", + "0xed5b4c41e762d942404373caf21ed4615d25e6c1": "2013960000000000000000", + "0x665b000f0b772750cc3c217a5ef429a92bf1ccbb": "4000000000000000000000", + "0xfebd9f81cf78bd5fb6c4b9a24bd414bb9bfa4c4e": "1990019000000000000000", + "0xa072691c8dd7cd4237ff72a75c1a9506d0ce5b9e": "370000000000000000000", + "0x6765df25280e8e4f38d4b1cf446fc5d7eb659e34": "100000000000000000000", + "0x524fb210522c5e23bb67dfbf8c26aa616da49955": "999971000000000000000", + "0xe987e6139e6146a717fef96bc24934a5447fe05d": "2000000000000000000000", + "0xd6110276cfe31e42825a577f6b435dbcc10cf764": "1000000000000000000000", + "0x5e51b8a3bb09d303ea7c86051582fd600fb3dc1a": "20000000000000000000", + "0x5c4f24e994ed8f850ea7818f471c8fac3bcf0452": "1724800000000000000000", + "0x85b2998d0c73302cb2ba13f489313301e053be15": "10000000000000000000000", + "0x0af6c8d539c96d50259e1ba6719e9c8060f388c2": "1000000000000000000000", + "0x7d901b28bf7f88ef73d8f73cca97564913ea8a24": "955000000000000000000", + "0xe01859f242f1a0ec602fa8a3b0b57640ec89075e": "555000000000000000000", + "0xc66ae4cee87fb3353219f77f1d6486c580280332": "29550000000000000000", + "0x2d40558b06f90a3923145592123b6774e46e31f4": "1000000000000000000000", + "0xccf43975b76bfe735fec3cb7d4dd24f805ba0962": "60000000000000000000", + "0x1703b4b292b8a9deddede81bb25d89179f6446b6": "19690000000000000000000", + "0x0e9096d343c060db581a120112b278607ec6e52b": "20000000000000000000", + "0xf65819ac4cc14c137f05dd7977c7dae08d1a4ab5": "102000000000000000000", + "0xca373fe3c906b8c6559ee49ccd07f37cd4fb5266": "1790000000000000000000", + "0xd28298524df5ec4b24b0ffb9df85170a145a9eb5": "287700000000000000000", + "0x5fcda847aaf8d7fa8bca08029ca2849166aa15a3": "623350000000000000000", + "0xbdc739a699700b2e8e2c4a4c7b058a0e513ddebe": "2000000000000000000000", + "0x0bb05f7224bb5804856556c07eeadbed87ba8f7c": "401100000000000000000", + "0xab416fe30d58afe5d9454c7fce7f830bcc750356": "114515000000000000000", + "0x3eee6f1e96360b7689b3069adaf9af8eb60ce481": "1000000000000000000000", + "0x9a0d3cee3d9892ea3b3700a27ff84140d9025493": "60000000000000000000", + "0x5dc36de5359450a1ec09cb0c44cf2bb42b3ae435": "1117500000000000000000", + "0x35c8adc11125432b3b77acd64625fe58ebee9d66": "2000000000000000000000", + "0xa5e9cd4b74255d22b7d9b27ae8dd43ed6ed0252b": "766527000000000000000", + "0x31ea12d49a35a740780ddeeaece84c0835b26270": "200000000000000000000", + "0x7aef7b551f0b9c46e755c0f38e5b3a73fe1199f5": "1490000000000000000000", + "0xcc6d7b12061bc96d104d606d65ffa32b0036eb07": "10000000000000000000000", + "0x322021022678a0166d204b3aaa7ad4ec4b88b7d0": "400000000000000000000", + "0xb31196714a48dff726ea9433cd2912f1a414b3b3": "2680000000000000000000", + "0x0f2fb884c8aaff6f543ac6228bd08e4f60b0a5fd": "3145000000000000000000", + "0x7d9d221a3df89ddd7b5f61c1468c6787d6b333e6": "138000000000000000000", + "0x367f59cc82795329384e41e1283115e791f26a01": "2000000000000000000000", + "0xfd9579f119bbc819a02b61e38d8803c942f24d32": "105600000000000000000", + "0x3e2f26235e137a7324e4dc154b5df5af46ea1a49": "22458000000000000000", + "0x4c1579af3312e4f88ae93c68e9449c2e9a68d9c4": "2000000000000000000000", + "0xffb04726dfa41afdc819168418610472970d7bfc": "4000000000000000000000", + "0x403c64896a75cad816a9105e18d8aa5bf80f238e": "985000000000000000000", + "0x5cd588a14ec648ccf64729f9167aa7bf8be6eb3d": "1000000000000000000000", + "0x24b2be118b16d8b2174769d17b4cf84f07ca946d": "2000000000000000000000", + "0xd3bb59fa31258be62f8ed232f1a7d47b4a0b41ee": "100000000000000000000", + "0xcc9ac715cd6f2610c52b58676456884297018b29": "13370000000000000000", + "0x6f2a31900e240395b19f159c1d00dfe4d898ebdf": "1999600000000000000000", + "0xd60b247321a32a5affb96b1e279927cc584de943": "2265500000000000000000", + "0xf7a1ade2d0f529123d1055f19b17919f56214e67": "500000000000000000000", + "0xbea00df17067a43a82bc1daecafb6c14300e89e6": "1820000000000000000000", + "0xa2968fc1c64bac0b7ae0d68ba949874d6db253f4": "20000000000000000000000", + "0x92d8ad9a4d61683b80d4a6672e84c20d62421e80": "20000000000000000000", + "0x6ed2a12b02f8c688c7b5d3a6ea14d63687dab3b6": "2000000000000000000000", + "0x7a63869fc767a4c6b1cd0e0649f3634cb121d24b": "77500000000000000000", + "0x84f522f0520eba52dd18ad21fa4b829f2b89cb97": "4949566000000000000000", + "0xd6234aaf45c6f22e66a225ffb93add629b4ef80f": "1000000000000000000000", + "0xe3d8bf4efe84b1616d1b89e427ddc6c8830685ae": "2000000000000000000000", + "0xa3db364a332d884ba93b2617ae4d85a1489bea47": "1700000000000000000000", + "0x9f7986924aeb02687cd64189189fb167ded2dd5c": "985000000000000000000", + "0x2eaf4e2a46b789ccc288c8d1d9294e3fb0853896": "2000000000000000000000", + "0xa02dc6aa328b880de99eac546823fccf774047fb": "1970000000000000000000", + "0x873b7f786d3c99ff012c4a7cae2677270240b9c5": "1730000000000000000000", + "0x1d69c83d28ff0474ceebeacb3ad227a144ece7a3": "5474937000000000000000", + "0x7b827cae7ff4740918f2e030ab26cb98c4f46cf5": "7460000000000000000000", + "0x3083ef0ed4c4401196774a95cf4edc83edc1484f": "170000000000000000000000", + "0x40ad74bc0bce2a45e52f36c3debb1b3ada1b7619": "6790000000000000000000", + "0x05423a54c8d0f9707e704173d923b946edc8e700": "127543000000000000000", + "0x22eb7db0ba56b0f8b816ccb206e615d929185b0d": "80500000000000000000", + "0x66082c75a8de31a53913bbd44de3a0374f7faa41": "1460000000000000000000", + "0xe3d3eaa299887865569e88be219be507189be1c9": "456156000000000000000", + "0xae57cc129a96a89981dac60d2ffb877d5dc5e432": "1110994000000000000000", + "0x1a2434cc774422d48d53d59c5d562cce8407c94b": "30000000000000000000", + "0x21546914dfd3af2add41b0ff3e83ffda7414e1e0": "5969100000000000000000", + "0x4dcf62a3de3f061db91498fd61060f1f6398ff73": "1999944000000000000000", + "0x6fd98e563d12ce0fd60f4f1f850ae396a9823c02": "1261000000000000000000", + "0xedf8a3e1d40f13b79ec8e3e1ecf262fd92116263": "158000000000000000000", + "0xc09e3cfc19f605ff3ec9c9c70e2540d7ee974366": "500000000000000000000", + "0x953572f0ea6df9b197cae40e4b8ecc056c4371c5": "1000000000000000000000", + "0x163cc8be227646cb09719159f28ed09c5dc0dce0": "1337000000000000000000", + "0xa3932a31d6ff75fb3b1271ace7caa7d5e1ff1051": "20000000000000000000000", + "0xf9a94bd56198da245ed01d1e6430b24b2708dcc0": "749938000000000000000", + "0x3eb8b33b21d23cda86d8288884ab470e164691b5": "500000000000000000000", + "0x84bcbf22c09607ac84341d2edbc03bfb1739d744": "500000000000000000000", + "0x961c59adc74505d1864d1ecfcb8afa0412593c93": "40000000000000000000000", + "0xf068dfe95d15cd3a7f98ffa688b4346842be2690": "1255160000000000000000", + "0x291efe0081dce8c14799f7b2a43619c0c3b3fc1f": "1200000000000000000000", + "0xbe4fd073617022b67f5c13499b827f763639e4e3": "2000000000000000000000", + "0xe40a7c82e157540a0b00901dbb86c716e1a062da": "49800000000000000000", + "0x6635b46f711d2da6f0e16370cd8ee43efb2c2d52": "2000000000000000000000", + "0x43748928e8c3ec4436a1d092fbe43ac749be1251": "400000000000000000000", + "0xb557ab9439ef50d237b553f02508364a466a5c03": "200000000000000000000", + "0x11928378d27d55c520ceedf24ceb1e822d890df0": "8000000000000000000000", + "0x61518464fdd8b73c1bb6ac6db600654938dbf17a": "200000000000000000000", + "0x004bfbe1546bc6c65b5c7eaa55304b38bbfec6d3": "2000000000000000000000", + "0xa5e0fc3c3affed3db6710947d1d6fb017f3e276d": "2000000000000000000000", + "0x8ecbcfacbfafe9f00c3922a24e2cf0026756ca20": "5640000000000000000000", + "0xfb5ffaa0f7615726357891475818939d2037cf96": "20000000000000000000", + "0xae222865799079aaf4f0674a0cdaab02a6d570ff": "2000000000000000000000", + "0x9edc90f4be210865214ab5b35e5a8dd77415279d": "4000000000000000000000", + "0x9d7831e834c20b1baa697af1d8e0c621c5afff9a": "86500000000000000000", + "0x046d274b1af615fb505a764ad8dda770b1db2f3d": "2000000000000000000000", + "0xeaea23aa057200e7c9c15e8ff190d0e66c0c0e83": "2000000000000000000000", + "0x417a3cd19496530a6d4204c3b5a17ce0f207b1a5": "8000000000000000000000", + "0xa035a3652478f82dbd6d115faa8ca946ec9e681d": "109880000000000000000", + "0x4f5801b1eb30b712d8a0575a9a71ff965d4f34eb": "300000000000000000000", + "0x91dbb6aaad149585be47375c5d6de5ff09191518": "20000000000000000000000", + "0xd043a011ec4270ee7ec8b968737515e503f83028": "500000000000000000000", + "0xbb371c72c9f0316cea2bd9c6fbb4079e775429ef": "1760000000000000000000", + "0xaa1df92e51dff70b1973e0e924c66287b494a178": "534400000000000000000", + "0xbd5f46caab2c3d4b289396bbb07f203c4da82530": "80000000000000000000", + "0x4d29fc523a2c1629532121da9998e9b5ab9d1b45": "15800000000000000000", + "0xaddb26317227f45c87a2cb90dc4cfd02fb23caf8": "1000000000000000000000", + "0x52e46783329a769301b175009d346768f4c87ee4": "2000000000000000000000", + "0xcaad9dc20d589ce428d8fda3a9d53a607b7988b5": "4000000000000000000000", + "0x95034e1621865137cd4739b346dc17da3a27c34e": "1580000000000000000000", + "0x0c3239e2e841242db989a61518c22247e8c55208": "263656000000000000000", + "0x5a0d609aae2332b137ab3b2f26615a808f37e433": "160000000000000000000000", + "0x2334c590c7a48769103045c5b6534c8a3469f44a": "17443200000000000000000", + "0xddfcca13f934f0cfbe231da13039d70475e6a1d0": "1000169000000000000000", + "0xee7288d91086d9e2eb910014d9ab90a02d78c2a0": "2000000000000000000000", + "0xfb91fb1a695553f0c68e21276decf0b83909b86d": "100016000000000000000", + "0x38695fc7e1367ceb163ebb053751f9f68ddb07a0": "2000000000000000000000", + "0x65093b239bbfba23c7775ca7da5a8648a9f54cf7": "400000000000000000000", + "0x73d8fee3cb864dce22bb26ca9c2f086d5e95e63b": "1000000000000000000000", + "0xf7155213449892744bc60f2e04400788bd041fdd": "66850000000000000000", + "0xd1a71b2d0858e83270085d95a3b1549650035e23": "14900000000000000000000", + "0xeac17b81ed5191fb0802aa54337313834107aaa4": "8000000000000000000000", + "0xbb076aac92208069ea318a31ff8eeb14b7e996e3": "149000000000000000000", + "0x9f46e7c1e9078cae86305ac7060b01467d6685ee": "668500000000000000000", + "0x1598127982f2f8ad3b6b8fc3cf27bf617801ba2b": "173000000000000000000", + "0xe91dac0195b19e37b59b53f7c017c0b2395ba44c": "1880000000000000000000", + "0xa436c75453ccca4a1f1b62e5c4a30d86dde4be68": "2000000000000000000000", + "0x11001b89ed873e3aaec1155634b4681643986323": "1000000000000000000000", + "0xab93b26ece0a0aa21365afed1fa9aea31cd54468": "1608000000000000000000", + "0xe77febabdf080f0f5dca1d3f5766f2a79c0ffa7c": "1386000000000000000000", + "0x1c4af0e863d2656c8635bc6ffec8dd9928908cb5": "2000000000000000000000", + "0x0c48ae62d1539788eba013d75ea60b64eeba4e80": "2213311000000000000000", + "0x423cc4594cf4abb6368de59fd2b1230734612143": "2000000000000000000000", + "0x7f6b28c88421e4857e459281d78461692489d3fb": "2000000000000000000000", + "0x806854588ecce541495f81c28a290373df0274b2": "582000000000000000000", + "0xdc76e85ba50b9b31ec1e2620bce6e7c8058c0eaf": "20000000000000000000", + "0xb00996b0566ecb3e7243b8227988dcb352c21899": "12000000000000000000000", + "0xf5d14552b1dce0d6dc1f320da6ffc8a331cd6f0c": "1337000000000000000000", + "0x55a61b109480b5b2c4fcfdef92d90584160c0d35": "44700000000000000000", + "0xb8947822d5ace7a6ad8326e95496221e0be6b73d": "20000000000000000000", + "0x492de46aaf8f1d708d59d79af1d03ad2cb60902f": "2000000000000000000000", + "0x0e0d6633db1e0c7f234a6df163a10e0ab39c200f": "200000000000000000000", + "0xf8bf9c04874e5a77f38f4c38527e80c676f7b887": "2000000000000000000000", + "0x15528350e0d9670a2ea27f7b4a33b9c0f9621d21": "4000086000000000000000", + "0xeccf7a0457b566b346ca673a180f444130216ac3": "100000000000000000000", + "0x10cf560964ff83c1c9674c783c0f73fcd89943fc": "40000000000000000000000", + "0xe7f06f699be31c440b43b4db0501ec0e25261644": "500000000000000000000", + "0xb6ce4dc560fc73dc69fb7a62e388db7e72ea764f": "966000000000000000000", + "0xf456055a11ab91ff668e2ec922961f2a23e3db25": "18200000000000000000", + "0x8dfbafbc0e5b5c86cd1ad697feea04f43188de96": "390060000000000000000", + "0x085b4ab75d8362d914435cedee1daa2b1ee1a23b": "3880000000000000000000", + "0xe400d651bb3f2d23d5f849e6f92d9c5795c43a8a": "2674000000000000000000", + "0x851aa91c82f42fad5dd8e8bb5ea69c8f3a5977d1": "148607000000000000000", + "0x4c935bb250778b3c4c7f7e07fc251fa630314aab": "1500000000000000000000", + "0xebd356156a383123343d48843bffed6103e866b3": "1970000000000000000000", + "0xda0b48e489d302b4b7bf204f957c1c9be383b0df": "2000000000000000000000", + "0x7085ae7e7e4d932197b5c7858c00a3674626b7a5": "6000000000000000000000", + "0x5b06d1e6930c1054692b79e3dbe6ecce53966420": "205400000000000000000", + "0x8df53d96191471e059de51c718b983e4a51d2afd": "32000000000000000000000", + "0x0678654ac6761db904a2f7e8595ec1eaac734308": "878000000000000000000", + "0x89fee30d1728d96cecc1dab3da2e771afbcfaa41": "1999944000000000000000", + "0x59c5d06b170ee4d26eb0a0eb46cb7d90c1c91019": "10000000000000000000000", + "0x2b129c26b75dde127f8320bd0f63410c92a9f876": "2200000000000000000000", + "0x3d6ae053fcbc318d6fd0fbc353b8bf542e680d27": "14300000000000000000", + "0x755a60bf522fbd8fff9723446b7e343a7068567e": "20000000000000000000000", + "0x947e11e5ea290d6fc3b38048979e0cd44ec7c17f": "2000000000000000000000", + "0x711ecf77d71b3d0ea95ce4758afecdb9c131079d": "760000000000000000000", + "0xde9eff4c798811d968dccb460d9b069cf30278e0": "400000000000000000000", + "0x4e892e8081bf36e488fddb3b2630f3f1e8da30d2": "12003800000000000000000", + "0x8ede7e3dc50749c6c50e2e28168478c34db81946": "19999800000000000000000", + "0x0c30cacc3f72269f8b4f04cf073d2b05a83d9ad1": "2001000000000000000000", + "0xe51eb87e7fb7311f5228c479b48ec9878831ac4c": "2000000000000000000000", + "0x8b01da34d470c1d115acf4d8113c4dd8a8c338e4": "25220000000000000000000", + "0x4329fc0931cbeb033880fe4c9398ca45b0e2d11a": "2000400000000000000000", + "0x540c072802014ef0d561345aec481e8e11cb3570": "8000000000000000000000", + "0x21e5d2bae995ccfd08a5c16bb524e1f630448f82": "2800000000000000000000", + "0x5cf8c03eb3e872e50f7cfd0c2f8d3b3f2cb5183a": "200000000000000000000", + "0x5c0f2e51378f6b0d7bab617331580b6e39ad3ca5": "9600000000000000000000", + "0xd2f241255dd7c3f73c07043071ec08ddd9c5cde5": "500000000000000000000", + "0xcbe1b948864d8474e765145858fca4550f784b92": "10000000000000000000000", + "0x30742ccdf4abbcd005681f8159345c9e79054b1a": "668500000000000000000", + "0x6aeb9f74742ea491813dbbf0d6fcde1a131d4db3": "440800000000000000000", + "0x821eb90994a2fbf94bdc3233910296f76f9bf6e7": "10000000000000000000000", + "0x25c1a37ee5f08265a1e10d3d90d5472955f97806": "1820000000000000000000", + "0x7ef98b52bee953bef992f305fda027f8911c5851": "514717000000000000000", + "0x8adc53ef8c18ed3051785d88e996f3e4b20ecd51": "42000000000000000000000", + "0x007f4a23ca00cd043d25c2888c1aa5688f81a344": "773658000000000000000", + "0x4a735d224792376d331367c093d31c8794341582": "1900000000000000000000", + "0x05440c5b073b529b4829209dff88090e07c4f6f5": "1288000000000000000000", + "0x5e772e27f28800c50dda973bb33e10762e6eea20": "1790000000000000000000", + "0xa429fa88731fdd350e8ecd6ea54296b6484fe695": "1969606000000000000000", + "0xe0d76b7166b1f3a12b4091ee2b29de8caa7d07db": "2000000000000000000000", + "0x7ebd95e9c470f7283583dc6e9d2c4dce0bea8f84": "14000000000000000000000", + "0x883a78aeabaa50d8ddd8570bcd34265f14b19363": "3879951000000000000000", + "0x51f9c432a4e59ac86282d6adab4c2eb8919160eb": "530000000000000000000000", + "0xb86607021b62d340cf2652f3f95fd2dc67698bdf": "5000000000000000000000", + "0xacc0909fda2ea6b7b7a88db7a0aac868091ddbf6": "22155000000000000000", + "0x69b80ed90f84834afa3ff82eb964703b560977d6": "26740000000000000000", + "0xca4ca9e4779d530ecbacd47e6a8058cfde65d98f": "800000000000000000000", + "0x5d6c5c720d66a6abca8397142e63d26818eaab54": "40000000000000000000", + "0xc2c13e72d268e7150dc799e7c6cf03c88954ced7": "700000000000000000000", + "0x6bbd1e719390e6b91043f8b6b9df898ea8001b34": "2000053000000000000000", + "0xa9ba6f413b82fcddf3affbbdd09287dcf50415ca": "4000000000000000000000", + "0xced3c7be8de7585140952aeb501dc1f876ecafb0": "4000000000000000000000", + "0x1c63fa9e2cbbf23c49fcdef1cbabfe6e0d1e14c1": "1000000000000000000000", + "0x7d6e990daa7105de2526339833f77b5c0b85d84f": "20000000000000000000000", + "0x68addf019d6b9cab70acb13f0b3117999f062e12": "49941000000000000000", + "0xa77428bcb2a0db76fc8ef1e20e461a0a32c5ac15": "401100000000000000000", + "0x26048fe84d9b010a62e731627e49bc2eb73f408f": "4000000000000000000000", + "0xff26138330274df4e0a3081e6df7dd983ec6e78f": "2000000000000000000000", + "0xb7382d37db0398ac72410cf9813de9f8e1ec8dad": "1000070000000000000000", + "0x44f62f2aaabc29ad3a6b04e1ff6f9ce452d1c140": "17000000000000000000000", + "0x47fef58584465248a0810d60463ee93e5a6ee8d3": "283100000000000000000", + "0xbd2b70fecc37640f69514fc7f3404946aad86b11": "1200000000000000000000", + "0x649a85b93653075fa6562c409a565d087ba3e1ba": "2000000000000000000000", + "0x55866486ec168f79dbe0e1abb18864d98991ae2c": "16100000000000000000", + "0xd7e74afdbad55e96cebc5a374f2c8b768680f2b0": "99000000000000000000", + "0xa8c1d6aa41fe3d65f67bd01de2a866ed1ed9ae52": "30000000000000000000", + "0x744c0c77ba7f236920d1e434de5da33e48ebf02c": "1970000000000000000000", + "0x9445ba5c30e98961b8602461d0385d40fbd80311": "10000000000000000000000", + "0xeb835c1a911817878a33d167569ea3cdd387f328": "1000000000000000000000", + "0x761a6e362c97fbbd7c5977acba2da74687365f49": "183840000000000000000", + "0x38202c5cd7078d4f887673ab07109ad8ada89720": "1000000000000000000000", + "0x5abfec25f74cd88437631a7731906932776356f9": "11901484239480000000000000", + "0x28e4af30cd93f686a122ad7bb19f8a8785eee342": "2101000000000000000000", + "0x3a9b111029ce1f20c9109c7a74eeeef34f4f2eb2": "4000000000000000000000", + "0x7bb9571f394b0b1a8eba5664e9d8b5e840677bea": "19700000000000000000", + "0x50fb36c27107ee2ca9a3236e2746cca19ace6b49": "2000000000000000000000", + "0xa3bc979b7080092fa1f92f6e0fb347e28d995045": "2800000000000000000000", + "0xd04b861b3d9acc563a901689941ab1e1861161a2": "20000000000000000000", + "0x58c555bc293cdb16c6362ed97ae9550b92ea180e": "20000000000000000000", + "0x8bf02bd748690e1fd1c76d270833048b66b25fd3": "11800000000000000000000", + "0xfbc01db54e47cdc3c438694ab717a856c23fe6e9": "8456774000000000000000", + "0x9c9a07a8e57c3172a919ef64789474490f0d9f51": "10000000000000000000000", + "0xfc7e22a503ec5abe9b08c50bd14999f520fa4884": "6387725000000000000000", + "0x9b773669e87d76018c090f8255e54409b9dca8b2": "20000000000000000000", + "0xffe8cbc1681e5e9db74a0f93f8ed25897519120f": "1507000000000000000000", + "0x4d4cf5807429615e30cdface1e5aae4dad3055e6": "600000000000000000000", + "0xcfde0fc75d6f16c443c3038217372d99f5d907f7": "2419000000000000000000", + "0x818ffe271fc3973565c303f213f6d2da89897ebd": "5734655000000000000000", + "0xba1fcaf223937ef89e85675503bdb7ca6a928b78": "640000000000000000000", + "0xa30a45520e5206d9004070e6af3e7bb2e8dd5313": "400000000000000000000", + "0xa747439ad0d393b5a03861d77296326de8bb9db9": "1000000000000000000000", + "0x14d00aad39a0a7d19ca05350f7b03727f08dd82e": "500000000000000000000", + "0x551999ddd205563327b9b530785acff9bc73a4ba": "6000000000000000000000", + "0xa4670731175893bbcff4fa85ce97d94fc51c4ba8": "8000000000000000000000", + "0xf858171a04d357a13b4941c16e7e55ddd4941329": "41984000000000000000", + "0xa6484cc684c4c91db53eb68a4da45a6a6bda3067": "6000000000000000000000", + "0x00d75ed60c774f8b3a5a5173fb1833ad7105a2d9": "2005500000000000000000", + "0xbf92418a0c6c31244d220260cb3e867dd7b4ef49": "99800000000000000000", + "0x716d50cca01e938500e6421cc070c3507c67d387": "2000000000000000000000", + "0x82a8b96b6c9e13ebec1e9f18ac02a60ea88a48ff": "1999998000000000000000", + "0x5a565285374a49eedd504c957d510874d00455bc": "100000000000000000000", + "0x778c79f4de1953ebce98fe8006d53a81fb514012": "999800000000000000000", + "0x41b2d34fde0b1029262b4172c81c1590405b03ae": "1000000000000000000000", + "0x4039bd50a2bde15ffe37191f410390962a2b8886": "200000000000000000000", + "0xc033be10cb48613bd5ebcb33ed4902f38b583003": "3000000000000000000000", + "0x5d5751819b4f3d26ed0c1ac571552735271dbefa": "1000000000000000000000", + "0xb600429752f399c80d0734744bae0a022eca67c6": "20000000000000000000", + "0xf875619d8a23e45d8998d184d480c0748970822a": "4000000000000000000000", + "0x71c7230a1d35bdd6819ed4b9a88e94a0eb0786dd": "4365000000000000000000", + "0xb2f9c972c1e9737755b3ff1b3088738396395b26": "20000000000000000000000", + "0xa66a4963b27f1ee1932b172be5964e0d3ae54b51": "173000000000000000000", + "0x53ce88e66c5af2f29bbd8f592a56a3d15f206c32": "140840000000000000000", + "0x433e3ba1c51b810fc467d5ba4dea42f7a9885e69": "40000000000000000000000", + "0xc7837ad0a0bf14186937ace06c5546a36aa54f46": "4000000000000000000000", + "0xc3f8f67295a5cd049364d05d23502623a3e52e84": "6000000000000000000000", + "0x3fd0bb47798cf44cdfbe4d333de637df4a00e45c": "100040000000000000000", + "0xa1ae8d4540d4db6fdde7146f415b431eb55c7983": "197000000000000000000", + "0x5cccf1508bfd35c20530aa642500c10dee65eaed": "850000000000000000000", + "0xa53ead54f7850af21438cbe07af686279a315b86": "10000000000000000000000", + "0x8cf6da0204dbc4860b46ad973fc111008d9e0c46": "200000000000000000000", + "0x8e7936d592008fdc7aa04edeeb755ab513dbb89d": "20000000000000000000", + "0x4a53dcdb56ce4cdce9f82ec0eb13d67352e7c88b": "4200000000000000000000", + "0x2b4f4507bb6b9817942ce433781b708fbcd166fd": "18200000000000000000", + "0x026432af37dc5113f1f46d480a4de0b28052237e": "355800000000000000000", + "0xe780a56306ba1e6bb331952c22539b858af9f77d": "50000000000000000000000", + "0xd1f1694d22671b5aad6a94995c369fbe6133676f": "1000000000000000000000", + "0x7c45f0f8442a56dbd39dbf159995415c52ed479b": "2000000000000000000000", + "0xb65941d44c50d24666670d364766e991c02e11c2": "600000000000000000000", + "0x45e68db8dbbaba5fc2cb337c62bcd0d61b059189": "2000000000000000000000", + "0x05f3631f5664bdad5d0132c8388d36d7d8920918": "20000000000000000000", + "0x5475d7f174bdb1f789017c7c1705989646079d49": "9400000000000000000000", + "0xc7bf2ed1ed312940ee6aded1516e268e4a604856": "6000000000000000000000", + "0x39aaf0854db6eb39bc7b2e43846a76171c0445de": "1850000000000000000000", + "0xc817df1b91faf30fe3251571727c9711b45d8f06": "1999944000000000000000", + "0x7d13d6705884ab2157dd8dcc7046caf58ee94be4": "137200000000000000000000", + "0x478dc09a1311377c093f9cc8ae74111f65f82f39": "4000000000000000000000", + "0x8043ed22f997e5a2a4c16e364486ae64975692c4": "1130513000000000000000", + "0xb9a985501ee950829b17fae1c9cf348c3156542c": "294100000000000000000", + "0xd5cba5b26bea5d73fabb1abafacdef85def368cc": "200000000000000000000", + "0x6776e133d9dc354c12a951087b639650f539a433": "120000000000000000000", + "0x804ca94972634f633a51f3560b1d06c0b293b3b1": "200000000000000000000", + "0x0be1fdf626ee6189102d70d13b31012c95cd1cd6": "2000000000000000000000", + "0xf848fce9ab611c7d99206e23fac69ad488b94fe1": "48500000000000000000", + "0xf01195d657ef3c942e6cb83949e5a20b5cfa8b1e": "25760000000000000000000", + "0x78a5e89900bd3f81dd71ba869d25fec65261df15": "51900000000000000000000", + "0xd6f1e55b1694089ebcb4fe7d7882aa66c8976176": "19998846000000000000000", + "0xd5294b666242303b6df0b1c88d37429bc8c965aa": "300700000000000000000", + "0x3171877e9d820cc618fc0919b29efd333fda4934": "1000000000000000000000", + "0x2901f8077f34190bb47a8e227fa29b30ce113b31": "100000000000000000000", + "0x6b2284440221ce16a8382de5ff0229472269deec": "1000000000000000000000", + "0x1bba03ff6b4ad5bf18184acb21b188a399e9eb4a": "1790000000000000000000", + "0x80744618de396a543197ee4894abd06398dd7c27": "2000000000000000000000", + "0x1b799033ef6dc7127822f74542bb22dbfc09a308": "100000000000000000000", + "0xd513a45080ff2febe62cd5854abe29ee4467f996": "153200000000000000000", + "0xe761d27fa3502cc76bb1a608740e1403cf9dfc69": "280000000000000000000", + "0x53989ed330563fd57dfec9bd343c3760b0799390": "6208000000000000000000", + "0xccf7110d1bd9a74bfd1d7d7d2d9d55607e7b837d": "900000000000000000000", + "0xf373e9daac0c8675f53b797a160f6fc034ae6b23": "100000000000000000000", + "0xabc9a99e8a2148a55a6d82bd51b98eb5391fdbaf": "6000000000000000000000", + "0xffec0913c635baca2f5e57a37aa9fb7b6c9b6e26": "805000000000000000000", + "0x581a3af297efa4436a29af0072929abf9826f58b": "2000000000000000000000", + "0x924efa6db595b79313277e88319625076b580a10": "2000000000000000000000", + "0x65d8dd4e251cbc021f05b010f2d5dc520c3872e0": "834956000000000000000", + "0x6c67d6db1d03516c128b8ff234bf3d49b26d2941": "100000000000000000000000", + "0x496d365534530a5fc1577c0a5241cb88c4da7072": "1790000000000000000000", + "0xb85ff03e7b5fc422981fae5e9941dacbdaba7584": "1337000000000000000000", + "0xe13540ecee11b212e8b775dc8e71f374aae9b3f8": "2000000000000000000000", + "0xa02e3f8f5959a7aab7418612129b701ca1b80010": "20000000000000000000", + "0xa7a3f153cdc38821c20c5d8c8241b294a3f82b24": "500000000000000000000", + "0x366175403481e0ab15bb514615cbb989ebc68f82": "2000000000000000000000", + "0x5104ecc0e330dd1f81b58ac9dbb1a9fbf88a3c85": "100000000000000000000000", + "0xa466d770d898d8c9d405e4a0e551efafcde53cf9": "492500000000000000000", + "0x5fa8a54e68176c4fe2c01cf671c515bfbdd528a8": "330000000000000000000000", + "0xe2e15c60dd381e3a4be25071ab249a4c5c5264da": "2350502000000000000000", + "0x0628bfbe5535782fb588406bc96660a49b011af5": "1520000000000000000000", + "0x04d6b8d4da867407bb997749debbcdc0b358538a": "1000000000000000000000", + "0x0e6ec313376271dff55423ab5422cc3a8b06b22b": "4000000000000000000000", + "0x8787d12677a5ec291e57e31ffbfad105c3324b87": "12438777000000000000000", + "0x58e2f11223fc8237f69d99c6289c148c0604f742": "24000000000000000000000", + "0x5600730a55f6b20ebd24811faa3de96d1662abab": "1880000000000000000000", + "0xfce089635ce97abac06b44819be5bb0a3e2e0b37": "92491000000000000000", + "0xfa0c1a988c8a17ad3528eb28b3409daa58225f26": "200000000000000000000", + "0x7ae1c19e53c71cee4c73fae2d7fc73bf9ab5e392": "1000000000000000000000", + "0xbd17eed82b9a2592019a1b1b3c0fbad45c408d22": "250000000000000000000", + "0x884a7a39d0916e05f1c242df55607f37df8c5fda": "23400000000000000000000", + "0xca70f4ddbf069d2143bd6bbc7f696b52789b32e7": "3000000000000000000000", + "0x7b25bb9ca8e702217e9333225250e53c36804d48": "1880000000000000000000", + "0xea8317197959424041d9d7c67a3ece1dbb78bb55": "394000000000000000000", + "0x5cb953a0e42f5030812226217fffc3ce230457e4": "100000000000000000000", + "0xd1f4dc1ddb8abb8848a8b14e25f3b55a8591c266": "250000000000000000000", + "0x6a42ca971c6578d5ade295c3e7f4ad331dd3424e": "6000000000000000000000", + "0x07e1162ceae3cf21a3f62d105990302e307f4e3b": "1530000000000000000000", + "0x5d1dc3387b47b8451e55106c0cc67d6dc72b7f0b": "2000000000000000000000", + "0x5d2819e8d57821922ee445650ccaec7d40544a8d": "200000000000000000000", + "0x4c24b78baf2bafc7fcc69016426be973e20a50b2": "3000000000000000000000", + "0x630c5273126d517ce67101811cab16b8534cf9a8": "9422595000000000000000", + "0x291f929ca59b54f8443e3d4d75d95dee243cef78": "499938000000000000000", + "0x2dd325fdffb97b19995284afa5abdb574a1df16a": "500000000000000000000", + "0x4fce8429ba49caa0369d1e494db57e89eab2ad39": "200000000000000000000000", + "0x712b76510214dc620f6c3a1dd29aa22bf6d214fb": "6000000000000000000000", + "0x266f2da7f0085ef3f3fa09baee232b93c744db2e": "60000000000000000000000", + "0x0770c61be78772230cb5a3bb2429a72614a0b336": "6767695000000000000000", + "0x02dfcb17a1b87441036374b762a5d3418b1cb4d4": "1340860000000000000000", + "0x5e67df8969101adabd91accd6bb1991274af8df2": "500000000000000000000", + "0x7d9c59631e2ba2e8e82891f3979922aaa3b567a1": "8000000000000000000000", + "0x949f8c107bc7f0aceaa0f17052aadbd2f9732b2e": "2000000000000000000000", + "0xea4e809e266ae5f13cdbe38f9d0456e6386d1274": "4500000000000000000000", + "0xcd5510a242dfb0183de925fba866e312fabc1657": "2400000000000000000000", + "0xa36e0d94b95364a82671b608cb2d373245612909": "150011000000000000000", + "0x0ec46696ffac1f58005fa8439824f08eed1df89b": "10000000000000000000000", + "0xc6fb1ee37417d080a0d048923bdabab095d077c6": "200000000000000000000", + "0x53c9eca40973f63bb5927be0bc6a8a8be1951f74": "2000000000000000000000", + "0xea14bfda0a6e76668f8788321f07df37824ec5df": "200000000000000000000000", + "0xdfb4d4ade52fcc818acc7a2c6bb2b00224658f78": "7750000000000000000000", + "0x5997ffefb3c1d9d10f1ae2ac8ac3c8e2d2292783": "1000000000000000000000", + "0x8eceb2e124536c5b5ffc640ed14ff15ed9a8cb71": "2000000000000000000000", + "0x8f02bda6c36922a6be6a509be51906d393f7b99b": "1019835000000000000000", + "0x530077c9f7b907ff9cec0c77a41a70e9029add4a": "2000000000000000000000", + "0x08936a37df85b3a158cafd9de021f58137681347": "18200000000000000000", + "0x8e9c429266df057efa78dd1d5f77fc40742ad466": "300061000000000000000", + "0xacc59f3b30ceffc56461cc5b8df48902240e0e7b": "2000000000000000000000", + "0xf5534815dc635efa5cc84b2ac734723e21b29372": "1580000000000000000000", + "0xf873e57a65c93b6e18cb75f0dc077d5b8933dc5c": "197000000000000000000", + "0x25b78c9fad85b43343f0bfcd0fac11c9949ca5eb": "2000000000000000000000", + "0xaad2b7f8106695078e6c138ec81a7486aaca1eb2": "200000000000000000000", + "0x509c8668036d143fb8ae70b11995631f3dfcad87": "1000000000000000000000", + "0x3602458da86f6d6a9d9eb03daf97fe5619d442fa": "2000000000000000000000", + "0x9f607b3f12469f446121cebf3475356b71b4328c": "4000000000000000000000", + "0xfe3827d57630cf8761d512797b0b858e478bbd12": "20000000000000000000", + "0x9d9c4efe9f433989e23be94049215329fa55b4cb": "256215000000000000000", + "0x9bd905f1719fc7acd0159d4dc1f8db2f21472338": "1000000000000000000000", + "0x7d82e523cc2dc591da3954e8b6bb2caf6461e69c": "2316058000000000000000", + "0x74afe54902d615782576f8baac13ac970c050f6e": "177670000000000000000", + "0xaff11ccf699304d5f5862af86083451c26e79ae5": "1999000000000000000000", + "0x3885fee67107dc3a3c741ee290c98918c9b99397": "20000000000000000000", + "0x36343aeca07b6ed58a0e62fa4ecb498a124fc971": "300000000000000000000", + "0xc94a28fb3230a9ddfa964e770f2ce3c253a7be4f": "200000000000000000000", + "0x9882967cee68d2a839fad8ab4a7c3dddf6c0adc8": "1336866000000000000000", + "0x95df4e3445d7662624c48eba74cf9e0a53e9f732": "56000000000000000000000", + "0xca9faa17542fafbb388eab21bc4c94e8a7b34788": "1999999000000000000000", + "0xc8b1850525d946f2ae84f317b15188c536a5dc86": "2685000000000000000000", + "0x39bac68d947859f59e9226089c96d62e9fbe3cde": "40000000000000000000", + "0xa9bfc410dddb20711e45c07387eab30a054e19ac": "1154750000000000000000", + "0x540a1819bd7c35861e791804e5fbb3bc97c9abb1": "1454400000000000000000", + "0x667b61c03bb937a9f5d0fc5a09f1ea3363c77035": "4250000000000000000000", + "0x010df1df4bed23760d2d1c03781586ddf7918e54": "60000000000000000000", + "0xbd51ee2ea143d7b1d6b77e7e44bdd7da12f485ac": "1318800000000000000000", + "0xfb5125bf0f5eb0b6f020e56bfc2fdf3d402c097e": "5910000000000000000000", + "0x3f0c83aac5717962734e5ceaeaecd39b28ad06be": "2000000000000000000000", + "0xf10661ff94140f203e7a482572437938bec9c3f7": "20000000000000000000000", + "0xbd3097a79b3c0d2ebff0e6e86ab0edadbed47096": "1670000000000000000000", + "0xedeb4894aadd0081bbddd3e8846804b583d19f27": "2000000000000000000000", + "0x49c9771fca19d5b9d245c891f8158fe49f47a062": "10000000000000000000000", + "0x6405dd13e93abcff377e700e3c1a0086eca27d29": "18200000000000000000", + "0xce5e04f0184369bcfa06aca66ffa91bf59fa0fb9": "40000000000000000000", + "0x4364309a9fa07095600f79edc65120cdcd23dc64": "10000000000000000000000", + "0xb749b54e04d5b19bdcedfb84da7701ab478c27ae": "2680000000000000000000", + "0xf593c65285ee6bbd6637f3be8f89ad40d489f655": "3000000000000000000000", + "0xd224f880f9479a89d32f09e52be990b288135cef": "17300000000000000000000", + "0x85bb51bc3bfe9a1b2a2f6b1cda95bca8b38c8d5e": "321750000000000000000", + "0xcaf4481d9db78dc4f25f7b4ac8bd3b1ca0106b31": "5000000000000000000000", + "0x51ca8bd4dc644fac47af675563d5804a0da21eeb": "788000000000000000000", + "0x19f643e1a8fa04ae16006028138333a59a96de87": "20000000000000000000", + "0x58b808a65b51e6338969afb95ec70735e451d526": "39998000000000000000000", + "0x574921838cc77d6c98b17d903a3ae0ee0da95bd0": "53480000000000000000000", + "0x7c6924d07c3ef5891966fe0a7856c87bef9d2034": "2000000000000000000000", + "0xf9767e4ecb4a5980527508d7bec3d45e4c649c13": "1910000000000000000000", + "0xf3be99b9103ce7550aa74ff1db18e09dfe32e005": "2000000000000000000000", + "0x625644c95a873ef8c06cdb9e9f6d8d7680043d62": "1800000000000000000000", + "0x6a44af96b3f032ae641beb67f4b6c83342d37c5d": "29000000000000000000", + "0xd3a10ec7a5c9324999dd9e9b6bde7c911e584bda": "600000000000000000000", + "0xe8ddbed732ebfe754096fde9086b8ea4a4cdc616": "2000000000000000000000", + "0x235fa66c025ef5540070ebcf0d372d8177c467ab": "33400000000000000000000", + "0x4d08471d68007aff2ae279bc5e3fe4156fbbe3de": "40000000000000000000000", + "0xdadc00ab7927603c2fcf31cee352f80e6c4d6351": "1999664000000000000000", + "0x7393cbe7f9ba2165e5a7553500b6e75da3c33abf": "100000000000000000000", + "0x77617ebc4bebc5f5ddeb1b7a70cdeb6ae2ffa024": "1970000000000000000000", + "0x7fea1962e35d62059768c749bedd96cab930d378": "2000000000000000000000", + "0x243b3bca6a299359e886ce33a30341fafe4d573d": "20000000000000000000000", + "0xb94d47b3c052a5e50e4261ae06a20f45d8eee297": "2000000000000000000000", + "0xe727e67ef911b81f6cf9c73fcbfebc2b02b5bfc6": "2000000000000000000000", + "0xe510d6797fba3d6693835a844ea2ad540691971b": "17381000000000000000000", + "0x0cdc960b998c141998160dc179b36c15d28470ed": "500038000000000000000", + "0x3e76a62db187aa74f63817533b306cead0e8cebe": "31200000000000000000000", + "0x495b641b1cdea362c3b4cbbd0f5cc50b1e176b9c": "1000000000000000000000", + "0x5126460d692c71c9af6f05574d93998368a23799": "52000000000000000000", + "0xa008019863c1a77c1499eb39bbd7bf2dd7a31cb9": "137000000000000000000", + "0x65ee20b06d9ad589a7e7ce04b9f5f795f402aece": "2000000000000000000000", + "0xf432b9dbaf11bdbd73b6519fc0a904198771aac6": "152000000000000000000", + "0x85946d56a4d371a93368539690b60ec825107454": "1730000000000000000000", + "0x26f9f7cefd7e394b9d3924412bf2c2831faf1f85": "4000000000000000000000", + "0xd4ebb1929a23871cf77fe049ab9602be08be0a73": "1910000000000000000000", + "0x4fdac1aa517007e0089430b3316a1badd12c01c7": "500000000000000000000", + "0x05e671de55afec964b074de574d5158d5d21b0a3": "3940000000000000000000", + "0x20181c4b41f6f972b66958215f19f570c15ddff1": "1600000000000000000000", + "0xcc9519d1f3985f6b255eaded12d5624a972721e1": "1000000000000000000000", + "0x169bbefc41cfd7d7cbb8dfc63020e9fb06d49546": "2000000000000000000000", + "0x175a183a3a235ffbb03ba835675267229417a091": "16000000000000000000000", + "0x8dde3cb8118568ef4503fe998ccdf536bf19a098": "4000000000000000000000", + "0x6a05b21c4f17f9d73f5fb2b0cb89ff5356a6cc7e": "1500000000000000000000", + "0x5cc4cba621f220637742057f6055b80dffd77e13": "39997692000000000000000", + "0xecb94c568bfe59ade650645f4f26306c736cace4": "267400000000000000000", + "0xdfa6b8b8ad3184e357da282951d79161cfb089bc": "400000000000000000000", + "0xa3058c51737a4e96c55f2ef6bd7bb358167ec2a7": "606093000000000000000", + "0x051d424276b21239665186133d653bb8b1862f89": "1000000000000000000000", + "0xd05ffb2b74f867204fe531653b0248e21c13544e": "1000000000000000000000", + "0xe1f63ebbc62c7b7444040eb99623964f7667b376": "20000000000000000000", + "0xe5a3d7eb13b15c100177236d1beb30d17ee15420": "2000000000000000000000", + "0x18fa8625c9dc843c78c7ab259ff87c9599e07f10": "1000000000000000000000", + "0x64264aedd52dcae918a012fbcd0c030ee6f71821": "1000000000000000000000", + "0x6f1f4907b8f61f0c51568d692806b382f50324f5": "2000000000000000000000", + "0xbecef61c1c442bef7ce04b73adb249a8ba047e00": "1000400000000000000000", + "0x7b893286427e72db219a21fc4dcd5fbf59283c31": "10000000000000000000000", + "0xce5eb63a7bf4fbc2f6e4baa0c68ab1cb4cf98fb4": "2000000000000000000000", + "0x66ec16ee9caab411c55a6629e318de6ee216491d": "865000000000000000000", + "0x30b66150f1a63457023fdd45d0cc6cb54e0c0f06": "1000000000000000000000", + "0x87183160d172d2e084d327b86bcb7c1d8e6784ef": "4000086000000000000000", + "0xc420388fbee84ad656dd68cdc1fbaa9392780b34": "187767000000000000000", + "0x90f774c9147dde90853ddc43f08f16d455178b8c": "4000000000000000000000", + "0x1e1d7a5f2468b94ea826982dbf2125793c6e4a5a": "999940000000000000000", + "0x8043fdd0bc4c973d1663d55fc135508ec5d4f4fa": "20000000000000000000", + "0x7bca1da6c80a66baa5db5ac98541c4be276b447d": "679000000000000000000", + "0x73550beb732ba9ddafda7ae406e18f7feb0f8bb2": "2800000000000000000000", + "0xadc19ec835afe3e58d87dc93a8a9213c90451326": "1971200000000000000000", + "0x821d798af19989c3ae5b84a7a7283cd7fda1fabe": "20000000000000000000000", + "0x4c4e6f13fb5e3f70c3760262a03e317982691d10": "100000000000000000000", + "0x664e43119870af107a448db1278b044838ffcdaf": "400000000000000000000", + "0x8da1178f55d97772bb1d24111a404a4f8715b95d": "878149000000000000000", + "0x5e6e9747e162f8b45c656e0f6cae7a84bac80e4e": "2000000000000000000000", + "0xc7eac31abce6d5f1dea42202b6a674153db47a29": "591000000000000000000", + "0xd96711540e2e998343d4f590b6fc8fac3bb8b31d": "1758944000000000000000", + "0x9da4ec407077f4b9707b2d9d2ede5ea5282bf1df": "4000000000000000000000", + "0xf60c1b45f164b9580e20275a5c39e1d71e35f891": "2000000000000000000000", + "0xeb6394a7bfa4d28911d5a5b23e93f35e340c2294": "78000000000000000000", + "0xa89ac93b23370472daac337e9afdf642543f3e57": "10000000000000000000000", + "0xbb618e25221ad9a740b299ed1406bc3934b0b16d": "1000000000000000000000", + "0x817ac33bd8f847567372951f4a10d7a91ce3f430": "200015000000000000000", + "0xfe6a895b795cb4bf85903d3ce09c5aa43953d3bf": "3400000000000000000000", + "0x3673954399f6dfbe671818259bb278e2e92ee315": "200000000000000000000000", + "0xdf0ff1f3d27a8ec9fb8f6b0cb254a63bba8224a5": "4367636000000000000000", + "0xff12e49d8e06aa20f886293c0b98ed7eff788805": "4000000000000000000000", + "0x5aef16a226dd68071f2483e1da42598319f69b2c": "2000000000000000000000", + "0x0266ab1c6b0216230b9395443d5fa75e684568c6": "1000000000000000000000", + "0x14a7352066364404db50f0d0d78d754a22198ef4": "1880000000000000000000", + "0x444caf79b71338ee9aa7c733b02acaa7dc025948": "40000000000000000000", + "0x64e2de21200b1899c3a0c0653b5040136d0dc842": "20000000000000000000000", + "0x36e156610cd8ff64e780d89d0054385ca76755aa": "14000000000000000000000", + "0x0a6ebe723b6ed1f9a86a69ddda68dc47465c2b1b": "1185000000000000000000", + "0x38bf2a1f7a69de0e2546adb808b36335645da9ff": "2000320000000000000000", + "0x39f44663d92561091b82a70dcf593d754005973a": "199999000000000000000", + "0x24b9e6644f6ba4cde126270d81f6ab60f286dff4": "133700000000000000000", + "0x9b59eb213b1e7565e45047e04ea0374f10762d16": "2000000000000000000000", + "0x309544b6232c3dd737f945a03193d19b5f3f65b9": "1087440000000000000000", + "0xb28bb39f3466517cd46f979cf59653ee7d8f152e": "450000000000000000000", + "0x9da8e22ca10e67fea44e525e4751eeac36a31194": "260000000000000000000", + "0x4f8ae80238e60008557075ab6afe0a7f2e74d729": "100000000000000000000", + "0x74ed33acf43f35b98c9230b9e6642ecb5330839e": "681872000000000000000", + "0x22842ab830da509913f81dd1f04f10af9edd1c55": "2000000000000000000000", + "0xa8f37f0ab3a1d448a9e3ce40965f97a646083a34": "329800000000000000000", + "0x582b70669c97aab7d68148d8d4e90411e2810d56": "999972000000000000000", + "0xd5e55100fbd1956bbed2ca518d4b1fa376032b0b": "100000000000000000000", + "0xb7cc6b1acc32d8b295df68ed9d5e60b8f64cb67b": "300000000000000000000", + "0xe081ca1f4882db6043d5a9190703fde0ab3bf56d": "400000000000000000000", + "0xc02077449a134a7ad1ef7e4d927affeceeadb5ae": "18200000000000000000", + "0xe09fea755aee1a44c0a89f03b5deb762ba33006f": "1100070000000000000000", + "0xb3717731dad65132da792d876030e46ac227bb8a": "1000000000000000000000", + "0x157eb3d3113bd3b597714d3a954edd018982a5cb": "2000000000000000000000", + "0xdc57345b38e0f067c9a31d9deac5275a10949321": "200000000000000000000", + "0x40ea5044b204b23076b1a5803bf1d30c0f88871a": "14000000000000000000000", + "0x2bab0fbe28d58420b52036770a12f9952aea6911": "3820000000000000000000", + "0xadaa0e548c035affed64ca678a963fabe9a26bfd": "70000000000000000000", + "0xbb48eaf516ce2dec3e41feb4c679e4957641164f": "3820000000000000000000", + "0x7693bdeb6fc82b5bca721355223175d47a084b4d": "22000000000000000000000", + "0x03cb98d7acd817de9d886d22fab3f1b57d92a608": "1600000000000000000000", + "0xf88900db737955b1519b1a7d170a18864ce590eb": "18200000000000000000", + "0x757fa55446c460968bb74b5ebca96c4ef2c709c5": "1015200000000000000000", + "0xda855d53477f505ec4c8d5e8bb9180d38681119c": "5600000000000000000000", + "0xe41aea250b877d423a63ba2bce2f3a61c0248d56": "260000000000000000000", + "0x8262169b615870134eb4ac6c5f471c6bf2f789fc": "462500000000000000000", + "0x66b0c100c49149935d14c0dc202cce907cea1a3d": "1970000000000000000000", + "0x854c0c469c246b83b5d1b3eca443b39af5ee128a": "1600000000000000000000", + "0xeb6810691d1ae0d19e47bd22cebee0b3ba27f88a": "2499922000000000000000", + "0x24dcc24bd9c7210ceacfb30da98ae04a4d7b8ab9": "1000000000000000000000", + "0xe31b4eef184c24ab098e36c802714bd4743dd0d4": "200000000000000000000", + "0x99b8c824869de9ed24f3bff6854cb6dd45cc3f9f": "1880000000000000000000", + "0x2ae73a79aea0278533accf21070922b1613f8f32": "3097417000000000000000", + "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a": "10000000000000000000000", + "0x1b4bbcb18165211b265b280716cb3f1f212176e8": "472325000000000000000", + "0xe177e0c201d335ba3956929c571588b51c5223ae": "2000000000000000000000", + "0x1945fe377fe6d4b71e3e791f6f17db243c9b8b0f": "2185500000000000000000", + "0x3e9b34a57f3375ae59c0a75e19c4b641228d9700": "17900000000000000000", + "0xa4d6c82eddae5947fbe9cdfbd548ae33d91a7191": "8000000000000000000000", + "0xbad4425e171c3e72975eb46ac0a015db315a5d8f": "2000000000000000000000", + "0xa2d2aa626b09d6d4e4b13f7ffc5a88bd7ad36742": "4639390000000000000000", + "0xb61c34fcacda701a5aa8702459deb0e4ae838df8": "35000000000000000000000", + "0x145e0600e2a927b2dd8d379356b45a2e7d51d3ae": "2545843000000000000000", + "0x8df339214b6ad1b24663ce716034749d6ef838d9": "11000000000000000000000", + "0x8fd9a5c33a7d9edce0997bdf77ab306424a11ea9": "2000000000000000000000", + "0x097da12cfc1f7c1a2464def08c29bed5e2f851e9": "20000000000000000000", + "0xddabf13c3c8ea4e3d73d78ec717afafa430e5479": "41600000000000000000000", + "0x9eeb07bd2b7890195e7d46bdf2071b6617514ddb": "2000000000000000000000", + "0x819af9a1c27332b1c369bbda1b3de1c6e933d640": "314308000000000000000", + "0xd7d2c6fca8ad1f75395210b57de5dfd673933909": "340000000000000000000", + "0xcdd5d881a7362c9070073bdfbc75e72453ac510e": "842000000000000000000", + "0xe9ac36376efa06109d40726307dd1a57e213eaa9": "194000000000000000000", + "0x1bea4df5122fafdeb3607eddda1ea4ffdb9abf2a": "346000000000000000000", + "0x3e5e93fb4c9c9d1246f8f247358e22c3c5d17b6a": "150000000000000000000", + "0x6c1ddd33c81966dc8621776071a4129482f2c65f": "40000000000000000000000", + "0x2ccb66494d0af689abf9483d365d782444e7dead": "1000000000000000000000", + "0x19571a2b8f81c6bcf66ab3a10083295617150003": "492500000000000000000", + "0x38ac664ee8e0795e4275cb852bcba6a479ad9c8d": "20000000000000000000", + "0xc4803bb407c762f90b7596e6fde194931e769590": "4000000000000000000000", + "0x93507e9e8119cbceda8ab087e7ecb071383d6981": "14000000000000000000000", + "0xb672734afcc224e2e609fc51d4f059732744c948": "295500000000000000000", + "0xfbbbebcfbe235e57dd2306ad1a9ec581c7f9f48f": "40000000000000000000", + "0x8c81410ea8354cc5c65c41be8bd5de733c0b111d": "9550000000000000000000", + "0x942c6b8c955bc0d88812678a236725b32739d947": "1550000000000000000000", + "0xd2e817738abf1fb486583f80c350318bed860c80": "240010000000000000000", + "0xbff5df769934b8943ca9137d0efef2fe6ebbb34e": "100000000000000000000", + "0x6c4e426e8dc005dfa3516cb8a680b02eea95ae8e": "1337000000000000000000", + "0xf645dd7c890093e8e4c8aa92a6bb353522d3dc98": "134000000000000000000", + "0x4bac846af4169f1d95431b341d8800b22180af1a": "20000000000000000000", + "0x0514954c3c2fb657f9a06f510ea22748f027cdd3": "400000000000000000000", + "0x163dca73d7d6ea3f3e6062322a8734180c0b78ef": "2941400000000000000000", + "0xfeaca2ac74624bf348dac9985143cfd652a4be55": "26148245000000000000000", + "0xfe80e9232deaff19baf99869883a4bdf0004e53c": "855680000000000000000", + "0x17108dab2c50f99de110e1b3b3b4cd82f5df28e7": "980000000000000000000", + "0x837a645dc95c49549f899c4e8bcf875324b2f57c": "600400000000000000000", + "0x762998e1d75227fced7a70be109a4c0b4ed86414": "20000000000000000000", + "0xc0a7e8435dff14c25577739db55c24d5bf57a3d9": "49250000000000000000000", + "0xaead88d689416b1c91f2364421375b7d3c70fb2e": "2000000000000000000000", + "0x9279b2228cec8f7b4dda3f320e9a0466c2f585ca": "5000000000000000000000", + "0x36726f3b885a24f92996da81625ec8ad16d8cbe6": "1543723000000000000000", + "0x3951e48e3c869e6b72a143b6a45068cdb9d466d0": "20000000000000000000", + "0xf5d61ac4ca95475e5b7bffd5f2f690b316759615": "31040000000000000000000", + "0x158a0d619253bf4432b5cd02c7b862f7c2b75636": "135733000000000000000", + "0xe56d431324c92911a1749df292709c14b77a65cd": "8200000000000000000000", + "0x9976947eff5f6ae5da08dd541192f378b428ff94": "8000000000000000000000", + "0x83210583c16a4e1e1dac84ebd37e3d0f7c57eba4": "2000000000000000000000", + "0xdcb64df43758c7cf974fa660484fbb718f8c67c1": "20000000000000000000000", + "0xd4205592844055b3c7a1f80cefe3b8eb509bcde7": "178973000000000000000", + "0xd0648a581b3508e135a2935d12c9657045d871ca": "8022000000000000000000", + "0xe7d17524d00bad82497c0f27156a647ff51d2792": "20000000000000000000", + "0x21582e99e502cbf3d3c23bdffb76e901ac6d56b2": "100000000000000000000", + "0xe61f280915c774a31d223cf80c069266e5adf19b": "880000000000000000000", + "0x03c91d92943603e752203e05340e566013b90045": "802200000000000000000", + "0x22561c5931143536309c17e832587b625c390b9a": "4000000000000000000000", + "0xe399c81a1d701b44f0b66f3399e66b275aaaf8c1": "1000000000000000000000", + "0x7f8dbce180ed9c563635aad2d97b4cbc428906d9": "2674000000000000000000", + "0x9f61beb46f5e853d0a8521c7446e68e34c7d0973": "560000000000000000000", + "0x6d3f2ba856ccbb0237fa7661156b14b013f21240": "1000000000000000000000", + "0x5f742e487e3ab81af2f94afdbe1b9b8f5ccc81bc": "2172412000000000000000", + "0xb600feab4aa96c537504d96057223141692c193a": "400000000000000000000", + "0xfab487500df20fb83ebed916791d561772adbebf": "1999980000000000000000", + "0xf8704c16d2fd5ba3a2c01d0eb20484e6ecfa3109": "200000000000000000000", + "0x3f1bc420c53c002c9e90037c44fe6a8ef4ddc962": "173000000000000000000", + "0x82e577b515cb2b0860aafe1ce09a59e09fe7d040": "600000000000000000000", + "0xbc999e385c5aebcac8d6f3f0d60d5aa725336d0d": "2000000000000000000000", + "0xe16ce35961cd74bd590d04c4ad4a1989e05691c6": "146000000000000000000", + "0xeb76424c0fd597d3e341a9642ad1ee118b2b579d": "4000000000000000000000", + "0xc440c7ca2f964b6972ef664a2261dde892619d9c": "20000000000000000000000", + "0x460d5355b2ceeb6e62107d81e51270b26bf45620": "2005500000000000000000", + "0xfcada300283f6bcc134a91456760b0d77de410e0": "2000000000000000000000", + "0xbe8d7f18adfe5d6cc775394989e1930c979d007d": "1000000000000000000000", + "0xa7f9220c8047826bd5d5183f4e676a6d77bfed36": "153368000000000000000", + "0x98d204f9085f8c8e7de23e589b64c6eff692cc63": "2000000000000000000000", + "0x5a2916b8d2e8cc12e207ab464d433e2370d823d9": "2000000000000000000000", + "0xc42d6aeb710e3a50bfb44d6c31092969a11aa7f3": "150052000000000000000", + "0x04ce45f600db18a9d0851b29d9393ebdaafe3dc5": "20000000000000000000", + "0x7a1370a742ec2687e761a19ac5a794329ee67404": "2999988000000000000000", + "0xda2ad58e77deddede2187646c465945a8dc3f641": "660000000000000000000", + "0xec58bc0d0c20d8f49465664153c5c196fe59e6be": "400000000000000000000", + "0xf8063af4cc1dd9619ab5d8bff3fcd1faa8488221": "2000000000000000000000", + "0xb9231eb26e5f9e4b4d288f03906704fab96c87d6": "19700000000000000000000", + "0x6e5c2d9b1c546a86eefd5d0a5120c9e4e730190e": "199600000000000000000", + "0xe49936a92a8ccf710eaac342bc454b9b14ebecb1": "2000000000000000000000", + "0x21dbdb817a0d8404c6bdd61504374e9c43c9210e": "9999917000000000000000", + "0x5cebe30b2a95f4aefda665651dc0cf7ef5758199": "18200000000000000000", + "0x597038ff91a0900cbbab488af483c790e6ec00a0": "10000000000000000000000", + "0x0fa5d8c5b3f294efd495ab69d768f81872508548": "2000000000000000000000", + "0xfeef3b6eabc94affd3310c1c4d0e65375e131119": "20000000000000000000", + "0x1ce81d31a7923022e125bf48a3e03693b98dc9dd": "2000000000000000000000", + "0x5887dc6a33dfed5ac1edefe35ef91a216231ac96": "250000000000000000000", + "0x4e8e47ae3b1ef50c9d54a38e14208c1abd3603c2": "2235000000000000000000", + "0xe845e387c4cbdf982280f6aa01c40e4be958ddb2": "25000000000000000000000", + "0x71d9494e50c5dd59c599dba3810ba1755e6537f0": "4000000000000000000000", + "0x6eb5578a6bb7c32153195b0d8020a6914852c059": "660000000000000000000000", + "0x543f8c674e2462d8d5daa0e80195a8708e11a29e": "63940000000000000000", + "0xa0459ef3693aacd1647cd5d8929839204cef53be": "1000000000000000000000", + "0xdda371e600d30688d4710e088e02fdf2b9524d5f": "6920000000000000000000", + "0xdd4dd6d36033b0636fcc8d0938609f4dd64f4a86": "60000000000000000000", + "0x3bd624b548cb659736907ed8aa3c0c705e24b575": "2000000000000000000000", + "0x414599092e879ae25372a84d735af5c4e510cd6d": "400000000000000000000", + "0x3d66cd4bd64d5c8c1b5eea281e106d1c5aad2373": "1951100000000000000000", + "0x5948bc3650ed519bf891a572679fd992f8780c57": "197000000000000000000", + "0x8b74a7cb1bb8c58fce267466a30358adaf527f61": "13620000000000000000000", + "0x3f10800282d1b7ddc78fa92d8230074e1bf6aeae": "4925000000000000000000", + "0x32dbb6716c54e83165829a4abb36757849b6e47d": "1000000000000000000000", + "0xe6b3ac3f5d4da5a8857d0b3f30fc4b2b692b77d7": "1460000000000000000000", + "0x052a58e035f1fe9cdd169bcf20970345d12b9c51": "1490000000000000000000", + "0x581bdf1bb276dbdd86aedcdb397a01efc0e00c5b": "1000000000000000000000", + "0x604e9477ebf4727c745bcabbedcb6ccf29994022": "1000060000000000000000", + "0x59b96deb8784885d8d3b4a166143cc435d2555a1": "1337000000000000000000", + "0x37d980a12ee3bf23cc5cdb63b4ae45691f74c837": "2000000000000000000000", + "0x3bfbd3847c17a61cf3f17b52f8eba1b960b3f39f": "3000000000000000000000", + "0x49c941e0e5018726b7290fc473b471d41dae80d1": "500000000000000000000", + "0xf26bcedce3feadcea3bc3e96eb1040dfd8ffe1a0": "775000000000000000000", + "0xd0944aa185a1337061ae20dc9dd96c83b2ba4602": "200000000000000000000", + "0x904caa429c619d940f8e6741826a0db692b19728": "1000000000000000000000", + "0xb95c9b10aa981cf4a67a71cc52c504dee8cf58bd": "4000000000000000000000", + "0x15874686b6733d10d703c9f9bec6c52eb8628d67": "2000000000000000000000", + "0x1374facd7b3f8d68649d60d4550ee69ff0484133": "269700000000000000000", + "0xb0e469c886593815b3495638595daef0665fae62": "1940000000000000000000", + "0x47ff6feb43212060bb1503d7a397fc08f4e70352": "2000000000000000000000", + "0xc60b04654e003b4683041f1cbd6bc38fda7cdbd6": "2000000000000000000000", + "0x3ecdb532e397579662b2a46141e78f8235936a5f": "66850000000000000000", + "0xb3a8c2cb7d358e5739941d945ba9045a023a8bbb": "1000000000000000000000", + "0x32ef5cdc671df5562a901aee5db716b9be76dcf6": "2000000000000000000000", + "0xc94110e71afe578aa218e4fc286403b0330ace8d": "2000000000000000000000", + "0x9b43dcb95fde318075a567f1e6b57617055ef9e8": "3940000000000000000000", + "0xefeea010756f81da4ba25b721787f058170befbd": "32470000000000000000", + "0xc88255eddcf521c6f81d97f5a42181c9073d4ef1": "290793000000000000000", + "0xdd47189a3e64397167f0620e484565b762bfbbf4": "1850000000000000000000", + "0x82f39b2758ae42277b86d69f75e628d958ebcab0": "40000000000000000000000", + "0xe37f5fdc6ec97d2f866a1cfd0d3a4da4387b22b5": "10000000000000000000000", + "0x62331df2a3cbee3520e911dea9f73e905f892505": "2000000000000000000000", + "0x8c5d16ed65e3ed7e8b96ca972bc86173e3500b03": "2000000000000000000000", + "0x8b9841862e77fbbe919470935583a93cf027e450": "2000054000000000000000", + "0xc8dd27f16bf22450f5771b9fe4ed4ffcb30936f4": "197000000000000000000", + "0xdec8a1a898f1b895d8301fe64ab3ad5de941f689": "787803000000000000000", + "0x61c4ee7c864c4d6b5e37ea1331c203739e826b2f": "30063000000000000000", + "0x3250e3e858c26adeccadf36a5663c22aa84c4170": "5000000000000000000000", + "0x299e0bca55e069de8504e89aca6eca21d38a9a5d": "55500000000000000000", + "0xd50f7fa03e389876d3908b60a537a6706304fb56": "100000000000000000000", + "0x69073269729e6414b26ec8dc0fd935c73b579f1e": "30000000000000000000000", + "0x14fcd1391e7d732f41766cdacd84fa1deb9ffdd2": "2000000000000000000000", + "0x823768746737ce6da312d53e54534e106f967cf3": "20000000000000000000", + "0x882f75708386653c80171d0663bfe30b017ed0ad": "2000000000000000000000", + "0xa25b086437fd2192d0a0f64f6ed044f38ef3da32": "335000000000000000000", + "0x5a9c8b69fc614d69564999b00dcb42db67f97e90": "3429227000000000000000", + "0xa2b701f9f5cdd09e4ba62baebae3a88257105885": "1000000000000000000000", + "0x5e7b8c54dc57b0402062719dee7ef5e37ea35d62": "2877224000000000000000", + "0x7ffabfbc390cbe43ce89188f0868b27dcb0f0cad": "6370000000000000000000", + "0xb5cdbc4115406f52e5aa85d0fea170d2979cc7ba": "1337000000000000000000", + "0x263814309de4e635cf585e0d365477fc40e66cf7": "146000000000000000000", + "0x24cff0e9336a9f80f9b1cb968caf6b1d1c4932a4": "200200000000000000000", + "0xd3a941c961e8ca8b1070f23c6d6d0d2a758a4444": "200000000000000000000", + "0xa97beb3a48c45f1528284cb6a95f7de453358ec6": "31000000000000000000000", + "0x4dd131c74a068a37c90aded4f309c2409f6478d3": "400008000000000000000", + "0x653675b842d7d8b461f722b4117cb81dac8e639d": "31000000000000000000", + "0x561be9299b3e6b3e63b79b09169d1a948ae6db01": "500000000000000000000", + "0xdc067ed3e12d711ed475f5156ef7e71a80d934b9": "9550000000000000000000", + "0x08d97eadfcb7b064e1ccd9c8979fbee5e77a9719": "266063000000000000000", + "0x6e4c2ab7db026939dbd3bc68384af660a61816b2": "167000000000000000000", + "0xbf4c73a7ede7b164fe072114843654e4d8781dde": "2000000000000000000000", + "0xf504943aaf16796e0b341bbcdf21d11cc586cdd1": "9000000000000000000000", + "0xea81ca8638540cd9d4d73d060f2cebf2241ffc3e": "1970000000000000000000", + "0x9944fee9d34a4a880023c78932c00b59d5c82a82": "750022000000000000000", + "0x12f460ae646cd2780fd35c50a6af4b9accfa85c6": "1000000000000000000000", + "0x4e232d53b3e6be8f895361d31c34d4762b12c82e": "1760000000000000000000", + "0x6bb2aca23fa1626d18efd6777fb97db02d8e0ae4": "40000000000000000000000", + "0xbc4e471560c99c8a2a4b1b1ad0c36aa6502b7c4b": "12000000000000000000000", + "0x2e2cbd7ad82547b4f5ff8b3ab56f942a6445a3b0": "200000000000000000000", + "0x21ecb2dfa65779c7592d041cd2105a81f4fd4e46": "1000000000000000000000", + "0x34318625818ec13f11835ae97353ce377d6f590a": "1520000000000000000000", + "0xa7ef35ce87eda6c28df248785815053ec97a5045": "4999998000000000000000", + "0x6a514e6242f6b68c137e97fea1e78eb555a7e5f7": "20000000000000000000", + "0x9340b5f678e45ee05eb708bb7abb6ec8f08f1b6b": "6000000000000000000000", + "0x43cc08d0732aa58adef7619bed46558ad7774173": "4443926000000000000000", + "0x12e9a4ad2ad57484dd700565bddb46423bd9bd31": "19999800000000000000000", + "0xebbeeb259184a6e01cccfc2207bbd883785ac90a": "619966000000000000000", + "0x704ab1150d5e10f5e3499508f0bf70650f028d4b": "4000000000000000000000", + "0xfc361105dd90f9ede566499d69e9130395f12ac8": "395000000000000000000000", + "0xc1b9a5704d351cfe983f79abeec3dbbbae3bb629": "20000000000000000000", + "0x66f50406eb1b11a946cab45927cca37470e5a208": "2000000000000000000000", + "0x53942e7949d6788bb780a7e8a0792781b1614b84": "15899600000000000000000", + "0x32ba9a7d0423e03a525fe2ebeb661d2085778bd8": "20000000000000000000000", + "0x11c0358aa6479de21866fe21071924b65e70f8b9": "36400000000000000000000", + "0x76cb9c8b69f4387675c48253e234cb7e0d74a426": "7396300000000000000000", + "0x9f5f44026b576a4adb41e95961561d41039ca391": "250000000000000000000", + "0x533a73a4a2228eee05c4ffd718bbf3f9c1b129a7": "6000000000000000000000", + "0xdcc52d8f8d9fc742a8b82767f0555387c563efff": "500000000000000000000", + "0xf456a75bb99655a7412ce97da081816dfdb2b1f2": "200000000000000000000", + "0xd0c101fd1f01c63f6b1d19bc920d9f932314b136": "20000000000000000000000", + "0xdabc225042a6592cfa13ebe54efa41040878a5a2": "259550000000000000000", + "0x38eec6e217f4d41aa920e424b9525197041cd4c6": "4428166000000000000000", + "0x8a247d186510809f71cffc4559471c3910858121": "1790000000000000000000", + "0x4f152b2fb8659d43776ebb1e81673aa84169be96": "2000000000000000000000", + "0xb4496ddb27799a222457d73979116728e8a1845b": "2610331000000000000000", + "0x4a4053b31d0ee5dbafb1d06bd7ac7ff3222c47d6": "1400000000000000000000", + "0x0f7bea4ef3f73ae0233df1e100718cbe29310bb0": "2000000000000000000000", + "0xc836e24a6fcf29943b3608e662290a215f6529ea": "292000000000000000000", + "0x1765361c2ec2f83616ce8363aae21025f2566f40": "5000000000000000000000", + "0xb6e6c3222b6b6f9be2875d2a89f127fb64100fe2": "8008000000000000000000", + "0x01bbc14f67af0639aab1441e6a08d4ce7162090f": "1309500000000000000000", + "0xaf2058c7282cf67c8c3cf930133c89617ce75d29": "6920000000000000000000", + "0x464d9c89cce484df000277198ed8075fa63572d1": "20000000000000000000", + "0x50cd97e9378b5cf18f173963236c9951ef7438a5": "1400000000000000000000", + "0xcb47bd30cfa8ec5468aaa6a94642ced9c819c8d4": "4000000000000000000000", + "0x6b10f8f8b3e3b60de90aa12d155f9ff5ffb22c50": "2000000000000000000000", + "0x09b7a988d13ff89186736f03fdf46175b53d16e0": "6000000000000000000000", + "0x5bfafe97b1dd1d712be86d41df79895345875a87": "500000000000000000000", + "0xa06cd1f396396c0a64464651d7c205efaf387ca3": "1999944000000000000000", + "0xfc0096b21e95acb8d619d176a4a1d8d529badbef": "384601000000000000000", + "0xa74444f90fbb54e56f3ac9b6cfccaa4819e4614a": "20000000000000000000", + "0x3c15b3511df6f0342e7348cc89af39a168b7730f": "1000000000000000000000", + "0x3d6ff82c9377059fb30d9215723f60c775c891fe": "250066000000000000000", + "0xa524a8cccc49518d170a328270a2f88133fbaf5d": "294500000000000000000", + "0x8a7a06be199a3a58019d846ac9cbd4d95dd757de": "3000200000000000000000", + "0xd744ac7e5310be696a63b003c40bd039370561c6": "1670000000000000000000", + "0xfe362688845fa244cc807e4b1130eb3741a8051e": "1000000000000000000000", + "0xb2d0360515f17daba90fcbac8205d569b915d6ac": "6000000000000000000000", + "0xc53594c7cfb2a08f284cc9d7a63bbdfc0b319732": "49200000000000000000000", + "0xb3c228731d186d2ded5b5fbe004c666c8e469b86": "29000000000000000000", + "0x63e414603e80d4e5a0f5c18774204642258208e4": "5000000000000000000000", + "0x826ce5790532e0548c6102a30d3eac836bd6388f": "18000000000000000000000", + "0xc5e812f76f15f2e1f2f9bc4823483c8804636f67": "73000000000000000000", + "0x116fef5e601642c918cb89160fc2293ba71da936": "802200000000000000000", + "0x08b84536b74c8c01543da88b84d78bb95747d822": "200000000000000000000", + "0x04a80afad53ef1f84165cfd852b0fdf1b1c24ba8": "58000000000000000000", + "0x2b0362633614bfcb583569438ecc4ea57b1d337e": "20000000000000000000000", + "0xe95179527deca5916ca9a38f215c1e9ce737b4c9": "10000000000000000000000", + "0x2c5df866666a194b26cebb407e4a1fd73e208d5e": "1000000000000000000000", + "0x529e824fa072582b4032683ac7eecc1c04b4cac1": "2000000000000000000000", + "0x78634371e17304cbf339b1452a4ce438dc764cce": "10000000000000000000000", + "0xe172dfc8f80cd1f8cd8539dc26082014f5a8e3e8": "3000000000000000000000", + "0xb07618328a901307a1b7a0d058fcd5786e9e72fe": "30239500000000000000000", + "0xb0571153db1c4ed7acaefe13ecdfdb72e7e4f06a": "80520000000000000000000", + "0xad910a23d6850613654af786337ad2a70868ac6d": "1999800000000000000000", + "0x4da5edc688b0cb62e1403d1700d9dcb99ffe3fd3": "2000000000000000000000", + "0xbe2471a67f6047918772d0e36839255ed9d691ae": "4000000000000000000000", + "0x28868324337e11ba106cb481da962f3a8453808d": "2000000000000000000000", + "0xd8f94579496725b5cb53d7985c989749aff849c0": "17000000000000000000000", + "0x4981c5ff66cc4e9680251fc4cd2ff907cb327865": "750000000000000000000", + "0xfd2872d19e57853cfa16effe93d0b1d47b4f93fb": "4000000000000000000000", + "0x63c8dfde0b8e01dadc2e748c824cc0369df090b3": "3880000000000000000000", + "0xc4dd048bfb840e2bc85cb53fcb75abc443c7e90f": "3716000000000000000000", + "0xf579714a45eb8f52c3d57bbdefd2c15b2e2f11df": "1560000000000000000000", + "0xcc7b0481cc32e6faef2386a07022bcb6d2c3b4fc": "3160000000000000000000", + "0xa0aa5f0201f04d3bbeb898132f7c11679466d901": "36600000000000000000", + "0xf3df63a97199933330383b3ed7570b96c4812334": "2000000000000000000000", + "0x42732d8ef49ffda04b19780fd3c18469fb374106": "425068000000000000000", + "0x6f92d6e4548c78996509ee684b2ee29ba3c532b4": "1000000000000000000000", + "0xfff4bad596633479a2a29f9a8b3f78eefd07e6ee": "100000000000000000000", + "0xac4460a76e6db2b9fcd152d9c7718d9ac6ed8c6f": "200000000000000000000", + "0x553b6b1c57050e88cf0c31067b8d4cd1ff80cb09": "400000000000000000000", + "0x84b6b6adbe2f5b3e2d682c66af1bc4905340c3ed": "619333000000000000000", + "0x9f4a7195ac7c151ca258cafda0cab083e049c602": "1537100000000000000000", + "0x2955c357fd8f75d5159a3dfa69c5b87a359dea8c": "2000000000000000000000", + "0x11d7844a471ef89a8d877555583ceebd1439ea26": "10098000000000000000000", + "0x34b454416e9fb4274e6addf853428a0198d62ee1": "407000000000000000000", + "0x308dd21cebe755126704b48c0f0dc234c60ba9b1": "200000000000000000000", + "0x381db4c8465df446a4ce15bf81d47e2f17c980bf": "32000000000000000000000", + "0x1abc4e253b080aeb437984ab05bca0979aa43e1c": "1000000000000000000000", + "0x53e35b12231f19c3fd774c88fec8cbeedf1408b2": "512000000000000000000", + "0x69e2e2e704307ccc5b5ca3f164fece2ea7b2e512": "7000000000000000000000", + "0x1914f1eb95d1277e93b6e61b668b7d77f13a11a1": "970000000000000000000", + "0x50e13023bd9ca96ad4c53fdfd410cb6b1f420bdf": "200000000000000000000", + "0x46224f32f4ece5c8867090d4409d55e50b18432d": "6000000000000000000000", + "0xff83855051ee8ffb70b4817dba3211ed2355869d": "400000000000000000000", + "0xfb39189af876e762c71d6c3e741893df226cedd6": "4000000000000000000000", + "0x9875623495a46cdbf259530ff838a1799ec38991": "2000000000000000000000", + "0xe1b39b88d9900dbc4a6cdc481e1060080a8aec3c": "2000000000000000000000", + "0x5baf6d749620803e8348af3710e5c4fbf20fc894": "5003680000000000000000", + "0x9c54e4ed479a856829c6bb42da9f0b692a75f728": "7520000000000000000000", + "0x486a6c8583a84484e3df43a123837f8c7e2317d0": "323378000000000000000", + "0xd235d15cb5eceebb61299e0e827fa82748911d89": "4000000000000000000000", + "0x47d792a756779aedf1343e8883a6619c6c281184": "2000000000000000000000", + "0x70c213488a020c3cfb39014ef5ba6404724bcaa3": "1940000000000000000000", + "0x133c490fa5bf7f372888e607d958fab7f955bae1": "1580000000000000000000", + "0xa9e194661aac704ee9dea043974e9692ded84a5d": "482400000000000000000", + "0xbc6b58364bf7f1951c309e0cba0595201cd73f9a": "1812400000000000000000", + "0x2309d34091445b3232590bd70f4f10025b2c9509": "10000000000000000000000", + "0xd89bc271b27ba3ab6962c94a559006ae38d5f56a": "2000000000000000000000", + "0xff0e2fec304207467e1e3307f64cbf30af8fd9cd": "2000000000000000000000", + "0xc0b0b7a8a6e1acdd05e47f94c09688aa16c7ad8d": "64234000000000000000", + "0xb66f92124b5e63035859e390628869dbdea9485e": "9850000000000000000000", + "0xa9e6e25e656b762558619f147a21985b8874edfe": "2000000000000000000000", + "0xa43e1947a9242b355561c30a829dfeeca2815af8": "3878255000000000000000", + "0x8b20ad3b94656dbdc0dd21a393d8a7d9e02138cb": "3000000000000000000000", + "0xaca2a838330b17302da731d30db48a04f0f207c1": "1337000000000000000000", + "0xfa60868aafd4ff4c5c57914b8ed58b425773dfa9": "8557400000000000000000", + "0x1848003c25bfd4aa90e7fcb5d7b16bcd0cffc0d8": "1000000000000000000000", + "0xb4b185d943ee2b58631e33dff5af6854c17993ac": "1000000000000000000000", + "0x7719888795ad745924c75760ddb1827dffd8cda8": "1999980000000000000000", + "0xccd521132d986cb96869842622a7dda26c3ed057": "2000000000000000000000", + "0x253e32b74ea4490ab92606fda0aa257bf23dcb8b": "10000000000000000000000", + "0x3712367e5e55a96d5a19168f6eb2bc7e9971f869": "1000000000000000000000", + "0x8f29a14a845ad458f2d108b568d813166bcdf477": "10000000000000000000000", + "0x51a8c2163602a32ee24cf4aa97fd9ea414516941": "62904000000000000000", + "0x61cea71fa464d62a07063f920b0cc917539733d8": "1670000000000000000000", + "0x6f81f3abb1f933b1df396b8e9cc723a89b7c9806": "280000000000000000000", + "0x61b1b8c012cd4c78f698e470f90256e6a30f48dd": "200000000000000000000", + "0x4f3f2c673069ac97c2023607152981f5cd6063a0": "600000000000000000000", + "0xe2efa5fca79538ce6068bf31d2c516d4d53c08e5": "131200000000000000000", + "0x2383c222e67e969190d3219ef14da37850e26c55": "2000000000000000000000", + "0xeac3af5784927fe9a598fc4eec38b8102f37bc58": "1000000000000000000000", + "0x4fe56ab3bae1b0a44433458333c4b05a248f8241": "2180000000000000000000", + "0xfe9cfc3bb293ddb285e625f3582f74a6b0a5a6cd": "1970000000000000000000", + "0xf48e1f13f6af4d84b371d7de4b273d03a263278e": "600000000000000000000", + "0x1ba9228d388727f389150ea03b73c82de8eb2e09": "7258000000000000000000", + "0x37a7a6ff4ea3d60ec307ca516a48d3053bb79cbb": "2000000000000000000000", + "0xe33840d8bca7da98a6f3d096d83de78b70b71ef8": "2000000000000000000000", + "0x8e7fd23848f4db07906a7d10c04b21803bb08227": "1000000000000000000000", + "0x07d4334ec385e8aa54eedaeadb30022f0cdfa4ab": "2629946000000000000000", + "0xd4b085fb086f3d0d68bf12926b1cc3142cae8770": "3700000000000000000000", + "0x5a87f034e6f68f4e74ffe60c64819436036cf7d7": "20000000000000000000", + "0xc00ab080b643e1c2bae363e0d195de2efffc1c44": "500000000000000000000", + "0x22f3c779dd79023ea92a78b65c1a1780f62d5c4a": "1970000000000000000000", + "0xc7d5c7054081e918ec687b5ab36e973d18132935": "182000000000000000000", + "0x9662ee021926682b31c5f200ce457abea76c6ce9": "670500000000000000000", + "0x116a09df66cb150e97578e297fb06e13040c893c": "2000000000000000000000", + "0xb7240af2af90b33c08ae9764103e35dce3638428": "8464547000000000000000", + "0xe8b28acda971725769db8f563d28666d41ddab6c": "10000000000000000000000", + "0x17d4918dfac15d77c47f9ed400a850190d64f151": "2000000000000000000000", + "0xc42250b0fe42e6b7dcd5c890a6f0c88f5f5fb574": "149800000000000000000", + "0x5da2a9a4c2c0a4a924cbe0a53ab9d0c627a1cfa0": "733202000000000000000", + "0x5869fb867d71f1387f863b698d09fdfb87c49b5c": "3666000000000000000000", + "0xd49a75bb933fca1fca9aa1303a64b6cb44ea30e1": "10000000000000000000000", + "0x76331e30796ce664b2700e0d4153700edc869777": "2000000000000000000000", + "0x8a5fb75793d043f1bcd43885e037bd30a528c927": "356500000000000000000", + "0xfc0ee6f7c2b3714ae9916c45566605b656f32441": "1760000000000000000000", + "0xbf50ce2e264b9fe2b06830617aedf502b2351b45": "1000000000000000000000", + "0x0f6000de1578619320aba5e392706b131fb1de6f": "499986000000000000000", + "0xc953f934c0eb2d0f144bdab00483fd8194865ce7": "2000000000000000000000", + "0x24fd9a6c874c2fab3ff36e9afbf8ce0d32c7de92": "1337000000000000000000", + "0xc6cd68ec35362c5ad84c82ad4edc232125912d99": "27750000000000000000000", + "0x2a67660a1368efcd626ef36b2b1b601980941c05": "133700000000000000000", + "0x9deb39027af877992b89f2ec4a1f822ecdf12693": "2000000000000000000000", + "0xc12f881fa112b8199ecbc73ec4185790e614a20f": "2000000000000000000000", + "0xd58a52e078a805596b0d56ea4ae1335af01c66eb": "267400000000000000000", + "0x4d7cfaa84cb33106800a8c802fb8aa463896c599": "1790000000000000000000", + "0x0ee391f03c765b11d69026fd1ab35395dc3802a0": "200000000000000000000", + "0xa192f06ab052d5fd7f94eea8318e827815fe677a": "131400000000000000000", + "0x8f0ab894bd3f4e697dbcfb859d497a9ba195994a": "39501652000000000000000", + "0x387eeafd6b4009deaf8bd5b85a72983a8dcc3487": "4000000000000000000000", + "0x03b0f17cd4469ddccfb7da697e82a91a5f9e7774": "20000000000000000000", + "0x11172b278ddd44eea2fdf4cb1d16962391c453d9": "935900000000000000000000", + "0x33d172ab075c51db1cd40a8ca8dbff0d93b843bb": "5727139000000000000000", + "0x909b5e763a39dcc795223d73a1dbb7d94ca75ac8": "2000000000000000000000", + "0x0ca12ab0b9666cf0cec6671a15292f2653476ab2": "210000600000000000000000", + "0x6b5ae7bf78ec75e90cb503c778ccd3b24b4f1aaf": "800000000000000000000", + "0xd9e3857efd1e202a441770a777a49dcc45e2e0d3": "223500000000000000000", + "0xd703c6a4f11d60194579d58c2766a7ef16c30a29": "2000000000000000000000", + "0x838bd565f99fde48053f7917fe333cf84ad548ab": "200000000000000000000", + "0x8168edce7f2961cf295b9fcd5a45c06cdeda6ef5": "200000000000000000000", + "0xde50868eb7e3c71937ec73fa89dd8b9ee10d45aa": "1000000000000000000000", + "0x087498c0464668f31150f4d3c4bcdda5221ba102": "20000000000000000000", + "0x613fab44b16bbe554d44afd178ab1d02f37aeaa5": "2000000000000000000000", + "0xe2ee691f237ee6529b6557f2fcdd3dcf0c59ec63": "5450048000000000000000", + "0xa9ed377b7d6ec25971c1a597a3b0f3bead57c98f": "400000000000000000000", + "0x175feeea2aa4e0efda12e1588d2f483290ede81a": "200000000000000000000", + "0xb51ddcb4dd4e8ae6be336dd9654971d9fec86b41": "421133000000000000000", + "0x92c0f573eccf62c54810ee6ba8d1f113542b301b": "3384000000000000000000", + "0xa109e18bb0a39c9ef82fa19597fc5ed8e9eb6d58": "1640000000000000000000", + "0xf74e6e145382b4db821fe0f2d98388f45609c69f": "100000000000000000000", + "0x378f37243f3ff0bef5e1dc85eb4308d9340c29f9": "2000200000000000000000", + "0x84e9949680bece6841b9a7e5250d08acd87d16cd": "200000000000000000000", + "0x882bd3a2e9d74110b24961c53777f22f1f46dc5d": "13370000000000000000000", + "0xacce01e0a70610dc70bb91e9926fa9957f372fba": "537000000000000000000", + "0xc5f687717246da8a200d20e5e9bcac60b67f3861": "28650000000000000000", + "0xe14617f6022501e97e7b3e2d8836aa61f0ff2dba": "200000000000000000000", + "0x076ee99d3548623a03b5f99859d2d785a1778d48": "200000000000000000000", + "0x2c424ee47f583cdce07ae318b6fad462381d4d2b": "4000000000000000000000", + "0xf98250730c4c61c57f129835f2680894794542f3": "4000000000000000000000", + "0xed1b24b6912d51b334ac0de6e771c7c0454695ea": "40000000000000000000", + "0xffd5170fd1a8118d558e7511e364b24906c4f6b3": "60085000000000000000", + "0xbf49c14898316567d8b709c2e50594b366c6d38c": "733202000000000000000", + "0x65ea26eabbe2f64ccccfe06829c25d4637520225": "700000000000000000000", + "0x5c5419565c3aad4e714e0739328e3521c98f05cc": "528000000000000000000", + "0xc53b50fd3b2b72bc6c430baf194a515585d3986d": "20000000000000000000", + "0x2b74c373d04bfb0fd60a18a01a88fbe84770e58c": "40000000000000000000", + "0xd97f4526dea9b163f8e8e33a6bcf92fb907de6ec": "284000000000000000000", + "0xa4a49f0bc8688cc9e6dc04e1e08d521026e65574": "200000000000000000000", + "0x575c00c2818210c28555a0ff29010289d3f82309": "10000000000000000000000", + "0x3f1233714f204de9de4ee96d073b368d8197989f": "38606000000000000000", + "0xf964d98d281730ba35b2e3a314796e7b42fedf67": "1543800000000000000000", + "0x1deec01abe5c0d952de9106c3dc30639d85005d6": "2000000000000000000000", + "0x12d60d65b7d9fc48840be5f891c745ce76ee501e": "21359400000000000000000", + "0x5c6136e218de0a61a137b2b3962d2a6112b809d7": "294273000000000000000", + "0xcd43258b7392a930839a51b2ef8ad23412f75a9f": "2000000000000000000000", + "0xdb3f258ab2a3c2cf339c4499f75a4bd1d3472e9e": "1500000000000000000000", + "0x0edd4b580ff10fe06c4a03116239ef96622bae35": "197000000000000000000", + "0x1d157c5876c5cad553c912caf6ce2d5277e05c73": "2000000000000000000000", + "0xcda1b886e3a795c9ba77914e0a2fe5676f0f5ccf": "106024000000000000000", + "0xf50cbafd397edd556c0678988cb2af5c2617e0a2": "716000000000000000000", + "0x327bb49e754f6fb4f733c6e06f3989b4f65d4bee": "20000000000000000000", + "0xc44bdec8c36c5c68baa2ddf1d431693229726c43": "100000000000000000000000", + "0x34e2849bea583ab0cc37975190f322b395055582": "7780340000000000000000", + "0x9221c9ce01232665741096ac07235903ad1fe2fc": "126489000000000000000", + "0xff3ded7a40d3aff0d7a8c45fa6136aa0433db457": "1999800000000000000000", + "0x10b5b34d1248fcf017f8c8ffc408ce899ceef92f": "267400000000000000000", + "0xf1a1f320407964fd3c8f2e2cc8a4580da94f01ea": "2000040000000000000000", + "0x6c800d4b49ba07250460f993b8cbe00b266a2553": "492500000000000000000", + "0xf827d56ed2d32720d4abf103d6d0ef4d3bcd559b": "26265000000000000000", + "0xffb9c7217e66743031eb377af65c77db7359dcda": "40000000000000000000", + "0x530319db0a8f93e5bb7d4dbf4816314fbed8361b": "2000000000000000000000", + "0x9c28a2c4086091cb5da226a657ce3248e8ea7b6f": "280000000000000000000", + "0xdb23a6fef1af7b581e772cf91882deb2516fc0a7": "200000000000000000000", + "0x6636d7ac637a48f61d38b14cfd4865d36d142805": "500000000000000000000", + "0xb3c260609b9df4095e6c5dff398eeb5e2df49985": "254030000000000000000", + "0x58e5c9e344c806650dacfc904d33edba5107b0de": "19100000000000000000", + "0x4f67396d2553f998785f704e07a639197dd1948d": "300080000000000000000", + "0x510d8159cc945768c7450790ba073ec0d9f89e30": "2560000000000000000000", + "0x593c48935beaff0fde19b04d309cd530a28e52ce": "4000000000000000000000", + "0xc27f4e08099d8cf39ee11601838ef9fc06d7fc41": "1790000000000000000000", + "0x07723e3c30e8b731ee456a291ee0e798b0204a77": "2000000000000000000000", + "0x0a652e2a8b77bd97a790d0e91361c98890dbb04e": "1000000000000000000000", + "0x671015b97670b10d5e583f3d62a61c1c79c5143f": "400000000000000000000", + "0x7cc24a6a958c20c7d1249660f7586226950b0d9a": "1970000000000000000000", + "0x6ef9e8c9b6217d56769af97dbb1c8e1b8be799d2": "182000000000000000000", + "0x5c4368918ace6409c79eca80cdaae4391d2b624e": "4000000000000000000000", + "0x043707071e2ae21eed977891dc79cd5d8ee1c2da": "2000000000000000000000", + "0x39bfd978689bec048fc776aa15247f5e1d7c39a2": "20000000000000000000000", + "0x05915d4e225a668162aee7d6c25fcfc6ed18db03": "66348000000000000000", + "0x3f551ba93cd54693c183fb9ad60d65e1609673c9": "2000000000000000000000", + "0xa8c0b02faf02cb5519dda884de7bbc8c88a2da81": "16700000000000000000", + "0xbd0c5cd799ebc48642ef97d74e8e429064fee492": "326000000000000000000", + "0x0a931b449ea8f12cdbd5e2c8cc76bad2c27c0639": "23031000000000000000", + "0x2ea5fee63f337a376e4b918ea82148f94d48a626": "1864242000000000000000", + "0xcc6c2df00e86eca40f21ffda1a67a1690f477c65": "3160000000000000000000", + "0xe5e37e19408f2cfbec83349dd48153a4a795a08f": "4200000000000000000000", + "0xf555a27bb1e2fd4e2cc784caee92939fc06e2fc9": "2000000000000000000000", + "0xdcf9719be87c6f46756db4891db9b611d2469c50": "1000000000000000000000", + "0x8e2f9034c9254719c38e50c9aa64305ed696df1e": "4728000000000000000000", + "0xa01f12d70f44aa7b113b285c22dcdb45873454a7": "18200000000000000000", + "0xbce40475d345b0712dee703d87cd7657fc7f3b62": "7750000000000000000000", + "0xbb19bf91cbad74cceb5f811db27e411bc2ea0656": "17600000000000000000", + "0xacc062702c59615d3444ef6214b8862b009a02ed": "1499936000000000000000", + "0x449ac4fbe383e36738855e364a57f471b2bfa131": "197000000000000000000000", + "0xad59a78eb9a74a7fbdaefafa82eada8475f07f95": "500000000000000000000", + "0x6b6577f3909a4d6de0f411522d4570386400345c": "1880000000000000000000", + "0x79bf2f7b6e328aaf26e0bb093fa22da29ef2f471": "1790000000000000000000", + "0x940f715140509ffabf974546fab39022a41952d2": "1400000000000000000000", + "0x1d572edd2d87ca271a6714c15a3b37761dcca005": "127674000000000000000", + "0xd78ecd25adc86bc2051d96f65364866b42a426b7": "3877300000000000000000", + "0xf9729d48282c9e87166d5eef2d01eda9dbf78821": "99981000000000000000", + "0x17762560e82a93b3f522e0e524adb8612c3a7470": "1000000000000000000000", + "0xd500e4d1c9824ba9f5b635cfa3a8c2c38bbd4ced": "400000000000000000000", + "0xa11effab6cf0f5972cffe4d56596e98968144a8f": "1670000000000000000000", + "0xf64ecf2117931c6d535a311e4ffeaef9d49405b8": "2674000000000000000000", + "0x229cc4711b62755ea296445ac3b77fc633821cf2": "39481000000000000000", + "0xfc989cb487bf1a7d17e4c1b7c4b7aafdda6b0a8d": "20000000000000000000", + "0xea8527febfa1ade29e26419329d393b940bbb7dc": "1999944000000000000000", + "0xbce13e22322acfb355cd21fd0df60cf93add26c6": "200000000000000000000", + "0x19ff244fcfe3d4fa2f4fd99f87e55bb315b81eb6": "200000000000000000000", + "0xd2581a55ce23ab10d8ad8c44378f59079bd6f658": "8800000000000000000000", + "0x4073fa49b87117cb908cf1ab512da754a932d477": "1970000000000000000000", + "0xb6a82933c9eadabd981e5d6d60a6818ff806e36b": "400000000000000000000", + "0xc79806032bc7d828f19ac6a640c68e3d820fa442": "20000000000000000000", + "0x577b2d073c590c50306f5b1195a4b2ba9ecda625": "373600000000000000000", + "0x7f13d760498d7193ca6859bc95c901386423d76c": "5000000000000000000000", + "0x416784af609630b070d49a8bcd12235c6428a408": "20000000000000000000000", + "0xfbe71622bcbd31c1a36976e7e5f670c07ffe16de": "400000000000000000000", + "0xa5698035391e67a49013c0002079593114feb353": "240000000000000000000", + "0xab2871e507c7be3965498e8fb462025a1a1c4264": "775000000000000000000", + "0x9c78fbb4df769ce2c156920cfedfda033a0e254a": "1970000000000000000000", + "0x95e6f93dac228bc7585a25735ac2d076cc3a4017": "6000000000000000000000", + "0x3c1f91f301f4b565bca24751aa1f761322709ddd": "1790000000000000000000", + "0xf77f9587ff7a2d7295f1f571c886bd33926a527c": "1999800000000000000000", + "0x755f587e5efff773a220726a13d0f2130d9f896b": "1000000000000000000000", + "0x8c6aa882ee322ca848578c06cb0fa911d3608305": "600000000000000000000", + "0x492cb5f861b187f9df21cd4485bed90b50ffe22d": "499928000000000000000", + "0x95a577dc2eb3ae6cb9dfc77af697d7efdfe89a01": "136000000000000000000", + "0x4173419d5c9f6329551dc4d3d0ceac1b701b869e": "88000000000000000000", + "0x456ae0aca48ebcfae166060250525f63965e760f": "300000000000000000000", + "0x81f8de2c283d5fd4afbda85dedf9760eabbbb572": "3000000000000000000000", + "0xcd0af3474e22f069ec3407870dd770443d5b12b0": "2626262000000000000000", + "0x283c2314283c92d4b064f0aef9bb5246a7007f39": "200000000000000000000", + "0x29b3f561ee7a6e25941e98a5325b78adc79785f3": "100000000000000000000", + "0xcd4306d7f6947ac1744d4e13b8ef32cb657e1c00": "499986000000000000000", + "0xd9ec2efe99ff5cf00d03a8317b92a24aef441f7e": "2000000000000000000000", + "0x83dbf8a12853b40ac61996f8bf1dc8fdbaddd329": "970000000000000000000", + "0x9d93fab6e22845f8f45a07496f11de71530debc7": "1998000000000000000000", + "0xfd204f4f4aba2525ba728afdf78792cbdeb735ae": "2000000000000000000000", + "0x99fad50038d0d9d4c3fbb4bce05606ecadcd5121": "2000000000000000000000", + "0xd206aaddb336d45e7972e93cb075471d15897b5d": "600000000000000000000", + "0x428a1ee0ed331d7952ccbe1c7974b2852bd1938a": "2208370000000000000000", + "0x690228e4bb12a8d4b5e0a797b0c5cf2a7509131e": "1880000000000000000000", + "0xfa3a1aa4488b351aa7560cf5ee630a2fd45c3222": "878850000000000000000", + "0x0372e852582e0934344a0fed2178304df25d4628": "20000000000000000000000", + "0x35ea2163a38cdf9a123f82a5ec00258dae0bc767": "4000000000000000000000", + "0xd1fed0aee6f5dfd7e25769254c3cfad15adeccaa": "730000000000000000000", + "0xc05b740620f173f16e52471dc38b9c514a0b1526": "140000000000000000000", + "0x87e3062b2321e9dfb0875ce3849c9b2e3522d50a": "10000000000000000000000", + "0x303fbaebbe46b35b6e5b74946a5f99bc1585cae7": "878148000000000000000", + "0xe7a8e471eafb798f4554cc6e526730fd56e62c7d": "1000000000000000000000", + "0xad7dd053859edff1cb6f9d2acbed6dd5e332426f": "1970000000000000000000", + "0xdc4345d6812e870ae90c568c67d2c567cfb4f03c": "6700000000000000000000", + "0xa6a08252c8595177cc2e60fc27593e2379c81fb1": "20055000000000000000", + "0xa9af21acbe482f8131896a228036ba51b19453c3": "49999000000000000000", + "0x86e3fe86e93da486b14266eadf056cbfa4d91443": "2000000000000000000000", + "0x744b03bba8582ae5498e2dc22d19949467ab53fc": "500000000000000000000", + "0xd3118ea3c83505a9d893bb67e2de142d537a3ee7": "20000000000000000000", + "0xb32f1c2689a5ce79f1bc970b31584f1bcf2283e7": "20000000000000000000", + "0x4828e4cbe34e1510afb72c2beeac8a4513eaebd9": "3940000000000000000000", + "0xb07bcc085ab3f729f24400416837b69936ba8873": "2000140000000000000000", + "0xbdc74873af922b9df474853b0fa7ff0bf8c82695": "3999000000000000000000", + "0x15ebd1c7cad2aff19275c657c4d808d010efa0f5": "200550000000000000000", + "0xcbc04b4d8b82caf670996f160c362940d66fcf1a": "6000000000000000000000", + "0x8197948121732e63d9c148194ecad46e30b749c8": "4000000000000000000000", + "0x69797bfb12c9bed682b91fbc593591d5e4023728": "10000000000000000000000", + "0xbe9b8c34b78ee947ff81472eda7af9d204bc8466": "150000000000000000000", + "0xdf3f57b8ee6434d047223def74b20f63f9e4f955": "250500000000000000000", + "0xa3ae1879007d801cb5f352716a4dd8ba2721de3d": "200000000000000000000000", + "0xcb4bb1c623ba28dc42bdaaa6e74e1d2aa1256c2a": "1999944000000000000000", + "0xe03c00d00388ecbf4f263d0ac778bb41a57a40d9": "1000072000000000000000", + "0xfc2c1f88961d019c3e9ea33009152e0693fbf88a": "8000000000000000000000", + "0x8599cbd5a6a9dcd4b966be387d69775da5e33c6f": "58180000000000000000000", + "0xb7a31a7c38f3db09322eae11d2272141ea229902": "2000000000000000000000", + "0x231a15acc199c89fa9cb22441cc70330bdcce617": "500000000000000000000", + "0x3fbed6e7e0ca9c84fbe9ebcf9d4ef9bb49428165": "2000000000000000000000", + "0x92cfd60188efdfb2f8c2e7b1698abb9526c1511f": "2000000000000000000000", + "0x5c936f3b9d22c403db5e730ff177d74eef42dbbf": "75000000000000000000", + "0x931fe712f64207a2fd5022728843548bfb8cbb05": "2000000000000000000000", + "0x08d54e83ad486a934cfaeae283a33efd227c0e99": "1039000000000000000000", + "0xa339a3d8ca280e27d2415b26d1fc793228b66043": "1013600000000000000000", + "0x581f34b523e5b41c09c87c298e299cbc0e29d066": "1131607000000000000000", + "0xcaaa68ee6cdf0d34454a769b0da148a1faaa1865": "7216000000000000000000", + "0x0838a7768d9c2aca8ba279adfee4b1f491e326f1": "200000000000000000000", + "0xdde77a4740ba08e7f73fbe3a1674912931742eeb": "19867021000000000000000", + "0xcbe810fe0fecc964474a1db97728bc87e973fcbd": "10000000000000000000000", + "0x86c28b5678af37d727ec05e4447790f15f71f2ea": "200000000000000000000", + "0xdd6c062193eac23d2fdbf997d5063a346bb3b470": "20000000000000000000", + "0x5975b9528f23af1f0e2ec08ac8ebaa786a2cb8e0": "345827000000000000000", + "0xe29d8ae452dcf3b6ac645e630409385551faae0a": "80276000000000000000", + "0x2fbc85798a583598b522166d6e9dda121d627dbc": "200000000000000000000", + "0x7a36aba5c31ea0ca7e277baa32ec46ce93cf7506": "20000000000000000000000", + "0xdbcbcd7a57ea9db2349b878af34b1ad642a7f1d1": "200000000000000000000", + "0x92aae59768eddff83cfe60bb512e730a05a161d7": "1708015000000000000000", + "0xa5e93b49ea7c509de7c44d6cfeddef5910deaaf2": "2000000000000000000000", + "0xe33d980220fab259af6a1f4b38cf0ef3c6e2ea1a": "2000000000000000000000", + "0x8ed0af11ff2870da0681004afe18b013f7bd3882": "4000000000000000000000", + "0xf23e5c633221a8f7363e65870c9f287424d2a960": "1380000000000000000000", + "0x96334bfe04fffa590213eab36514f338b864b736": "400000000000000000000", + "0xfa1f1971a775c3504fef5079f640c2c4bce7ac05": "2000000000000000000000", + "0xdf44c47fc303ac76e74f97194cca67b5bb3c023f": "591000000000000000000", + "0x4b74f5e58e2edf76daf70151964a0b8f1de0663c": "324020000000000000000", + "0xe38b91b35190b6d9deed021c30af094b953fdcaa": "33340000000000000000", + "0x6b38de841fad7f53fe02da115bd86aaf662466bd": "1730000000000000000000", + "0x11675a25554607a3b6c92a9ee8f36f75edd3e336": "159800000000000000000", + "0x0ba8705bf55cf219c0956b5e3fc01c4474a6cdc1": "94963000000000000000", + "0x0f05f120c89e9fbc93d4ab0c5e2b4a0df092b424": "30000000000000000000000", + "0xfdd1195f797d4f35717d15e6f9810a9a3ff55460": "18200000000000000000", + "0x63a61dc30a8e3b30a763c4213c801cbf98738178": "1000000000000000000000", + "0xe5bdf34f4ccc483e4ca530cc7cf2bb18febe92b3": "126260000000000000000", + "0xd6e09e98fe1300332104c1ca34fbfac554364ed9": "2000000000000000000000", + "0x5bd6862d517d4de4559d4eec0a06cad05e2f946e": "200000000000000000000", + "0x7294ec9da310bc6b4bbdf543b0ef45abfc3e1b4d": "22000000000000000000000", + "0xae34861d342253194ffc6652dfde51ab44cad3fe": "466215000000000000000", + "0xf50ae7fab4cfb5a646ee04ceadf9bf9dd5a8e540": "3999952000000000000000", + "0xdd2bdfa917c1f310e6fa35aa8af16939c233cd7d": "400000000000000000000", + "0xe0060462c47ff9679baef07159cae08c29f274a9": "2000000000000000000000", + "0xb7d12e84a2e4c4a6345af1dd1da9f2504a2a996e": "200000000000000000000", + "0xf5500178cb998f126417831a08c2d7abfff6ab5f": "1308923000000000000000", + "0xfd377a385272900cb436a3bb7962cdffe93f5dad": "2000000000000000000000", + "0xa4a83a0738799b971bf2de708c2ebf911ca79eb2": "600000000000000000000", + "0x52a5e4de4393eeccf0581ac11b52c683c76ea15d": "19999800000000000000000", + "0xb07fdeaff91d4460fe6cd0e8a1b0bd8d22a62e87": "5260000000000000000000", + "0x35f5860149e4bbc04b8ac5b272be55ad1aca58e0": "200000000000000000000", + "0xfb135eb15a8bac72b69915342a60bbc06b7e077c": "20000000000000000000000", + "0x02d4a30968a39e2b3498c3a6a4ed45c1c6646822": "2000000000000000000000", + "0xe44b7264dd836bee8e87970340ed2b9aed8ed0a5": "5772100000000000000000", + "0xe90a354cec04d69e5d96ddc0c5138d3d33150aa0": "499971000000000000000", + "0x693d83be09459ef8390b2e30d7f7c28de4b4284e": "2000000000000000000000", + "0x87bf7cd5d8a929e1c785f9e5449106ac232463c9": "77800000000000000000", + "0xe5f8ef6d970636b0dcaa4f200ffdc9e75af1741c": "2000000000000000000000", + "0xfef09d70243f39ed8cd800bf9651479e8f4aca3c": "200000000000000000000", + "0xe98c91cadd924c92579e11b41217b282956cdaa1": "135800000000000000000", + "0xc2836188d9a29253e0cbda6571b058c289a0bb32": "2000000000000000000000", + "0xafa6946effd5ff53154f82010253df47ae280ccc": "1970000000000000000000", + "0x43c7ebc5b3e7af16f47dc5617ab10e0f39b4afbb": "1910000000000000000000", + "0x097ecda22567c2d91cb03f8c5215c22e9dcda949": "20055000000000000000", + "0x3e66b84769566ab67945d5fa81373556bcc3a1fa": "152000000000000000000", + "0x56373daab46316fd7e1576c61e6affcb6559ddd7": "215340000000000000000", + "0xfaaeba8fc0bbda553ca72e30ef3d732e26e82041": "1338337000000000000000", + "0xf54c19d9ef3873bfd1f7a622d02d86249a328f06": "44284729000000000000000", + "0x825309a7d45d1812f51e6e8df5a7b96f6c908887": "2365000000000000000000", + "0x89009e3c6488bd5e570d1da34eabe28ed024de1b": "20000000000000000000000", + "0x63977cad7d0dcdc52b9ac9f2ffa136e8642882b8": "75000000000000000000", + "0xc239abdfae3e9af5457f52ed2b91fd0ab4d9c700": "2000000000000000000000", + "0x1a4ec6a0ae7f5a9427d23db9724c0d0cffb2ab2f": "179000000000000000000", + "0xa12a6c2d985daf0e4f5f207ae851aaf729b332cd": "100000000000000000000000", + "0xcbe52fc533d7dd608c92a260b37c3f45deb4eb33": "1000000000000000000000", + "0xabb2e6a72a40ba6ed908cdbcec3c5612583132fe": "1460000000000000000000", + "0x6503860b191008c15583bfc88158099301762828": "1000000000000000000000", + "0xa0228240f99e1de9cb32d82c0f2fa9a3d44b0bf3": "1600000000000000000000", + "0xe154daeadb545838cbc6aa0c55751902f528682a": "4925000000000000000000", + "0x8e92aba38e72a098170b92959246537a2e5556c0": "267400000000000000000", + "0xd23d7affacdc3e9f3dae7afcb4006f58f8a44600": "3600000000000000000000", + "0x00d78d89b35f472716eceafebf600527d3a1f969": "27750000000000000000000", + "0x120f9de6e0af7ec02a07c609ca8447f157e6344c": "267400000000000000000", + "0xe0352fdf819ba265f14c06a6315c4ac1fe131b2e": "1000000000000000000000", + "0x8f47328ee03201c9d35ed2b5412b25decc859362": "2000000000000000000000", + "0x453e359a3397944c5a275ab1a2f70a5e5a3f6989": "240000000000000000000", + "0x9bf58efbea0784eb068adecfa0bb215084c73a35": "5800000000000000000000", + "0x21bfe1b45cacde6274fd8608d9a178bf3eeb6edc": "2009400000000000000000", + "0xd1d5b17ffe2d7bbb79cc7d7930bcb2e518fb1bbf": "3000000000000000000000", + "0x20a29c5079e26b3f18318bb2e50e8e8b346e5be8": "499986000000000000000", + "0x7d392852f3abd92ff4bb5bb26cb60874f2be6795": "1000070000000000000000", + "0x55852943492970f8d629a15366cdda06a94f4513": "2000000000000000000000", + "0xab5dfc1ea21adc42cf8c3f6e361e243fd0da61e5": "300000000000000000000", + "0x9d2bfc36106f038250c01801685785b16c86c60d": "380000000000000000000000", + "0x6e60aee1a78f8eda8b424c73e353354ae67c3042": "3490300000000000000000", + "0x7e29290038493559194e946d4e460b96fc38a156": "309072000000000000000", + "0x6006e36d929bf45d8f16231b126a011ae283d925": "176000000000000000000", + "0xd6d03572a45245dbd4368c4f82c95714bd2167e2": "1162200000000000000000", + "0xd1432538e35b7664956ae495a32abdf041a7a21c": "19700000000000000000000", + "0x2276264bec8526c0c0f270677abaf4f0e441e167": "1000000000000000000000", + "0xc8814e34523e38e1f927a7dce8466a447a093603": "10000000000000000000000", + "0x688a569e965524eb1d0ac3d3733eab909fb3d61e": "1320000000000000000000", + "0x90dc09f717fc2a5b69fd60ba08ebf40bf4e8246c": "4000086000000000000000", + "0x239a733e6b855ac592d663156186a8a174d2449e": "1637020000000000000000", + "0xbcdfacb9d9023c3417182e9100e8ea1d373393a3": "59100000000000000000", + "0xba6440aeb3737b8ef0f1af9b0c15f4c214ffc7cf": "1000000000000000000000", + "0x322e5c43b0f524389655a9b3ff24f2d4db3da10f": "4650000000000000000000", + "0xbe5a60689998639ad75bc105a371743eef0f7940": "501700000000000000000", + "0xb727a9fc82e1cffc5c175fa1485a9befa2cdbdd1": "999000000000000000000", + "0xa3883a24f7f166205f1a6a9949076c26a76e7178": "1820000000000000000000", + "0x5e95fe5ffcf998f9f9ac0e9a81dab83ead77003d": "539766000000000000000", + "0xe60955dc0bc156f6c41849f6bd776ba44b0ef0a1": "299982000000000000000", + "0xaf203e229d7e6d419df4378ea98715515f631485": "1970000000000000000000", + "0x86499a1228ff2d7ee307759364506f8e8c8307a5": "1970000000000000000000", + "0x1a04cec420ad432215246d77fe178d339ed0b595": "316000000000000000000", + "0xcc2b5f448f3528d3fe41cc7d1fa9c0dc76f1b776": "60000000000000000000", + "0xcb50587412822304ebcba07dab3a0f09fffee486": "1370000000000000000000", + "0x4ae2a04d3909ef454e544ccfd614bfefa71089ae": "442800000000000000000", + "0xc8a2c4e59e1c7fc54805580438aed3e44afdf00e": "44000000000000000000", + "0x5792814f59a33a1843faa01baa089eb02ffb5cf1": "499986000000000000000", + "0xa1f2854050f872658ed82e52b0ad7bbc1cb921f6": "2010918000000000000000", + "0x92dca5e102b3b81b60f1a504634947c374a88ccb": "2000000000000000000000", + "0x732fead60f7bfdd6a9dec48125e3735db1b6654f": "20000000000000000000", + "0x6bf7b3c065f2c1e7c6eb092ba0d15066f393d1b8": "400000000000000000000", + "0xcde36d81d128c59da145652193eec2bfd96586ef": "4000000000000000000000", + "0x40eddb448d690ed72e05c225d34fc8350fa1e4c5": "7000000000000000000000", + "0x454b61b344c0ef965179238155f277c3829d0b38": "2000000000000000000000", + "0xac3da526cfce88297302f34c49ca520dc271f9b2": "800000000000000000000", + "0xc989eec307e8839b9d7237cfda08822962abe487": "400000000000000000000", + "0xe99de258a4173ce9ac38ede26c0b3bea3c0973d5": "1656800000000000000000", + "0xff0cb06c42e3d88948e45bd7b0d4e291aefeea51": "1910000000000000000000", + "0x0990e81cd785599ea236bd1966cf526302c35b9c": "1000000000000000000000", + "0x6da0ed8f1d69339f059f2a0e02471cb44fb8c3bb": "935900000000000000000", + "0x5d958a9bd189c2985f86c58a8c69a7a78806e8da": "10200000000000000000000", + "0x98be696d51e390ff1c501b8a0f6331b628ddc5ad": "2000000000000000000000", + "0x09d0b8cd077c69d9f32d9cca43b3c208a21ed48b": "150011000000000000000", + "0x96e7c0c9d5bf10821bf140c558a145b7cac21397": "1056000000000000000000", + "0x5b736eb18353629bde9676dadd165034ce5ecc68": "1970000000000000000000", + "0xe5a365343cc4eb1e770368e1f1144a77b832d7e0": "20000000000000000000", + "0x4cf5537b85842f89cfee359eae500fc449d2118f": "1000000000000000000000", + "0xc71f1d75873f33dcb2dd4b3987a12d0791a5ce27": "1015200000000000000000", + "0x9bf703b41c3624e15f4054962390bcba3052f0fd": "6055000000000000000000", + "0x145e1de0147911ccd880875fbbea61f6a142d11d": "4000000000000000000000", + "0x68419c6dd2d3ce6fcbb3c73e2fa079f06051bde6": "1970000000000000000000", + "0xd8eb78503ec31a54a90136781ae109004c743257": "1000000000000000000000", + "0xf25e4c70bc465632c89e5625a832a7722f6bffab": "4488000000000000000000", + "0x7b4d2a38269069c18557770d591d24c5121f5e83": "700000000000000000000", + "0x27d158ac3d3e1109ab6e570e90e85d3892cd7680": "100000000000000000000", + "0xd3679a47df2d99a49b01c98d1c3e0c987ce1e158": "280000000000000000000", + "0x095b949de3333a377d5019d893754a5e4656ff97": "340000000000000000000", + "0x6b17598a8ef54f797ae515ccb6517d1859bf8011": "100000000000000000000", + "0x3eaf0879b5b6db159b589f84578b6a74f6c10357": "7253657000000000000000", + "0x40d45d9d7625d15156c932b771ca7b0527130958": "100000000000000000000000", + "0x0392549a727f81655429cb928b529f25df4d1385": "26248000000000000000", + "0xc5b009baeaf788a276bd35813ad65b400b849f3b": "1000000000000000000000", + "0x6ed884459f809dfa1016e770edaf3e9fef46fa30": "3400170000000000000000", + "0x439d2f2f5110a4d58b1757935015408740fec7f8": "3830421000000000000000", + "0xdc46c13325cd8edf0230d068896486f007bf4ef1": "1337000000000000000000", + "0x8c54c7f8b9896e75d7d5f5c760258699957142ad": "40000000000000000000", + "0x61c8f1fa43bf846999ecf47b2b324dfb6b63fe3a": "800000000000000000000", + "0x935069444a6a984de2084e46692ab99f671fc727": "9000000000000000000000", + "0xfc49c1439a41d6b3cf26bb67e0365224e5e38f5f": "1000076000000000000000", + "0xe1dfb5cc890ee8b2877e885d267c256187d019e6": "100000000000000000000", + "0xee7c3ded7c28f459c92fe13b4d95bafbab02367d": "700000000000000000000", + "0xa5874d754635a762b381a5c4c792483af8f23d1d": "50000000000000000000", + "0xcfbb32b7d024350e3321fa20c9a914035372ffc6": "401100000000000000000", + "0x2bc429d618a66a4cf82dbb2d824e9356effa126a": "1999944000000000000000", + "0xdb244f97d9c44b158a40ed9606d9f7bd38913331": "102000000000000000000", + "0x55e220876262c218af4f56784798c7e55da09e91": "133566000000000000000", + "0xca41ccac30172052d522cd2f2f957d248153409f": "1970000000000000000000", + "0xb11fa7fb270abcdf5a2eab95aa30c4b53636efbf": "800000000000000000000", + "0x0ffea06d7113fb6aec2869f4a9dfb09007facef4": "225416000000000000000", + "0x646628a53c2c4193da88359ce718dadd92b7a48d": "200032000000000000000", + "0xca8409083e01b397cf12928a05b68455ce6201df": "1600000000000000000000", + "0xdbbcbb79bf479a42ad71dbcab77b5adfaa872c58": "1730000000000000000000", + "0xdb7d4037081f6c65f9476b0687d97f1e044d0a1d": "660000000000000000000", + "0x4be90d412129d5a4d0424361d6649d4e47a62316": "1015200000000000000000", + "0xe3ab3ca9b870e3f548517306bba4de2591afafc2": "1200062000000000000000", + "0x5c61ab79b408dd3229f662593705d72f1e147bb8": "22729000000000000000000", + "0x4f177f9d56953ded71a5611f393322c30279895c": "246000000000000000000", + "0xe6cb260b716d4c0ab726eeeb07c8707204e276ae": "1000000000000000000000", + "0x44355253b27748e3f34fe9cae1fb718c8f249529": "200000000000000000000", + "0xa309df54cabce70c95ec3033149cd6678a6fd4cf": "223600000000000000000", + "0xec4867d2175ab5b9469361595546554684cda460": "3000000000000000000000", + "0x8d06e464245cad614939e0af0845e6d730e20374": "200359000000000000000", + "0x9810e34a94db6ed156d0389a0e2b80f4fd6b0a8a": "2000000000000000000000", + "0xdcfff3e8d23c2a34b56bd1b3bd45c79374432239": "5000000000000000000000", + "0x7d7dd5ee614dbb6fbfbcd26305247a058c41faa1": "2000000000000000000000", + "0x8a9eca9c5aba8e139f8003edf1163afb70aa3aa9": "660000000000000000000", + "0xd942de4784f7a48716c0fd4b9d54a6e54c5f2f3e": "20000000000000000000000", + "0x07dae622630d1136381933d2ad6b22b839d82102": "200000000000000000000", + "0xabf12fa19e82f76c718f01bdca0003674523ef30": "2000000000000000000000", + "0x411c831cc6f44f1965ec5757ab4e5b3ca4cffd1f": "425000000000000000000", + "0x99129d5b3c0cde47ea0def4dfc070d1f4a599527": "2000000000000000000000", + "0xc5cdcee0e85d117dabbf536a3f4069bf443f54e7": "1969606000000000000000", + "0xf218bd848ee7f9d38bfdd1c4eb2ed2496ae4305f": "500000000000000000000", + "0xfe549bbfe64740189892932538daaf46d2b61d4f": "40000000000000000000", + "0xdc3f0e7672f71fe7525ba30b9755183a20b9166a": "9603617000000000000000", + "0x0e83b850481ab44d49e0a229a2e464902c69539b": "100000000000000000000", + "0x07ddd0422c86ef65bf0c7fc3452862b1228b08b8": "2065302000000000000000", + "0xa68c313445c22d919ee46cc2d0cdff043a755825": "75189000000000000000", + "0xa9e9dbce7a2cb03694799897bed7c54d155fdaa8": "197559000000000000000", + "0x18fccf62d2c3395453b7587b9e26f5cff9eb7482": "1000000000000000000000", + "0xff41d9e1b4effe18d8b0d1f63fc4255fb4e06c3d": "1337000000000000000000", + "0x8f69eafd0233cadb4059ab779c46edf2a0506e48": "1788210000000000000000", + "0x9aa48c66e4fb4ad099934e32022e827427f277ba": "10000000000000000000000", + "0xf46980e3a4a9d29a6a6e90604537a3114bcb2897": "500000000000000000000", + "0x801732a481c380e57ed62d6c29de998af3fa3b13": "100000000000000000000", + "0x0cd6a141918d126b106d9f2ebf69e102de4d3277": "20000000000000000000", + "0x17589a6c006a54cad70103123aae0a82135fdeb4": "4000000000000000000000", + "0x8725e8c753b3acbfdca55f3c62dfe1a59454968a": "1000090000000000000000", + "0xd20dcb0b78682b94bc3000281448d557a20bfc83": "895000000000000000000", + "0xe84f8076a0f2969ecd333eef8de41042986291f2": "432000000000000000000", + "0xb3145b74506d1a8d047cdcdc55392a7b5350799a": "129314663000000000000000", + "0x0d9a825ff2bcd397cbad5b711d9dcc95f1cc112d": "12800000000000000000000", + "0x0ca670eb2c8b96cba379217f5929c2b892f39ef6": "2000000000000000000000", + "0x25cfc4e25c35c13b69f7e77dbfb08baf58756b8d": "40000000000000000000000", + "0x182db85293f606e88988c3704cb3f0c0bbbfca5a": "133700000000000000000", + "0xbd73c3cbc26a175062ea0320dd84b253bce64358": "394000000000000000000", + "0x2680713d40808e2a50ed013150a2a694b96a7f1d": "1790000000000000000000", + "0x51e32f14f4ca5e287cdac057a7795ea9e0439953": "500000000000000000000", + "0xb1e9c5f1d21e61757a6b2ee75913fc5a1a4101c3": "2000000000000000000000", + "0xd4c4d1a7c3c74984f6857b2f5f07e8face68056d": "2000000000000000000000", + "0x4651dc420e08c3293b27d2497890eb50223ae2f4": "20000000000000000000000", + "0xc74a3995f807de1db01a2eb9c62e97d0548f696f": "1000000000000000000000", + "0x0505a08e22a109015a22f685305354662a5531d5": "2600000000000000000000", + "0x39c773367c8825d3596c686f42bf0d14319e3f84": "133700000000000000000", + "0x0f929cf895db017af79f3ead2216b1bd69c37dc7": "2000000000000000000000", + "0xbdd3254e1b3a6dc6cc2c697d45711aca21d516b2": "2000000000000000000000", + "0xae5d221afcd3d29355f508eadfca408ce33ca903": "100000000000000000000000", + "0x916cf17d71412805f4afc3444a0b8dd1d9339d16": "14300000000000000000", + "0x4319263f75402c0b5325f263be4a5080651087f0": "983086000000000000000", + "0x0f1c249cd962b00fd114a9349f6a6cc778d76c4d": "2000000000000000000000", + "0x54febcce20fe7a9098a755bd90988602a48c089e": "640000000000000000000", + "0x2c1800f35fa02d3eb6ff5b25285f5e4add13b38d": "906400000000000000000", + "0x72b904440e90e720d6ac1c2ad79c321dcc1c1a86": "1550000000000000000000", + "0xb0aa00950c0e81fa3210173e729aaf163a27cd71": "40000000000000000000000", + "0x663604b0503046e624cd26a8b6fb4742dce02a6f": "65400000000000000000", + "0x3c98594bf68b57351e8814ae9e6dfd2d254aa06f": "300000000000000000000", + "0x9c45202a25f6ad0011f115a5a72204f2f2198866": "5014000000000000000000", + "0xb02d062873334545cea29218e4057760590f7423": "3186000000000000000000", + "0x7bddb2ee98de19ee4c91f661ee8e67a91d054b97": "1000000000000000000000", + "0x9cf2928beef09a40f9bfc953be06a251116182fb": "6000000000000000000000", + "0x51b4758e9e1450e7af4268c3c7b1e7bd6f5c7550": "1000000000000000000000", + "0xeb570dba975227b1c42d6e8dea2c56c9ad960670": "2000000000000000000000", + "0x970d8b8a0016d143054f149fb3b8e550dc0797c7": "1000000000000000000000", + "0xc7b39b060451000ca1049ba154bcfa00ff8af262": "100000000000000000000000", + "0x945e18769d7ee727c7013f92de24d117967ff317": "2000000000000000000000", + "0xd18eb9e1d285dabe93e5d4bae76beefe43b521e8": "668500000000000000000", + "0xc618521321abaf5b26513a4a9528086f220adc6f": "27000000000000000000", + "0xdd65f6e17163b5d203641f51cc7b24b00f02c8fb": "200000000000000000000", + "0x131faed12561bb7aee04e5185af802b1c3438d9b": "219000000000000000000", + "0x1ced6715f862b1ff86058201fcce5082b36e62b2": "6684522000000000000000", + "0xa0ff5b4cf016027e8323497d4428d3e5a83b8795": "6596500000000000000000", + "0x02e816afc1b5c0f39852131959d946eb3b07b5ad": "1000000000000000000000", + "0x153cf2842cb9de876c276fa64767d1a8ecf573bb": "2000000000000000000000", + "0x3bc6e3ee7a56ce8f14a37532590f63716b9966e8": "2000000000000000000000", + "0xf6d25d3f3d846d239f525fa8cac97bc43578dbac": "896000000000000000000", + "0x2066774d822793ff25f1760909479cf62491bf88": "55160000000000000000000", + "0x46779a5656ff00d73eac3ad0c38b6c853094fb40": "230752000000000000000", + "0x22eed327f8eb1d1338a3cb7b0f8a4baa5907cd95": "23445000000000000000", + "0xff88ebacc41b3687f39e4b59e159599b80cba33f": "400000000000000000000", + "0x2874f3e2985d5f7b406627e17baa772b01abcc9e": "6014000000000000000000", + "0xeb10458daca79e4a6b24b29a8a8ada711b7f2eb6": "3998000000000000000000", + "0x541060fc58c750c40512f83369c0a63340c122b6": "1970000000000000000000", + "0xfd2757cc3551a095878d97875615fe0c6a32aa8a": "598200000000000000000", + "0xbe659d85e7c34f8833ea7f488de1fbb5d4149bef": "9072500000000000000000", + "0xe149b5726caf6d5eb5bf2acc41d4e2dc328de182": "1940000000000000000000", + "0x2fe0cc424b53a31f0916be08ec81c50bf8eab0c1": "600000000000000000000", + "0xe3712701619ca7623c55db3a0ad30e867db0168b": "20000000000000000000", + "0xf8ca336c8e91bd20e314c20b2dd4608b9c8b9459": "846000000000000000000", + "0x68acdaa9fb17d3c309911a77b05f5391fa034ee9": "8950000000000000000000", + "0xe77d7deab296c8b4fa07ca3be184163d5a6d606c": "92538000000000000000", + "0xe6b9545f7ed086e552924639f9a9edbbd5540b3e": "3760000000000000000000", + "0x2866b81decb02ee70ae250cee5cdc77b59d7b679": "2000000000000000000000", + "0x60e3cc43bcdb026aad759c7066f555bbf2ac66f5": "2000000000000000000000", + "0xfcbd85feea6a754fcf3449449e37ff9784f7773c": "3086000000000000000000", + "0x38a744efa6d5c2137defef8ef9187b649eee1c78": "4000000000000000000000", + "0x9d7655e9f3e5ba5d6e87e412aebe9ee0d49247ee": "2620100000000000000000", + "0x2020b81ae53926ace9f7d7415a050c031d585f20": "341200000000000000000", + "0x4244f1331158b9ce26bbe0b9236b9203ca351434": "10000000000000000000000", + "0x99c236141daec837ece04fdaee1d90cf8bbdc104": "2184000000000000000000", + "0x943d37864a4a537d35c8d99723cd6406ce2562e6": "2000000000000000000000", + "0xd79483f6a8444f2549d611afe02c432d15e11051": "20000000000000000000", + "0x9fd64373f2fbcd9c0faca60547cad62e26d9851f": "1000000000000000000000", + "0xb89c036ed7c492879921be41e10ca1698198a74c": "1820000000000000000000", + "0x7462c89caa9d8d7891b2545def216f7464d5bb21": "109162000000000000000", + "0xbb0366a7cfbd3445a70db7fe5ae34885754fd468": "6160000000000000000000", + "0x6c52cf0895bb35e656161e4dc46ae0e96dd3e62c": "4000086000000000000000", + "0xb9cf71b226583e3a921103a5316f855a65779d1b": "24000000000000000000000", + "0x016b60bb6d67928c29fd0313c666da8f1698d9c5": "2000000000000000000000", + "0x9454b3a8bff9709fd0e190877e6cb6c89974dbd6": "2674000000000000000000", + "0x84aac7fa197ff85c30e03b7a5382b957f41f3afb": "157600000000000000000", + "0xdb6e560c9bc620d4bea3a94d47f7880bf47f2d5f": "89500000000000000000", + "0xeefd05b0e3c417d55b3343060486cdd5e92aa7a6": "1430000000000000000000", + "0x3a59a08246a8206f8d58f70bb1f0d35c5bcc71bd": "185000000000000000000", + "0x9bfff50db36a785555f07652a153b0c42b1b8b76": "2000000000000000000000", + "0xd44f5edf2bcf2433f211dadd0cc450db1b008e14": "267400000000000000000", + "0x2378fd4382511e968ed192106737d324f454b535": "1000000000000000000000", + "0xc94089553ae4c22ca09fbc98f57075cf2ec59504": "4000000000000000000000", + "0x08ef3fa4c43ccdc57b22a4b9b2331a82e53818f2": "4000000000000000000000", + "0xe48e65125421880d42bdf1018ab9778d96928f3f": "4200000000000000000000", + "0x67518e5d02b205180f0463a32004471f753c523e": "1984289000000000000000", + "0x0da7401262384e2e8b4b26dd154799b55145efa0": "300000000000000000000", + "0x0b6920a64b363b8d5d90802494cf564b547c430d": "1200000000000000000000", + "0xa5ab4bd3588f46cb272e56e93deed386ba8b753d": "1332989000000000000000", + "0x1788da9b57fd05edc4ff99e7fef301519c8a0a1e": "2000000000000000000000", + "0x17b2d6cf65c6f4a347ddc6572655354d8a412b29": "2000000000000000000000", + "0xd0319139fbab2e8e2accc1d924d4b11df6696c5a": "200000000000000000000", + "0x4c377bb03ab52c4cb79befa1dd114982924c4ae9": "1827814000000000000000", + "0xfb949c647fdcfd2514c7d58e31f28a532d8c5833": "20000000000000000000000", + "0x70e5e9da735ff077249dcb9aaf3db2a48d9498c0": "1000000000000000000000", + "0xfe6f5f42b6193b1ad16206e4afb5239d4d7db45e": "1730000000000000000000", + "0xbda4be317e7e4bed84c0495eee32d607ec38ca52": "2309457000000000000000", + "0x5910106debd291a1cd80b0fbbb8d8d9e93a7cc1e": "2000000000000000000000", + "0xba42f9aace4c184504abf5425762aca26f71fbdc": "37400000000000000000", + "0xbeb4fd315559436045dcb99d49dcec03f40c42dc": "2000000000000000000000", + "0x452b64db8ef7d6df87c788639c2290be8482d575": "8000000000000000000000", + "0x66e09427c1e63deed7e12b8c55a6a19320ef4b6a": "170000000000000000000", + "0xfaad905d847c7b23418aeecbe3addb8dd3f8924a": "1970000000000000000000", + "0xa29319e81069e5d60df00f3de5adee3505ecd5fb": "2000000000000000000000", + "0xcf348f2fe47b7e413c077a7baf3a75fbf8428692": "2000000000000000000000", + "0xe1e8c50b80a352b240ce7342bbfdf5690cc8cb14": "394000000000000000000", + "0x131c792c197d18bd045d7024937c1f84b60f4438": "4000000000000000000000", + "0xe49af4f34adaa2330b0e49dc74ec18ab2f92f827": "2000000000000000000000", + "0xf2e99f5cbb836b7ad36247571a302cbe4b481c69": "1970000000000000000000", + "0xc93fbde8d46d2bcc0fa9b33bd8ba7f8042125565": "1400000000000000000000", + "0x038779ca2dbe663e63db3fe75683ea0ec62e2383": "1670000000000000000000", + "0xa33cb450f95bb46e25afb50fe05feee6fb8cc8ea": "776000000000000000000", + "0x40ab66fe213ea56c3afb12c75be33f8e32fd085d": "4000000000000000000000", + "0x6403d062549690c8e8b63eae41d6c109476e2588": "2000000000000000000000", + "0xbfb0ea02feb61dec9e22a5070959330299c43072": "20000000000000000000000", + "0x99c475bf02e8b9214ada5fad02fdfd15ba365c0c": "591000000000000000000", + "0x904966cc2213b5b8cb5bd6089ef9cddbef7edfcc": "2000000000000000000000", + "0x767a03655af360841e810d83f5e61fb40f4cd113": "985000000000000000000", + "0xab209fdca979d0a647010af9a8b52fc7d20d8cd1": "9129000000000000000000", + "0x6294eae6e420a3d5600a39c4141f838ff8e7cc48": "2955000000000000000000", + "0x9777cc61cf756be3b3c20cd4491c69d275e7a120": "10000000000000000000000", + "0xbcbf6ba166e2340db052ea23d28029b0de6aa380": "3880000000000000000000", + "0x9f10f2a0463b65ae30b070b3df18cf46f51e89bd": "1910000000000000000000", + "0x8d9952d0bb4ebfa0efd01a3aa9e8e87f0525742e": "3460000000000000000000", + "0x4f23b6b817ffa5c664acdad79bb7b726d30af0f9": "1760000000000000000000", + "0xb4c20040ccd9a1a3283da4d4a2f365820843d7e2": "1000000000000000000000", + "0x7f49e7a4269882bd8722d4a6f566347629624079": "2000000000000000000000", + "0x33629bd52f0e107bc071176c64df108f64777d49": "33425000000000000000", + "0x6a7b2e0d88867ff15d207c222bebf94fa6ce8397": "60000000000000000000000", + "0xb7ce684b09abda53389a875369f71958aeac3bdd": "2000000000000000000000", + "0xffbc3da0381ec339c1c049eb1ed9ee34fdcea6ca": "4000000000000000000000", + "0x849ab80790b28ff1ffd6ba394efc7463105c36f7": "34600000000000000000", + "0xb0b36af9aeeedf97b6b02280f114f13984ea3260": "985000000000000000000", + "0x4d57e716876c0c95ef5eaebd35c8f41b069b6bfe": "2000000000000000000000", + "0x2d2b032359b363964fc11a518263bfd05431e867": "149600000000000000000", + "0x2ccc1f1cb5f4a8002e186b20885d9dbc030c0894": "2000000000000000000000", + "0x016c85e1613b900fa357b8283b120e65aefcdd08": "799954000000000000000", + "0x710b0274d712c77e08a5707d6f3e70c0ce3d92cf": "6400000000000000000000", + "0x3cd3a6e93579c56d494171fc533e7a90e6f59464": "2000000000000000000000", + "0xfe0e30e214290d743dd30eb082f1f0a5225ade61": "200000000000000000000", + "0xd0718520eae0a4d62d70de1be0ca431c5eea2482": "2000000000000000000000", + "0xaf7f79cb415a1fb8dbbd094607ee8d41fb7c5a3b": "10000000000000000000000", + "0xb7d252ee9402b0eef144295f0e69f0db586c0871": "660000000000000000000", + "0xc3b928a76fad6578f04f0555e63952cd21d1520a": "2000000000000000000000", + "0xa7a517d7ad35820b09d497fa7e5540cde9495853": "2000000000000000000000", + "0xe6e886317b6a66a5b4f81bf164c538c264351765": "2000000000000000000000", + "0x0770b43dbae4b1f35a927b4fa8124d3866caf97b": "1016390000000000000000", + "0x52b4257cf41b6e28878d50d57b99914ffa89873a": "3930150000000000000000", + "0xe08bc29c2b48b169ff2bdc16714c586e6cb85ccf": "20000000000000000000", + "0x2372c4c1c9939f7aaf6cfac04090f00474840a09": "10000000000000000000000", + "0xab6b65eab8dfc917ec0251b9db0ecfa0fa032849": "500000000000000000000", + "0x582e7cc46f1d7b4e6e9d95868bfd370573178f4c": "2000000000000000000000", + "0xf167f5868dcf4233a7830609682caf2df4b1b807": "2396150000000000000000", + "0xec82f50d06475f684df1b392e00da341aa145444": "2000000000000000000000", + "0x0968ee5a378f8cadb3bafdbed1d19aaacf936711": "1000000000000000000000", + "0xa86613e6c4a4c9c55f5c10bcda32175dcbb4af60": "10696140000000000000000", + "0xa5cd123992194b34c4781314303b03c54948f4b9": "2010462000000000000000", + "0x52f058d46147e9006d29bf2c09304ad1cddd6e15": "1500000000000000000000", + "0x160226efe7b53a8af462d117a0108089bdecc2d1": "200550000000000000000", + "0x256292a191bdda34c4da6b6bd69147bf75e2a9ab": "14051000000000000000", + "0x1b8aa0160cd79f005f88510a714913d70ad3be33": "201760000000000000000", + "0xd4b2ff3bae1993ffea4d3b180231da439f7502a2": "2000000000000000000000", + "0xe408aa99835307eea4a6c5eb801fe694117f707d": "500000000000000000000", + "0xe60a55f2df996dc3aedb696c08dde039b2641de8": "2000000000000000000000", + "0x73df3c3e7955f4f2d859831be38000b1076b3884": "1970000000000000000000", + "0x6228ade95e8bb17d1ae23bfb0518414d497e0eb8": "400000000000000000000", + "0x0f46c81db780c1674ac73d314f06539ee56ebc83": "9850000000000000000000", + "0x762d6f30dab99135e4eca51d5243d6c8621102d5": "282000000000000000000", + "0x4ba0d9e89601772b496847a2bb4340186787d265": "1000000000000000000000", + "0xca747576446a4c8f30b08340fee198de63ec92cf": "7020000000000000000000", + "0x99c31fe748583787cdd3e525b281b218961739e3": "1015200000000000000000", + "0x1210f80bdb826c175462ab0716e69e46c24ad076": "100000000000000000000", + "0x3f75ae61cc1d8042653b5baec4443e051c5e7abd": "95500000000000000000", + "0x5c4892907a0720df6fd3413e63ff767d6b398023": "13189467000000000000000", + "0x17f14632a7e2820be6e8f6df823558283dadab2d": "2000000000000000000000", + "0x1dc7f7dad85df53f1271152403f4e1e4fdb3afa0": "200000000000000000000", + "0x5a30feac37ac9f72d7b4af0f2bc73952c74fd5c3": "2000000000000000000000", + "0x136d4b662bbd1080cfe4445b0fa213864435b7f1": "4000000000000000000000", + "0xc1ec81dd123d4b7c2dd9b4d438a7072c11dc874c": "2000000000000000000000", + "0x09f9575be57d004793c7a4eb84b71587f97cbb6a": "200000000000000000000", + "0x2c4b470307a059854055d91ec3794d80b53d0f4a": "20000000000000000000000", + "0x6af6c7ee99df271ba15bf384c0b764adcb4da182": "999972000000000000000", + "0x0dae3ee5b915b36487f9161f19846d101433318a": "1910000000000000000000", + "0x0dcf9d8c9804459f647c14138ed50fad563b4154": "173000000000000000000", + "0xbfa8c858df102cb12421008b0a31c4c7190ad560": "200000000000000000000", + "0xc2fd0bf7c725ef3e047e5ae1c29fe18f12a7299c": "1337000000000000000000", + "0xd70a612bd6dda9eab0dddcff4aaf4122d38feae4": "540000000000000000000", + "0xe07137ae0d116d033533c4eab496f8a9fb09569c": "1400000000000000000000", + "0x7f49f20726471ac1c7a83ef106e9775ceb662566": "5910000000000000000000", + "0x1e706655e284dcf0bb37fe075d613a18dc12ff4a": "4376760000000000000000", + "0x03af7ad9d5223cf7c8c13f20df67ebe5ffc5bb41": "200000000000000000000", + "0x228242f8336eecd8242e1f000f41937e71dffbbf": "5000000000000000000000", + "0xe8ed51bbb3ace69e06024b33f86844c47348db9e": "165170600000000000000000", + "0x3b566a8afad19682dc2ce8679a3ce444a5b0fd4f": "2000000000000000000000", + "0xdc738fb217cead2f69594c08170de1af10c419e3": "100000000000000000000000", + "0x13032446e7d610aa00ec8c56c9b574d36ca1c016": "2000000000000000000000", + "0x6ca6a132ce1cd288bee30ec7cfeffb85c1f50a54": "2000000000000000000000", + "0xb85f26dd0e72d9c29ebaf697a8af77472c2b58b5": "11900000000000000000000", + "0x055bd02caf19d6202bbcdc836d187bd1c01cf261": "100000000000000000000", + "0x3c322e611fdb820d47c6f8fc64b6fad74ca95f5e": "242514000000000000000", + "0x8daddf52efbd74da95b969a5476f4fbbb563bfd2": "835000000000000000000", + "0xc63ac417992e9f9b60386ed953e6d7dff2b090e8": "4000086000000000000000", + "0x27f03cf1abc5e1b51dbc444b289e542c9ddfb0e6": "5000000000000000000000", + "0xd8f4bae6f84d910d6d7d5ac914b1e68372f94135": "100000000000000000000", + "0x9f83a293c324d4106c18faa8888f64d299054ca0": "200000000000000000000", + "0x39ee4fe00fbced647068d4f57c01cb22a80bccd1": "6000000000000000000000", + "0x404100db4c5d0eec557823b58343758bcc2c8083": "20000000000000000000", + "0x02751dc68cb5bd737027abf7ddb77390cd77c16b": "20000000000000000000", + "0xd10302faa1929a326904d376bf0b8dc93ad04c4c": "1790000000000000000000", + "0xcc419fd9912b85135659e77a93bc3df182d45115": "10000000000000000000000", + "0x10097198b4e7ee91ff82cc2f3bd95fed73c540c0": "2000000000000000000000", + "0x7e24d9e22ce1da3ce19f219ccee523376873f367": "5900150000000000000000", + "0x2e4ee1ae996aa0a1d92428d06652a6bea6d2d15d": "2000000000000000000000", + "0x91a4149a2c7b1b3a67ea28aff34725e0bf8d7524": "1940000000000000000000", + "0xead65262ed5d122df2b2751410f98c32d1238f51": "101680000000000000000", + "0xe20954d0f4108c82d4dcb2148d26bbd924f6dd24": "10000000000000000000000", + "0xebb7d2e11bc6b58f0a8d45c2f6de3010570ac891": "26740000000000000000", + "0xef115252b1b845cd857f002d630f1b6fa37a4e50": "1970000000000000000000", + "0x01a818135a414210c37c62b625aca1a54611ac36": "260000000000000000000", + "0xea1ea0c599afb9cd36caacbbb52b5bbb97597377": "1069600000000000000000", + "0x7a7a4f807357a4bbe68e1aa806393210c411ccb3": "30000000000000000000000", + "0x6d40ca27826d97731b3e86effcd7b92a4161fe89": "2000000000000000000000", + "0x8431277d7bdd10457dc017408c8dbbbd414a8df3": "39400000000000000000", + "0x69b81d5981141ec7a7141060dfcf8f3599ffc63e": "5000000000000000000000", + "0x47688410ff25d654d72eb2bc06e4ad24f833b094": "160440000000000000000", + "0x6c101205b323d77544d6dc52af37aca3cec6f7f1": "10000000000000000000000", + "0xfb685c15e439965ef626bf0d834cd1a89f2b5695": "3940000000000000000000", + "0x673706b1b0e4dc7a949a7a796258a5b83bb5aa83": "16100000000000000000000", + "0xecdaf93229b45ee672f65db506fb5eca00f7fce6": "1605009000000000000000", + "0xec6904bae1f69790591709b0609783733f2573e3": "500000000000000000000", + "0x812ea7a3b2c86eed32ff4f2c73514cc63bacfbce": "1000000000000000000000", + "0x196c02210a450ab0b36370655f717aa87bd1c004": "259456000000000000000", + "0xd96ac2507409c7a383ab2eee1822a5d738b36b56": "200000000000000000000", + "0xae2f9c19ac76136594432393b0471d08902164d3": "698600000000000000000", + "0x9d32962ea99700d93228e9dbdad2cc37bb99f07e": "3327560000000000000000", + "0x17e584e810e567702c61d55d434b34cdb5ee30f6": "5000000000000000000000", + "0xa3a93ef9dbea2636263d06d8492f6a41de907c22": "60000000000000000000", + "0x2b5016e2457387956562587115aa8759d8695fdf": "200000000000000000000000", + "0x140129eaa766b5a29f5b3af2574e4409f8f6d3f1": "6400000000000000000000", + "0x7025965d2b88da197d4459be3dc9386344cc1f31": "2005500000000000000000", + "0x388bdcdae794fc44082e667501344118ea96cd96": "1670000000000000000000", + "0xeee9d0526eda01e43116a395322dda8970578f39": "9999980000000000000000", + "0x6ec89b39f9f5276a553e8da30e6ec17aa47eefc7": "447500000000000000000", + "0x7e236666b2d06e63ea4e2ab84357e2dfc977e50e": "999972000000000000000", + "0x68df947c495bebaeb8e889b3f953d533874bf106": "546000000000000000000", + "0xd40ed66ab3ceff24ca05ecd471efb492c15f5ffa": "500000000000000000000", + "0xf0c70d0d6dab7663aa9ed9ceea567ee2c6b02765": "2089349000000000000000", + "0xb589676d15a04448344230d4ff27c95edf122c49": "1000000000000000000000", + "0xa0347f0a98776390165c166d32963bf74dcd0a2f": "1000000000000000000000", + "0xd47d8685faee147c520fd986709175bf2f886bef": "2000000000000000000000", + "0xa1dcd0e5b05a977c9623e5ae2f59b9ada2f33e31": "100000000000000000000", + "0x4979194ec9e97db9bee8343b7c77d9d7f3f1dc9f": "20000000000000000000", + "0x7cd20eccb518b60cab095b720f571570caaa447e": "500000000000000000000", + "0x2ff830cf55fb00d5a0e03514fecd44314bd6d9f1": "10000000000000000000000", + "0x0bb25ca7d188e71e4d693d7b170717d6f8f0a70a": "336870000000000000000", + "0xe9a2b4914e8553bf0d7c00ca532369b879f931bf": "2000000000000000000000", + "0x720e6b22bf430966fa32b6acb9a506eebf662c61": "152000000000000000000", + "0x7ade5d66b944bb860c0efdc86276d58f4653f711": "2000000000000000000000", + "0x2eaff9f8f8113064d3957ac6d6e11eee42c8195d": "1970000000000000000000", + "0x0c8fd7775e54a6d9c9a3bf890e761f6577693ff0": "9850000000000000000000", + "0x290a56d41f6e9efbdcea0342e0b7929a8cdfcb05": "344000000000000000000", + "0xd73ed2d985b5f21b55b274643bc6da031d8edd8d": "49250000000000000000000", + "0x80156d10efa8b230c99410630d37e269d4093cea": "2000000000000000000000", + "0x0989c200440b878991b69d6095dfe69e33a22e70": "1910000000000000000000", + "0xec8014efc7cbe5b0ce50f3562cf4e67f8593cd32": "17300000000000000000", + "0xde612d0724e84ea4a7feaa3d2142bd5ee82d3201": "20000000000000000000", + "0x0f832a93df9d7f74cd0fb8546b7198bf5377d925": "143000000000000000000", + "0xaa2c670096d3f939305325427eb955a8a60db3c5": "2003010000000000000000", + "0x25287b815f5c82380a73b0b13fbaf982be24c4d3": "40000000000000000000", + "0xe75c3b38a58a3f33d55690a5a59766be185e0284": "500000000000000000000", + "0x1940dc9364a852165f47414e27f5002445a4f143": "10850000000000000000000", + "0xe5b826196c0e1bc1119b021cf6d259a610c99670": "200000000000000000000", + "0x82a15cef1d6c8260eaf159ea3f0180d8677dce1c": "2000000000000000000000", + "0xda06044e293c652c467fe74146bf185b21338a1c": "1000000000000000000000", + "0xf815c10a032d13c34b8976fa6e3bd2c9131a8ba9": "1337000000000000000000", + "0xcd95fa423d6fc120274aacde19f4eeb766f10420": "200000000000000000000", + "0xe3a4f83c39f85af9c8b1b312bfe5fc3423afa634": "28650000000000000000", + "0x768ce0daa029b7ded022e5fc574d11cde3ecb517": "322000000000000000000", + "0xe3ec18a74ed43855409a26ade7830de8e42685ef": "19700000000000000000", + "0xb2bdbedf95908476d7148a370cc693743628057f": "4000000000000000000000", + "0xbbb8ffe43f98de8eae184623ae5264e424d0b8d7": "107600000000000000000", + "0x090cebef292c3eb081a05fd8aaf7d39bf07b89d4": "4000000000000000000000", + "0xdd2a233adede66fe1126d6c16823b62a021feddb": "2000000000000000000000", + "0xd8cd64e0284eec53aa4639afc4750810b97fab56": "20000000000000000000", + "0xe5953fea497104ef9ad2d4e5841c271f073519c2": "704000000000000000000", + "0x967d4142af770515dd7062af93498dbfdff29f20": "20200000000000000000", + "0xfd191a35157d781373fb411bf9f25290047c5eef": "1000000000000000000000", + "0x8967d7b9bdb7b4aed22e65a15dc803cb7a213f10": "400000000000000000000", + "0x51e43fe0d25c782860af81ea89dd793c13f0cbb1": "60000000000000000000", + "0xa38476691d34942eea6b2f76889223047db4617a": "2000000000000000000000", + "0x1321ccf29739b974e5a516f18f3a843671e39642": "4000000000000000000000", + "0x4d71a6eb3d7f327e1834278e280b039eddd31c2f": "6000000000000000000000", + "0xdc2d15a69f6bb33b246aef40450751c2f6756ad2": "1996000000000000000000", + "0xec89f2b678a1a15b9134ec5eb70c6a62071fbaf9": "200000000000000000000", + "0x27bf943c1633fe32f8bcccdb6302b407a5724e44": "940229000000000000000", + "0xd0a6c6f9e9c4b383d716b31de78d56414de8fa91": "300000000000000000000", + "0x7b6175ec9befc738249535ddde34688cd36edf25": "10000000000000000000000", + "0x41ce79950935cff55bf78e4ccec2fe631785db95": "2000000000000000000000", + "0x5598b3a79a48f32b1f5fc915b87b645d805d1afe": "500000000000000000000", + "0x5c4881165cb42bb82e97396c8ef44adbf173fb99": "110600000000000000000", + "0x25b0533b81d02a617b9229c7ec5d6f2f672e5b5a": "1000000000000000000000", + "0x015f097d9acddcddafaf2a107eb93a40fc94b04c": "20000000000000000000000", + "0xb84b53d0bb125656cddc52eb852ab71d7259f3d5": "16000000000000000000000", + "0x1a79c7f4039c67a39d7513884cdc0e2c34222490": "20000000000000000000", + "0x926209b7fda54e8ddb9d9e4d3d19ebdc8e88c29f": "2000000000000000000000", + "0xc2fe7d75731f636dcd09dbda0671393ba0c82a7d": "2200000000000000000000", + "0x30248d58e414b20fed3a6c482b59d9d8f5a4b7e2": "60000000000000000000", + "0xd0e194f34b1db609288509ccd2e73b6131a2538b": "999972000000000000000", + "0xe8f29969e75c65e01ce3d86154207d0a9e7c76f2": "2991807000000000000000", + "0xcb93199b9c90bc4915bd859e3d42866dc8c18749": "231800000000000000000", + "0xe6fe0afb9dcedd37b2e22c451ba6feab67348033": "10000000000000000000000", + "0x82f854c9c2f087dffa985ac8201e626ca5467686": "100000000000000000000000", + "0x63bb664f9117037628594da7e3c5089fd618b5b5": "20000000000000000000", + "0xf8d17424c767bea31205739a2b57a7277214eebe": "42000000000000000000", + "0x4ca8db4a5efefc80f4cd9bbcccb03265931332b6": "200000000000000000000", + "0xc56e6b62ba6e40e52aab167d21df025d0055754b": "2000000000000000000000", + "0x0d8c40a79e18994ff99ec251ee10d088c3912e80": "114600000000000000000", + "0x40a331195b977325c2aa28fa2f42cb25ec3c253c": "2000000000000000000000", + "0xa2c5854ff1599f98892c5725d262be1da98aadac": "314315000000000000000", + "0x23ab09e73f87aa0f3be0139df0c8eb6be5634f95": "8000000000000000000000", + "0xb8040536958d5998ce4bec0cfc9c2204989848e9": "24472420000000000000000", + "0x42d6b263d9e9f4116c411424fc9955783c763030": "2000000000000000000000", + "0xc496cbb0459a6a01600fc589a55a32b454217f9d": "274000000000000000000", + "0x48302c311ef8e5dc664158dd583c81194d6e0d58": "3364760000000000000000", + "0xd5b284040130abf7c1d163712371cc7e28ad66da": "1970000000000000000000", + "0xd22f0ca4cd479e661775053bcc49e390f670dd8a": "1000000000000000000000", + "0xe597f083a469c4591c3d2b1d2c772787befe27b2": "280000000000000000000", + "0x668b6ba8ab08eace39c502ef672bd5ccb6a67a20": "31135320000000000000000", + "0xa3bff1dfa9971668360c0d82828432e27bf54e67": "200000000000000000000", + "0xee655bb4ee0e8d5478526fb9f15e4064e09ff3dd": "200000000000000000000", + "0x121f855b70149ac83473b9706fb44d47828b983b": "1400000000000000000000", + "0x20a15256d50ce058bf0eac43aa533aa16ec9b380": "20000000000000000000", + "0x69bcfc1d43b4ba19de7b274bdffb35139412d3d7": "985000000000000000000", + "0xdb288f80ffe232c2ba47cc94c763cf6fc9b82b0d": "85000000000000000000", + "0xe1cb83ec5eb6f1eeb85e99b2fc63812fde957184": "20000000000000000000000", + "0xa419a984142363267575566089340eea0ea20819": "1999944000000000000000", + "0x8489f6ad1d9a94a297789156899db64154f1dbb5": "358849000000000000000", + "0xd609bf4f146eea6b0dc8e06ddcf4448a1fccc9fa": "2000000000000000000000", + "0xdf1fa2e20e31985ebe2c0f0c93b54c0fb67a264b": "200000000000000000000", + "0xefe8ff87fc260e0767638dd5d02fc4672e0ec06d": "2000000000000000000000", + "0xeef1bbb1e5a83fde8248f88ee3018afa2d1332eb": "200000000000000000000", + "0x4b3aab335ebbfaa870cc4d605e7d2e74c668369f": "60000000000000000000000", + "0x8f4fb1aea7cd0f570ea5e61b40a4f4510b6264e4": "4000000000000000000000", + "0x0b0b3862112aeec3a03492b1b05f440eca54256e": "4000000000000000000000", + "0xdff4007931786593b229efe5959f3a4e219e51af": "4925000000000000000000", + "0xfec14e5485de2b3eef5e74c46146db8e454e0335": "179000000000000000000", + "0xac21c1e5a3d7e0b50681679dd6c792dbca87decb": "100000000000000000000000", + "0x796ebbf49b3e36d67694ad79f8ff36767ac6fab0": "60800000000000000000", + "0xae7739124ed153052503fc101410d1ffd8cd13b7": "999942000000000000000", + "0x86026cad3fe4ea1ce7fca260d3d45eb09ea6a364": "200000000000000000000", + "0xb2fc84a3e50a50af02f94da0383ed59f71ff01d7": "30000000000000000000000", + "0xbbab000b0408ed015a37c04747bc461ab14e151b": "6000000000000000000000", + "0xc4ff6fbb1f09bd9e102ba033d636ac1c4c0f5304": "1000000000000000000000", + "0xcc606f511397a38fc7872bd3b0bd03c71bbd768b": "1000000000000000000000", + "0xf346d7de92741c08fc58a64db55b062dde012d14": "295106000000000000000", + "0x33f15223310d44de8b6636685f3a4c3d9c5655a5": "250500000000000000000", + "0x3c860e2e663f46db53427b29fe3ea5e5bf62bbcc": "98500000000000000000", + "0xacb94338554bc488cc88ae2d9d94080d6bdf8410": "1000000000000000000000", + "0x9c5cc111092c122116f1a85f4ee31408741a7d2f": "492500000000000000000", + "0x5f76f0a306269c78306b3d650dc3e9c37084db61": "2400000000000000000000", + "0x2c0cc3f951482cc8a2925815684eb9f94e060200": "6000000000000000000000", + "0xb74372dbfa181dc9242f39bf1d3731dffe2bdacf": "2000000000000000000000", + "0x3bab4b01a7c84ba13feea9b0bb191b77a3aadca3": "200000000000000000000", + "0x39aa05e56d7d32385421cf9336e90d3d15a9f859": "26000000000000000000", + "0x4a52bad20357228faa1e996bed790c93674ba7d0": "1337000000000000000000", + "0xff128f4b355be1dc4a6f94fa510d7f15d53c2aff": "2720000000000000000000", + "0x92793ac5b37268774a7130de2bbd330405661773": "40110000000000000000", + "0xdb19a3982230368f0177219cb10cb259cdb2257c": "2000000000000000000000", + "0x8d1794da509cb297053661a14aa892333231e3c1": "199600000000000000000", + "0x9b7c8810cc7cc89e804e6d3e38121850472877fe": "2000000000000000000000", + "0xed3cbc3782cebd67989b305c4133b2cde32211eb": "400000000000000000000", + "0x8532490897bbb4ce8b7f6b837e4cba848fbe9976": "100000000000000000000", + "0xc384ac6ee27c39e2f278c220bdfa5baed626d9d3": "600000000000000000000", + "0xb1459285863ea2db3759e546ceb3fb3761f5909c": "1122309000000000000000", + "0x634efc24371107b4cbf03f79a93dfd93e431d5fd": "1221341000000000000000", + "0xef9f59aeda418c1494682d941aab4924b5f4929a": "100000000000000000000000", + "0xe7311c9533f0092c7248c9739b5b2c864a34b1ce": "2803436000000000000000", + "0xe6e621eaab01f20ef0836b7cad47464cb5fd3c96": "316014000000000000000", + "0xcd102cd6db3df14ad6af0f87c72479861bfc3d24": "2000000000000000000000", + "0x005a9c03f69d17d66cbb8ad721008a9ebbb836fb": "2000000000000000000000", + "0xa072cebe62a9e9f61cc3fbf88a9efbfe3e9a8d70": "400000000000000000000", + "0xf2ab1161750244d0ecd048ee0d3e51abb143a2fd": "1235800000000000000000", + "0xf686785b89720b61145fea80978d6acc8e0bc196": "4000000000000000000000", + "0x0a2b4fc5d81ace67dc4bba03f7b455413d46fe3d": "197000000000000000000", + "0xc32ec7e42ad16ce3e2555ad4c54306eda0b26758": "2000000000000000000000", + "0xf3fa723552a5d0512e2b62f48dca7b2b8105305b": "137000000000000000000", + "0x6dc3f92baa1d21dab7382b893261a0356fa7c187": "1730000000000000000000", + "0x4627c606842671abde8295ee5dd94c7f549534f4": "286600000000000000000", + "0xe39e46e15d22ce56e0c32f1877b7d1a264cf94f3": "20000000000000000000000", + "0xd7d157e4c0a96437a6d285741dd23ec4361fa36b": "2000000000000000000000", + "0x68f8f45155e98c5029a4ebc5b527a92e9fa83120": "4436101000000000000000", + "0x9aba2b5e27ff78baaab5cdc988b7be855cebbdce": "9999000000000000000000", + "0x66b39837cb3cac8a802afe3f12a258bbca62dacd": "400000000000000000000", + "0xd39b7cbc94003fc948f0cde27b100db8ccd6e063": "400000000000000000000", + "0x3db9ed7f024c7e26372feacf2b050803445e3810": "1285600000000000000000", + "0x3fbc1e4518d73400c6d046359439fb68ea1a49f4": "16400000000000000000000", + "0xe3da4f3240844c9b6323b4996921207122454399": "11539639000000000000000", + "0x09afa73bc047ef46b977fd9763f87286a6be68c6": "501500000000000000000", + "0x1dbe8e1c2b8a009f85f1ad3ce80d2e05350ee39c": "135400000000000000000", + "0x2c5a2d0abda03bbe215781b4ff296c8c61bdbaf6": "30617000000000000000", + "0x9a9d1dc0baa77d6e20c3d849c78862dd1c054c87": "880000000000000000000", + "0x3ccef88679573947e94997798a1e327e08603a65": "807700000000000000000", + "0x850b9db18ff84bf0c7da49ea3781d92090ad7e64": "2600000000000000000000", + "0x361c75931696bc3d427d93e76c77fd13b241f6f4": "549212000000000000000", + "0xc8f2b320e6dfd70906c597bad2f9501312c78259": "1504800000000000000000", + "0x8dc1d5111d09af25fdfcac455c7cec283e6d6775": "2000000000000000000000", + "0xcd7ece086b4b619b3b369352ee38b71ddb06439a": "200000000000000000000", + "0xf607c2150d3e1b99f24fa1c7d540add35c4ebe1e": "3098020000000000000000", + "0x32485c818728c197fea487fbb6e829159eba8370": "1053893000000000000000", + "0x8e670815fb67aeaea57b86534edc00cdf564fee5": "3300000000000000000000", + "0x10df681506e34930ac7a5c67a54c3e89ce92b981": "2153800000000000000000", + "0x1cf2eb7a8ccac2adeaef0ee87347d535d3b94058": "2000000000000000000000", + "0xf0dc43f205619127507b2b1c1cfdf32d28310920": "301973000000000000000", + "0xf2c2904e9fa664a11ee25656d8fd2cc0d9a522a0": "13370000000000000000", + "0x70670fbb05d33014444b8d1e8e7700258b8caa6d": "2000000000000000000000", + "0x5160ed612e1b48e73f3fc15bc4321b8f23b8a24b": "562800000000000000000", + "0x54a62bf9233e146ffec3876e45f20ee8414adeba": "10000000000000000000000", + "0x26d4ec17d5ceb2c894bdc59d0a6a695dad2b43cc": "2935300000000000000000", + "0x205fc843e19a4913d1881eb69b69c0fa3be5c50b": "9700000000000000000000", + "0xe001aba77c02e172086c1950fffbcaa30b83488f": "1970000000000000000000", + "0x21efbca09b3580b98e73f5b2f7f4dc0bf02c529c": "2000000000000000000000", + "0xc4d916574e68c49f7ef9d3d82d1638b2b7ee0985": "1580000000000000000000", + "0xcab0d32cf3767fa6b3537c84328baa9f50458136": "8960000000000000000000", + "0x7ce4686446f1949ebed67215eb0d5a1dd72c11b8": "2217776000000000000000", + "0x7837fcb876da00d1eb3b88feb3df3fa4042fac82": "1760000000000000000000", + "0x71e38ff545f30fe14ca863d4f5297fd48c73a5ce": "3580000000000000000000", + "0xe528a0e5a267d667e9393a6584e19b34dc9be973": "5600000000000000000000", + "0xc5374928cdf193705443b14cc20da423473cd9cf": "138139000000000000000", + "0xe406f5dd72cab66d8a6ecbd6bfb494a7b6b09afe": "100000000000000000000", + "0xd7ef340e66b0d7afcce20a19cb7bfc81da33d94e": "3000000000000000000000", + "0xe012db453827a58e16c1365608d36ed658720507": "2000000000000000000000", + "0xd59638d3c5faa7711bf085745f9d5bdc23d498d8": "2000000000000000000000", + "0x008fc7cbadffbd0d7fe44f8dfd60a79d721a1c9c": "1000000000000000000000", + "0x8a3470282d5e2a2aefd7a75094c822c4f5aeef8a": "242743000000000000000", + "0x38b3965c21fa893931079beacfffaf153678b6eb": "170374000000000000000", + "0x57dd9471cbfa262709f5f486bcb774c5f527b8f8": "197000000000000000000", + "0x5a60c924162873fc7ea4da7f972e350167376031": "83583000000000000000", + "0xb9013c51bd078a098fae05bf2ace0849c6be17a5": "80000000000000000000", + "0xdc23b260fcc26e7d10f4bd044af794579460d9da": "500038000000000000000", + "0x45db03bccfd6a5f4d0266b82a22a368792c77d83": "8000000000000000000000", + "0x3e0cbe6a6dcb61f110c45ba2aa361d7fcad3da73": "8022000000000000000000", + "0x42d3a5a901f2f6bd9356f112a70180e5a1550b60": "925000000000000000000", + "0x47219229e8cd56659a65c2a943e2dd9a8f4bfd89": "1520000000000000000000", + "0xa20d071b1b003063497d7990e1249dabf36c35f7": "1000000000000000000000", + "0x6835c8e8b74a2ca2ae3f4a8d0f6b954a3e2a8392": "60140000000000000000", + "0x0c2d5c920538e953caaf24f0737f554cc6927742": "1000000000000000000000", + "0xeedf6c4280e6eb05b934ace428e11d4231b5905b": "200000000000000000000", + "0xffa696ecbd787e66abae4fe87b635f07ca57d848": "1337000000000000000000", + "0x3e81772175237eb4cbe0fe2dcafdadffeb6a1999": "8800000000000000000000", + "0xb44783c8e57b480793cbd69a45d90c7b4f0c48ac": "20000000000000000000", + "0xf84f090adf3f8db7e194b350fbb77500699f66fd": "1970000000000000000000", + "0x2e9824b5c132111bca24ddfba7e575a5cd7296c1": "17201900000000000000000", + "0x5cce72d068c7c3f55b1d2819545e77317cae8240": "1940000000000000000000", + "0xd815e1d9f4e2b5e57e34826b7cfd8881b8546890": "17300000000000000000", + "0xf901c00fc1db88b69c4bc3252b5ca70ea6ee5cf6": "400000000000000000000", + "0xa960b1cadd3b5c1a8e6cb3abcaf52ee7c3d9fa88": "1522704000000000000000", + "0xf7e45a12aa711c709acefe95f33b78612d2ad22a": "66230000000000000000000", + "0xc332df50b13c013490a5d7c75dbfa366da87b6d6": "4000000000000000000000", + "0xd467cf064c0871989b90d8b2eb14ccc63b360823": "200000000000000000000", + "0xb9144b677c2dc614ceefdf50985f1183208ea64c": "2000000000000000000000", + "0xea7c4d6dc729cd6b157c03ad237ca19a209346c3": "2000000000000000000000", + "0x9c9de44724a4054da0eaa605abcc802668778bea": "200020000000000000000", + "0xd7140c8e5a4307fab0cc27badd9295018bf87970": "109600000000000000000", + "0xc33acdb3ba1aab27507b86b15d67faf91ecf6293": "2000000000000000000000", + "0xdb2a0c9ab64df58ddfb1dbacf8ba0d89c85b31b4": "4000000000000000000000", + "0xbfcb9730246304700da90b4153e71141622e1c41": "1000000000000000000000", + "0x07dc8c8b927adbedfa8f5d639b4352351f2f36d2": "314382000000000000000", + "0x2d5391e938b34858cf965b840531d5efda410b09": "1400000000000000000000", + "0x0b5e2011ebc25a007f21362960498afb8af280fb": "2000000000000000000000", + "0xed9fb1f5af2fbf7ffc5029cee42b70ff5c275bf5": "280000000000000000000", + "0xa3232d068d50064903c9ebc563b515acc8b7b097": "2002000000000000000000", + "0x66274fea82cd30b6c29b23350e4f4f3d310a5899": "2070000000000000000000", + "0xdbfb1bb464b8a58e500d2ed8de972c45f5f1c0fb": "1600000000000000000000", + "0xa1f8d8bcf90e777f19b3a649759ad95027abdfc3": "200000000000000000000", + "0x5bd23547477f6d09d7b2a005c5ee650c510c56d7": "10000000000000000000000", + "0xec3b8b58a12703e581ce5ffd7e21c57d1e5c663f": "1700000000000000000000", + "0x54310b3aa88703a725dfa57de6e646935164802c": "1910000000000000000000", + "0x8f41b1fbf54298f5d0bc2d122f4eb95da4e5cd3d": "354200000000000000000", + "0xc80b36d1beafba5fcc644d60ac6e46ed2927e7dc": "13370000000000000000", + "0x1ea492bce1ad107e337f4bd4a7ac9a7babcccdab": "100000000000000000000", + "0xaaf023fef290a49bb78bb7abc95d669c50d528b0": "200000000000000000000", + "0x80b79f338390d1ba1b3737a29a0257e5d91e0731": "20000000000000000000", + "0xf382e4c20410b951089e19ba96a2fee3d91cce7e": "5054000000000000000000", + "0x0748713145ef83c3f0ef4d31d823786f7e9cc689": "4500000000000000000000", + "0x21e219c89ca8ac14ae4cba6130eeb77d9e6d3962": "789580000000000000000", + "0xca9a042a6a806ffc92179500d24429e8ab528117": "1100000000000000000000", + "0xbcc9593b2da6df6a34d71b1aa38dacf876f95b88": "20000000000000000000", + "0xd1438267231704fc7280d563adf4763844a80722": "200000000000000000000", + "0x4989e1ab5e7cd00746b3938ef0f0d064a2025ba5": "2000000000000000000000", + "0xbd4b60faec740a21e3071391f96aa534f7c1f44e": "182000000000000000000", + "0x8c7cb4e48b25031aa1c4f92925d631a8c3edc761": "1000000000000000000000", + "0x322788b5e29bf4f5f55ae1ddb32085fda91b8ebe": "200000000000000000000", + "0xf15e182c4fbbad79bd93342242d4dccf2be58925": "1940000000000000000000", + "0x1548b770a5118ede87dba2f690337f616de683ab": "527558000000000000000", + "0x69c2d835f13ee90580408e6a3283c8cca6a434a2": "656000000000000000000", + "0xa1e4380a3b1f749673e270229993ee55f35663b4": "2000000000000000000000", + "0xc7675e5647b9d8daf4d3dff1e552f6b07154ac38": "180000000000000000000", + "0xa02c1e34064f0475f7fa831ccb25014c3aa31ca2": "60000000000000000000", + "0x517c75430de401c341032686112790f46d4d369e": "388000000000000000000", + "0x29681d9912ddd07eaabb88d05d90f766e862417d": "1000000000000000000000", + "0x544dda421dc1eb73bb24e3e56a248013b87c0f44": "1970000000000000000000", + "0x2ab97e8d59eee648ab6caf8696f89937143864d6": "3820000000000000000000", + "0x79c130c762b8765b19d2abc9a083ab8f3aad7940": "3940000000000000000000", + "0xf9650d6989f199ab1cc479636ded30f241021f65": "850000000000000000000", + "0xd1c96e70f05ae0e6cd6021b2083750a7717cde56": "500000000000000000000", + "0x88106c27d20b74b4b98ca62b232bd5c97411171f": "197000000000000000000", + "0x37ab66083a4fa23848b886f9e66d79cdc150cc70": "88510000000000000000000", + "0x8e6156336be2cdbe32140df08a2ba55fd0a58463": "74480000000000000000", + "0x2982d76a15f847dd41f1922af368fe678d0e681e": "100000000000000000000", + "0x209e8e29d33beae8fb6baa783d133e1d9ec1bc0b": "835000000000000000000", + "0xb325674c01e3f7290d5226339fbeac67d221279f": "2800000000000000000000", + "0xf20c9a99b74759d782f25c1ceca802a27e0b436c": "1670000000000000000000", + "0x61bf84d5ab026f58c873f86ff0dfca82b55733ae": "2000000000000000000000", + "0x0734a0a81c9562f4d9e9e10a8503da15db46d76e": "18200000000000000000", + "0x0521bc3a9f8711fecb10f50797d71083e341eb9d": "20000000000000000000", + "0x3301d9ca2f3bfe026279cd6819f79a293d98156e": "50000000000000000000000", + "0x549d51af29f724c967f59423b85b2681e7b15136": "3760000000000000000000", + "0x2053ac97548a0c4e8b80bc72590cd6a098fe7516": "187000000000000000000", + "0xaa321fdbd449180db8ddd34f0fe906ec18ee0914": "685000000000000000000", + "0x697f55536bf85ada51841f0287623a9f0ed09a17": "10000000000000000000000", + "0xdf57353aaff2aadb0a04f9014e8da7884e86589c": "152800000000000000000", + "0x6807ddc88db489b033e6b2f9a81553571ab3c805": "29944000000000000000", + "0x90057af9aa66307ec9f033b29724d3b2f41eb6f9": "121930000000000000000000", + "0x3ff836b6f57b901b440c30e4dbd065cf37d3d48c": "200000000000000000000", + "0x91051764af6b808e4212c77e30a5572eaa317070": "1000000000000000000000", + "0x7faa30c31519b584e97250ed2a3cf3385ed5fd50": "2000000000000000000000", + "0xfb842ca2c5ef133917a236a0d4ac40690110b038": "306000000000000000000", + "0xaa167026d39ab7a85635944ed9edb2bfeba11850": "8298000000000000000000", + "0x57beea716cbd81700a73d67f9ff039529c2d9025": "200000000000000000000", + "0x654b7e808799a83d7287c67706f2abf49a496404": "1970000000000000000000", + "0xdde8f0c31b7415511dced1cd7d46323e4bd12232": "1610000000000000000000", + "0x8667fa1155fed732cfb8dca5a0d765ce0d0705ed": "81770000000000000000", + "0x905526568ac123afc0e84aa715124febe83dc87c": "17900000000000000000", + "0x8e98766524b0cf2747c50dd43b9567594d9731de": "1997200000000000000000", + "0xc6df2075ebd240d44869c2be6bdf82e63d4ef1f5": "20000000000000000000", + "0x2ff5cab12c0d957fd333f382eeb75107a64cb8e8": "10000000000000000000000", + "0x3055efd26029e0d11b930df4f53b162c8c3fd2ce": "499938000000000000000", + "0xb2c53efa33fe4a3a1a80205c73ec3b1dbcad0602": "1918595000000000000000", + "0x766b3759e8794e926dac473d913a8fb61ad0c2c9": "86500000000000000000", + "0x882aa798bf41df179f85520130f15ccdf59b5e58": "2000000000000000000000", + "0x80b23d380b825c46e0393899a85556462da0e18c": "2000000000000000000000", + "0x51f4663ab44ff79345f427a0f6f8a6c8a53ff234": "20000000000000000000000", + "0x8d5ef172bf77315ea64e85d0061986c794c6f519": "3940000000000000000000", + "0x75ac547017134c04ae1e11d60e63ec04d18db4ef": "6000000000000000000000", + "0xce1b0cb46aaecfd79b880cad0f2dda8a8dedd0b1": "20000000000000000000", + "0x21408b4d7a2c0e6eca4143f2cacdbbccba121bd8": "20000000000000000000000", + "0x9c526a140683edf1431cfaa128a935e2b614d88b": "111000000000000000000", + "0x599728a78618d1a17b9e34e0fed8e857d5c40622": "14000000000000000000000", + "0x6ac4d4be2db0d99da3faaaf7525af282051d6a90": "80185000000000000000", + "0x785c8ea774d73044a734fa790a1b1e743e77ed7c": "238750000000000000000", + "0xff2726294148b86c78a9372497e459898ed3fee3": "1970000000000000000000", + "0x68a86c402388fddc59028fec7021e98cbf830eac": "19100000000000000000", + "0x6121af398a5b2da69f65c6381aec88ce9cc6441f": "640000000000000000000", + "0x5a6686b0f17e07edfc59b759c77d5bef164d3879": "1490000000000000000000", + "0xa2d38de1c73906f6a7ca6efeb97cf6f69cc421be": "1000000000000000000000", + "0xae3f98a443efe00f3e711d525d9894dc9a61157b": "295500000000000000000", + "0x5f1c8a04c90d735b8a152909aeae636fb0ce1665": "6999974000000000000000", + "0xd687cec0059087fdc713d4d2d65e77daefedc15f": "60000000000000000000", + "0x845203750f7148a9aa262921e86d43bf641974fd": "100000000000000000000", + "0x64464a6805b462412a901d2db8174b06c22deea6": "475600000000000000000", + "0x053471cd9a41925b3904a5a8ffca3659e034be23": "199600000000000000000", + "0x911ff233e1a211c0172c92b46cf997030582c83a": "1970000000000000000000", + "0xd930b27a78876485d0f48b70dd5336549679ca8f": "40000000000000000000", + "0x6ba9b21b35106be159d1c1c2657ac56cd29ffd44": "4480000000000000000000", + "0xebac2b4408ef5431a13b8508e86250982114e145": "4000000000000000000000", + "0x931df34d1225bcd4224e63680d5c4c09bce735a6": "68000000000000000000", + "0x23eb6fd85671a9063ab7678ebe265a20f61a02b3": "2000000000000000000000", + "0xb32af3d3e8d075344926546f2e32887bf93b16bd": "200000000000000000000", + "0x8261fa230c901d43ff579f4780d399f31e6076bc": "2000000000000000000000", + "0x84a74ceecff65cb93b2f949d773ef1ad7fb4a245": "92998000000000000000", + "0xda982e9643ffece723075a40fe776e5ace04b29b": "160884000000000000000", + "0xba70e8b4759c0c3c82cc00ac4e9a94dd5bafb2b8": "890342000000000000000", + "0x82f2e991fd324c5f5d17768e9f61335db6319d6c": "500000000000000000000", + "0x3e84b35c5b2265507061d30b6f12da033fe6f8b9": "1790000000000000000000", + "0x2895e80999d406ad592e2b262737d35f7db4b699": "1940000000000000000000", + "0x65f534346d2ffb787fa9cf185d745ba42986bd6e": "500000000000000000000", + "0xc7368b9709a5c1b51c0adf187a65df14e12b7dba": "9489681000000000000000", + "0xba176dbe3249e345cd4fa967c0ed13b24c47e586": "399990000000000000000", + "0xcff6a6fe3e9a922a12f21faa038156918c4fcb9c": "78800000000000000000", + "0xbcbd31252ec288f91e298cd812c92160e738331a": "1975802000000000000000", + "0x5543dd6d169eec8a213bbf7a8af9ffd15d4ff759": "18200000000000000000", + "0xb65bd780c7434115162027565223f44e5498ff8c": "19999800000000000000000", + "0x4cadf573ce4ceec78b8e1b21b0ed78eb113b2c0e": "2000000000000000000000", + "0x04aafc8ae5ce6f4903c89d7fac9cb19512224777": "500000000000000000000", + "0xfdc4d4765a942f5bf96931a9e8cc7ab8b757ff4c": "87000000000000000000000", + "0x38c7851f5ffd4cee98df30f3b25597af8a6ca263": "2631920000000000000000", + "0x0e320219838e859b2f9f18b72e3d4073ca50b37d": "2000000000000000000000", + "0xbbbf39b1b67995a42241504f9703d2a14a515696": "1580000000000000000000", + "0x5b800bfd1b3ed4a57d875aed26d42f1a7708d72a": "6392000000000000000000", + "0x5b85e60e2af0544f2f01c64e2032900ebd38a3c7": "2000000000000000000000", + "0xc9ac01c3fb0929033f0ccc7e1acfeaaba7945d47": "12459235000000000000000", + "0xf355d3ec0cfb907d8dbb1bf3464e458128190bac": "4925600000000000000000", + "0x69c08d744754de709ce96e15ae0d1d395b3a2263": "1000000000000000000000", + "0xcef77451dfa2c643e00b156d6c6ff84e2373eb66": "188000000000000000000", + "0xf3034367f87d24d3077fa9a2e38a8b0ccb1104ef": "1000000000000000000000", + "0x73473e72115110d0c3f11708f86e77be2bb0983c": "20000000000000000000", + "0x761e6caec189c230a162ec006530193e67cf9d19": "2000000000000000000000", + "0xe9caf827be9d607915b365c83f0d3b7ea8c79b50": "3000000000000000000000", + "0xeda4b2fa59d684b27a810df8978a73df308a63c2": "4000000000000000000000", + "0x065ff575fd9c16d3cb6fd68ffc8f483fc32ec835": "200000000000000000000", + "0xa72ee666c4b35e82a506808b443cebd5c632c7dd": "800000000000000000000", + "0x5b30608c678e1ac464a8994c3b33e5cdf3497112": "400000000000000000000", + "0xb0c7ce4c0dc3c2bbb99cc1857b8a455f611711ce": "4000000000000000000000", + "0xd7274d50804d9c77da93fa480156efe57ba501de": "1940000000000000000000", + "0xa609c26dd350c235e44b2b9c1dddccd0a9d9f837": "1000000000000000000000", + "0xbddfa34d0ebf1b04af53b99b82494a9e3d8aa100": "12000000000000000000000", + "0xfd40242bb34a70855ef0fd90f3802dec2136b327": "1930600000000000000000", + "0x58aed6674affd9f64233272a578dd9386b99c263": "3400000000000000000000", + "0x24434a3e32e54ecf272fe3470b5f6f512f675520": "5910000000000000000000", + "0xa379a5070c503d2fac89b8b3afa080fd45ed4bec": "19700000000000000000000", + "0x37e169a93808d8035698f815c7235613c1e659f2": "1000000000000000000000", + "0x849b116f596301c5d8bb62e0e97a8248126e39f3": "300000000000000000000", + "0xfe7011b698bf3371132d7445b19eb5b094356aee": "2000000000000000000000", + "0xf16de1891d8196461395f9b136265b3b9546f6ef": "31313000000000000000", + "0x6c6564e5c9c24eaaa744c9c7c968c9e2c9f1fbae": "1357800000000000000000", + "0x8bb0212f3295e029cab1d961b04133a1809e7b91": "2000000000000000000000", + "0x408a69a40715e1b313e1354e600800a1e6dc02a5": "35144000000000000000", + "0xddf0cce1fe996d917635f00712f4052091dff9ea": "2000000000000000000000", + "0x50fef296955588caae74c62ec32a23a454e09ab8": "1201200000000000000000", + "0xd913f0771949753c4726acaa2bd3619c5c20ff77": "3000000000000000000000", + "0x9d6ecfa03af2c6e144b7c4692a86951e902e9e1f": "3000310000000000000000", + "0xecbe5e1c9ad2b1dccf0a305fc9522f4669dd3ae7": "5000000000000000000000", + "0x33e9b71823952e1f66958c278fc28b1196a6c5a4": "100000000000000000000", + "0x9de20bc37e7f48a80ffd7ad84ffbf1a1abe1738c": "200000000000000000000", + "0x16f313cf8ad000914a0a176dc6a4342b79ec2538": "2000000000000000000000", + "0x991ac7ca7097115f26205eee0ef7d41eb4e311ae": "20000000000000000000", + "0xddfafdbc7c90f1320e54b98f374617fbd01d109f": "13370000000000000000", + "0x26b11d066588ce74a572a85a6328739212aa8b40": "2000000000000000000000", + "0xef2c34bb487d3762c3cca782ccdd7a8fbb0a9931": "180000000000000000000", + "0xa9be88ad1e518b0bbb024ab1d8f0e73f790e0c76": "2800000000000000000000", + "0x4a7494cce44855cc80582842be958a0d1c0072ee": "2400000000000000000000", + "0x23569542c97d566018c907acfcf391d14067e87e": "2000000000000000000000", + "0xd252960b0bf6b2848fdead80136db5f507f8be02": "2000000000000000000000", + "0x2c0f5b9df43625798e7e03c1a5fd6a6d091af82b": "31200000000000000000", + "0xa7c9d388ebd873e66b1713448397d0f37f8bd3a8": "5000000000000000000000", + "0x3259bd2fddfbbc6fbad3b6e874f0bbc02cda18b5": "11886645000000000000000", + "0xf287ff52f461117adb3e1daa71932d1493c65f2e": "3640000000000000000000", + "0xc852428d2b586497acd30c56aa13fb5582f84402": "945600000000000000000", + "0x296f00de1dc3bb01d47a8ccd1e5d1dd9a1eb7791": "1000000000000000000000", + "0x817493cd9bc623702a24a56f9f82e3fd48f3cd31": "2920000000000000000000", + "0x7adfedb06d91f3cc7390450b85550270883c7bb7": "322312000000000000000", + "0x8d544c32c07fd0842c761d53a897d6c950bb7599": "200000000000000000000", + "0x86297d730fe0f7a9ee24e08fb1087b31adb306a7": "2000000000000000000000", + "0xf64fe0939a8d1eea2a0ecd9a9730fd7958e33109": "20600000000000000000", + "0xb06eab09a610c6a53d56a946b2c43487ac1d5b2d": "1000000000000000000000", + "0xbae9b82f7299631408659dd74e891cb8f3860fe5": "1970000000000000000000", + "0x0eda80f4ed074aea697aeddf283b63dbca3dc4da": "2000000000000000000000", + "0xea686c5057093c171c66db99e01b0ececb308683": "384907000000000000000", + "0x425725c0f08f0811f5f006eec91c5c5c126b12ae": "150000000000000000000", + "0xb18e67a5050a1dc9fb190919a33da838ef445014": "20000000000000000000", + "0x8dd484ff8a307364eb66c525a571aac701c5c318": "4000000000000000000000", + "0x6671b182c9f741a0cd3c356c73c23126d4f9e6f4": "200000000000000000000", + "0xba0249e01d945bef93ee5ec61925e03c5ca509fd": "4000000000000000000000", + "0xb2968f7d35f208871631c6687b3f3daeabc6616c": "156060000000000000000", + "0xa6f62b8a3d7f11220701ab9ffffcb327959a2785": "506000000000000000000", + "0xc885a18aabf4541b7b7b7ecd30f6fae6869d9569": "2000000000000000000000", + "0x33fb577a4d214fe010d32cca7c3eeda63f87ceef": "1000000000000000000000", + "0xbe86d0b0438419ceb1a038319237ba5206d72e46": "999942000000000000000", + "0x466292f0e80d43a78774277590a9eb45961214f4": "970000000000000000000", + "0xb33c0323fbf9c26c1d8ac44ef74391d0804696da": "20000000000000000000", + "0xf7bc4c44910d5aedd66ed2355538a6b193c361ec": "96980000000000000000", + "0xd0f04f52109aebec9a7b1e9332761e9fe2b97bb5": "4000000000000000000000", + "0xcb4a914d2bb029f32e5fef5c234c4fec2d2dd577": "1800000000000000000000", + "0x2e619f57abc1e987aa936ae3a2264962e7eb2d9a": "756000000000000000000", + "0x166bf6dab22d841b486c38e7ba6ab33a1487ed8c": "20000000000000000000000", + "0xc3a046e3d2b2bf681488826e32d9c061518cfe8c": "2600000000000000000000", + "0xd082275f745a2cac0276fbdb02d4b2a3ab1711fe": "30000000000000000000", + "0xa701df79f594901afe1444485e6b20c3bda2b9b3": "1000000000000000000000", + "0xdec3eec2640a752c466e2b7e7ee685afe9ac41f4": "1324245000000000000000", + "0x8134dd1c9df0d6c8a5812426bb55c761ca831f08": "122360000000000000000", + "0xbfc57aa666fae28e9f107a49cb5089a4e22151dd": "1000000000000000000000", + "0xc3c2297329a6fd99117e54fc6af379b4d556547e": "6000000000000000000000", + "0x40585200683a403901372912a89834aadcb55fdb": "2000000000000000000000", + "0xcd49bf185e70d04507999f92a4de4455312827d0": "1000000000000000000000", + "0x9c6bc9a46b03ae5404f043dfcf21883e4110cc33": "200000000000000000000", + "0x1f49b86d0d3945590698a6aaf1673c37755ca80d": "700000000000000000000", + "0xefeb1997aad277cc33430e6111ed0943594048b8": "2000000000000000000000", + "0x7c0883054c2d02bc7a852b1f86c42777d0d5c856": "500000000000000000000", + "0xff49a775814ec00051a795a875de24592ea400d4": "200000000000000000000000", + "0xf039683d7b3d225bc7d8dfadef63163441be41e2": "34380000000000000000", + "0xa3ba0d3a3617b1e31b4e422ce269e873828d5d69": "850000000000000000000", + "0xd116f3dcd5db744bd008887687aa0ec9fd7292aa": "1000000000000000000000", + "0x5719f49b720da68856f4b9e708f25645bdbc4b41": "640000000000000000000", + "0x870796abc0db84af82da52a0ed68734de7e636f5": "300000000000000000000", + "0x68b6854788a7c6496cdbf5f84b9ec5ef392b78bb": "19700000000000000000000", + "0x8c2fbeee8eacc5c5d77c16abd462ee9c8145f34b": "1940000000000000000000", + "0x421684baa9c0b4b5f55338e6f6e7c8e146d41cb7": "1500000000000000000000", + "0xdd26b429fd43d84ec179825324bad5bfb916b360": "5142000000000000000000", + "0x3821862493242c0aeb84b90de05d250c1e50c074": "322200000000000000000", + "0x68a7425fe09eb28cf86eb1793e41b211e57bd68d": "668500000000000000000", + "0xda875e4e2f3cabe4f37e0eaed7d1f6dcc6ffef43": "2000000000000000000000", + "0xc2663f8145dbfec6c646fc5c49961345de1c9f11": "690000000000000000000", + "0xe89c22f1a4e1d4746ecfaa59ed386fee12d51e37": "44932000000000000000", + "0xeff86b5123bcdc17ed4ce8e05b7e12e51393a1f7": "500000000000000000000", + "0x6c3d18704126aa99ee3342ce60f5d4c85f1867cd": "50000000000000000000", + "0xb8d531a964bcea13829620c0ced72422dadb4cca": "169990000000000000000", + "0x7c29d47d57a733f56b9b217063b513dc3b315923": "4000000000000000000000", + "0xbc1e80c181616342ebb3fb3992072f1b28b802c6": "4000000000000000000000", + "0x31313ffd635bf2f3324841a88c07ed146144ceeb": "1970000000000000000000", + "0xcc4feb72df98ff35a138e01761d1203f9b7edf0a": "7000000000000000000000", + "0x741693c30376508513082020cc2b63e9fa92131b": "1200000000000000000000", + "0xaa3135cb54f102cbefe09e96103a1a796718ff54": "57800000000000000000", + "0xef61155ba009dcdebef10b28d9da3d1bc6c9ced4": "59100000000000000000", + "0xb3c94811e7175b148b281c1a845bfc9bb6fbc115": "200000000000000000000", + "0x96d9cca8f55eea0040ec6eb348a1774b95d93ef4": "4000000000000000000000", + "0xce62125adec3370ac52110953a4e760be9451e3b": "152000000000000000000", + "0xaca1e6bc64cc3180f620e94dc5b1bcfd8158e45d": "2000000000000000000000", + "0xbc237148d30c13836ffa2cad520ee4d2e5c4eeff": "1970000000000000000000", + "0x0e024e7f029c6aaf3a8b910f5e080873b85795aa": "1000000000000000000000", + "0x7283cd4675da58c496556151dafd80c7f995d318": "760000000000000000000", + "0x39b299327490d72f9a9edff11b83afd0e9d3c450": "200000000000000000000", + "0x5f333a3b2310765a0d1832b9be4c0a03704c1c09": "1000000000000000000000", + "0x5aaf1c31254a6e005fba7f5ab0ec79d7fc2b630e": "5910000000000000000000", + "0x833db42c14163c7be4cab86ac593e06266d699d5": "174212000000000000000000", + "0xf32d25eb0ea2b8b3028a4c7a155dc1aae865784d": "5710684000000000000000", + "0x1fa2319fed8c2d462adf2e17feec6a6f30516e95": "125300000000000000000", + "0xc49cfaa967f3afbf55031061fc4cef88f85da584": "2000000000000000000000", + "0x43db7ff95a086d28ebbfb82fb8fb5f230a5ebccd": "16100000000000000000", + "0xcf3f9128b07203a3e10d7d5755c0c4abc6e2cac2": "5000000000000000000000", + "0x8f4d1e7e4561284a34fef9673c0d34e12af4aa03": "2000000000000000000000", + "0x934af21b7ebfa467e2ced65aa34edd3a0ec71332": "35420000000000000000000", + "0x5d231a70c1dfeb360abd97f616e2d10d39f3cab5": "400000000000000000000", + "0x2d5d7335acb0362b47dfa3a8a4d3f5949544d380": "200000000000000000000", + "0xd1e1f2b9c16c309874dee7fac32675aff129c398": "72800000000000000000", + "0xa43b6da6cb7aac571dff27f09d39f846f53769b1": "380000000000000000000", + "0x779274bf1803a336e4d3b00ddd93f2d4f5f4a62e": "1000000000000000000000", + "0xa644ed922cc237a3e5c4979a995477f36e50bc62": "583900000000000000000", + "0xee6c03429969ca1262cb3f0a4a54afa7d348d7f5": "256100000000000000000", + "0x4f06246b8d4bd29661f43e93762201d286935ab1": "4818730000000000000000", + "0xe04972a83ca4112bc871c72d4ae1616c2f0728db": "267606000000000000000", + "0xdf098f5e4e3dffa51af237bda8652c4f73ed9ca6": "502000000000000000000", + "0xdfded2574b27d1613a7d98b715159b0d00baab28": "20000000000000000000000", + "0x17d931d4c56294dcbe77c8655be4695f006d4a3c": "2000000000000000000000", + "0x3ccb71aa6880cb0b84012d90e60740ec06acd78f": "2000000000000000000000", + "0xe57d2995b0ebdf3f3ca6c015eb04260dbb98b7c6": "2000000000000000000000", + "0xfb3860f4121c432ebdc8ec6a0331b1b709792e90": "600400000000000000000", + "0xfa00c376e89c05e887817a9dd0748d96f341aa89": "300700000000000000000", + "0xc7a018f0968a51d1f6603c5c49dc545bcb0ff293": "4000000000000000000000", + "0x7d73863038ccca22f96affda10496e51e1e6cd48": "20000000000000000000", + "0x38ea6f5b5a7b88417551b4123dc127dfe9342da6": "400000000000000000000", + "0x014b7f67b14f5d983d87014f570c8b993b9872b5": "200000000000000000000", + "0x8ac89bd9b8301e6b0677fa25fcf0f58f0cc7b611": "20000000000000000000", + "0x7eb4b0185c92b6439a08e7322168cb353c8a774a": "10165988000000000000000", + "0xd29dc08efbb3d72e263f78ab7610d0226de76b00": "12000000000000000000000", + "0x72a8260826294726a75bf39cd9aa9e07a3ea14cd": "2000000000000000000000", + "0x4cb5c6cd713ca447b848ae2f56b761ca14d7ad57": "267400000000000000000", + "0x49185dd7c23632f46c759473ebae966008cd3598": "254030000000000000000", + "0x13d67a7e25f2b12cdb85585009f8acc49b967301": "1999944000000000000000", + "0x9d913b5d339c95d87745562563fea98b23c60cc4": "170718000000000000000", + "0xabdc9f1bcf4d19ee96591030e772c334302f7d83": "40110000000000000000000", + "0xe9a5ae3c9e05977dd1069e9fd9d3aefbae04b8df": "1970000000000000000000", + "0x1fd296be03ad737c92f9c6869e8d80a71c5714aa": "13370000000000000000", + "0x2f13657526b177cad547c3908c840eff647b45d9": "1170685000000000000000", + "0xe69fcc26ed225f7b2e379834c524d70c1735e5bc": "2000000000000000000000", + "0xbade43599e02f84f4c3014571c976b13a36c65ab": "4000000000000000000000", + "0x184a4f0beb71ffd558a6b6e8f228b78796c4cf3e": "12000000000000000000000", + "0xd1de5aad3a5fd803f1b1aeb6103cb8e14fe723b7": "20000000000000000000", + "0x0bd67dbde07a856ebd893b5edc4f3a5be4202616": "2000000000000000000000", + "0x6b30f1823910b86d3acb5a6afc9defb6f3a30bf8": "4200000000000000000000", + "0x9a63d185a79129fdab19b58bb631ea36a420544e": "42000000000000000000", + "0xdf660a91dab9f730f6190d50c8390561500756ca": "2000000000000000000000", + "0xa1a1f0fa6d20b50a794f02ef52085c9d036aa6ca": "1000000000000000000000", + "0x4ec768295eeabafc42958415e22be216cde77618": "59600000000000000000", + "0xc348fc5a461323b57be303cb89361b991913df28": "100000000000000000000000", + "0x3a7db224acae17de7798797d82cdf8253017dfa8": "5000000000000000000000", + "0x8bea40379347a5c891d59a6363315640f5a7e07a": "1999992000000000000000", + "0x2257fca16a6e5c2a647c3c29f36ce229ab93b17e": "4000000000000000000000", + "0xe492818aa684e5a676561b725d42f3cc56ae5198": "800000000000000000000", + "0xc841884fa4785fb773b28e9715fae99a5134305d": "2000000000000000000000", + "0x0d9443a79468a5bbf7c13c6e225d1de91aee07df": "70000000000000000000", + "0x6d4008b4a888a826f248ee6a0b0dfde9f93210b9": "5460000000000000000000", + "0x884980eb4565c1048317a8f47fdbb461965be481": "3999922000000000000000", + "0x985d70d207892bed398590024e2421b1cc119359": "20000000000000000000000", + "0xd9ec8fe69b7716c0865af888a11b2b12f720ed33": "4000000000000000000000", + "0x49b74e169265f01a89ec4c9072c5a4cd72e4e835": "16100000000000000000000", + "0x4c3e95cc3957d252ce0bf0c87d5b4f2234672e70": "2500000000000000000000", + "0xd9ff115d01266c9f73b063c1c238ef3565e63b36": "680000000000000000000", + "0x48c5c6970b9161bb1c7b7adfed9cdede8a1ba864": "4000000000000000000000", + "0xea6afe2cc928ac8391eb1e165fc40040e37421e7": "2997569000000000000000", + "0x08ccda50e4b26a0ffc0ef92e9205310706bec2c7": "6077440000000000000000", + "0xe6e9a39d750fe994394eb68286e5ea62a6997882": "600000000000000000000", + "0x4b58101f44f7e389e12d471d1635b71614fdd605": "160000000000000000000", + "0x8d93dac785f88f1a84bf927d53652b45a154ccdd": "158000000000000000000", + "0x415d096ab06293183f3c033d25f6cf7178ac3bc7": "40000000000000000000", + "0xc3e387b03ce95ccfd7fa51dd840183bc43532809": "2000000000000000000000", + "0xda34b2eae30bafe8daeccde819a794cd89e09549": "2000000000000000000000", + "0xfa279bfd8767f956bf7fa0bd5660168da75686bd": "2674000000000000000000", + "0xb98ca31785ef06be49a1e47e864f60d076ca472e": "4000000000000000000000", + "0xb768b5234eba3a9968b34d6ddb481c8419b3655d": "14974000000000000000", + "0x31047d703f63b93424fbbd6e2f1f9e74de13e709": "2850123000000000000000", + "0x9a24ce8d485cc4c86e49deb39022f92c7430e67e": "1300000000000000000000", + "0xe62f9d7c64e8e2635aeb883dd73ba684ee7c1079": "8000000000000000000000", + "0xf15d9d5a21b1929e790371a17f16d95f0c69655c": "2000000000000000000000", + "0x285ae51b9500c58d541365d97569f14bb2a3709b": "2000000000000000000000", + "0x09c177f1ae442411ddacf187d46db956148360e7": "8950000000000000000000", + "0x12173074980153aeaa4b0dcbc7132eadcec21b64": "240000000000000000000", + "0x351f16e5e0735af56751b0e225b2421171394090": "13370000000000000000000", + "0xac52b77e15664814f39e4f271be641308d91d6cc": "220000000000000000000", + "0x99c883258546cc7e4e971f522e389918da5ea63a": "4000000000000000000000", + "0xaa16269aac9c0d803068d82fc79151dadd334b66": "4000000000000000000000", + "0x7c9a110cb11f2598b2b20e2ca400325e41e9db33": "26000000000000000000000", + "0x583e83ba55e67e13e0e76f8392d873cd21fbf798": "20000000000000000000", + "0x555ebe84daa42ba256ea789105cec4b693f12f18": "100000000000000000000", + "0x978c430ce4359b06bc2cdf5c2985fc950e50d5c8": "480000000000000000000", + "0xdc1eb9b6e64351f56424509645f83e79eee76cf4": "4000000000000000000000", + "0x5b290c01967c812e4dc4c90b174c1b4015bae71e": "149946000000000000000", + "0xe7d213947fcb904ad738480b1eed2f5c329f27e8": "18718000000000000000", + "0xc517d0315c878813c717e18cafa1eab2654e01da": "10000000000000000000000", + "0x7e972a8a7c2a44c93b21436c38d21b9252c345fe": "1790000000000000000000", + "0x9cb28ac1a20a106f7f373692c5ce4c73f13732a1": "1000000000000000000000", + "0x14ab164b3b524c82d6abfbc0de831126ae8d1375": "2000000000000000000000", + "0xd46f8223452982a1eea019a8816efc2d6fc00768": "137000000000000000000", + "0x5cdc4708f14f40dcc15a795f7dc8cb0b7faa9e6e": "537000000000000000000", + "0x66fdc9fee351fa1538eb0d87d819fcf09e7c106a": "6016500000000000000000", + "0xe7be82c6593c1eeddd2ae0b15001ff201ab57b2f": "19100000000000000000", + "0x47d20e6ae4cad3f829eac07e5ac97b66fdd56cf5": "1000000000000000000000", + "0x0f2d8daf04b5414a0261f549ff6477b80f2f1d07": "200000000000000000000000", + "0x84bfcef0491a0ae0694b37ceac024584f2aa0467": "1999944000000000000000", + "0xec5feafe210c12bfc9a5d05925a123f1e73fbef8": "456000000000000000000000", + "0x7023c70956e04a92d70025aad297b539af355869": "2000000000000000000000", + "0xd66ddf1159cf22fd8c7a4bc8d5807756d433c43e": "2200000000000000000000", + "0xd0638ea57189a6a699024ad78c71d939c1c2ff8c": "2632000000000000000000", + "0x70d25ed2c8ada59c088cf70dd22bf2db93acc18a": "1056600000000000000000", + "0xa4875928458ec2005dbb578c5cd33580f0cf1452": "1000000000000000000000", + "0xb5ad5157dda921e6bafacd9086ae73ae1f611d3f": "2000000000000000000000", + "0xc493489e56c3bdd829007dc2f956412906f76bfa": "48968000000000000000", + "0xc57612de91110c482e6f505bcd23f3c5047d1d61": "3580000000000000000000", + "0x9b18478655a4851cc906e660feac61f7f4c8bffc": "4174120000000000000000", + "0xb21b7979bf7c5ca01fa82dd640b41c39e6c6bc75": "1999944000000000000000", + "0xa9d4a2bcbe5b9e0869d70f0fe2e1d6aacd45edc5": "198800000000000000000", + "0x6f29bb375be5ed34ed999bb830ee2957dde76d16": "2000000000000000000000", + "0xa006268446643ec5e81e7acb3f17f1c351ee2ed9": "4000000000000000000000", + "0x42ddd014dc52bfbcc555325a40b516f4866a1dd3": "2000000000000000000000", + "0xd6d6776958ee23143a81adadeb08382009e996c2": "3000000000000000000000", + "0xd34e03d36a2bd4d19a5fa16218d1d61e3ffa0b15": "320000000000000000000", + "0xdac0c177f11c5c3e3e78f2efd663d13221488574": "1000000000000000000000", + "0x814135da8f9811075783bf1ab67062af8d3e9f40": "20000000000000000000", + "0x7c3eb713c4c9e0381cd8154c7c9a7db8645cde17": "200000000000000000000", + "0xf49c47b3efd86b6e6a5bc9418d1f9fec814b69ef": "20000000000000000000000", + "0x35f1da127b83376f1b88c82a3359f67a5e67dd50": "1910000000000000000000", + "0x44dfba50b829becc5f4f14d1b04aab3320a295e5": "1000000000000000000000", + "0x0b924df007e9c0878417cfe63b976ea1a382a897": "40000000000000000000", + "0x82438fd2b32a9bdd674b49d8cc5fa2eff9781847": "20000000000000000000", + "0x794529d09d017271359730027075b87ad83dae6e": "310000000000000000000", + "0xf4b49100757772f33c177b9a76ba95226c8f3dd8": "6700000000000000000000", + "0x8563c49361b625e768771c96151dbfbd1c906976": "2000000000000000000000", + "0x0b9df80fbe232009dacf0aa8cac59376e2476203": "2000000000000000000000", + "0x149b6dbde632c19f5af47cb493114bebd9b03c1f": "12000000000000000000000", + "0xd7a1431ee453d1e49a0550d1256879b4f5d10201": "1670000000000000000000", + "0x1d37616b793f94911838ac8e19ee9449df921ec4": "1500000000000000000000", + "0xd6670c036df754be43dadd8f50feea289d061fd6": "5988459000000000000000", + "0x02778e390fa17510a3428af2870c4273547d386c": "16163700000000000000000", + "0xb89f4632df5909e58b2a9964f74feb9a3b01e0c5": "21406707000000000000000", + "0x76c27535bcb59ce1fa2d8c919cabeb4a6bba01d1": "2000000000000000000000", + "0x36bf43ff35df90908824336c9b31ce33067e2f50": "346837200000000000000000", + "0xb53bcb174c2518348b818aece020364596466ba3": "2000000000000000000000", + "0xb4dd460cd016725a64b22ea4f8e06e06674e033e": "5370000000000000000000", + "0xcda1741109c0265b3fb2bf8d5ec9c2b8a3346b63": "20000000000000000000", + "0xfeb8b8e2af716ae41fc7c04bcf29540156461e6b": "1555396000000000000000", + "0xa49f523aa51364cbc7d995163d34eb590ded2f08": "2659160000000000000000", + "0xa7e74f0bdb278ff0a805a648618ec52b166ff1be": "100000000000000000000", + "0x5ead29037a12896478b1296ab714e9cb95428c81": "71500000000000000000", + "0xcdecf5675433cdb0c2e55a68db5d8bbe78419dd2": "20000000000000000000", + "0xc24ccebc2344cce56417fb684cf81613f0f4b9bd": "1550000000000000000000", + "0x5a70106f20d63f875265e48e0d35f00e17d02bc9": "20000000000000000000", + "0x2606c3b3b4ca1b091498602cb1978bf3b95221c0": "400000000000000000000", + "0x1ad4563ea5786be1159935abb0f1d5879c3e7372": "6000000000000000000000", + "0xb782bfd1e2de70f467646f9bc09ea5b1fcf450af": "267400000000000000000", + "0x649a2b9879cd8fb736e6703b0c7747849796f10f": "7358102000000000000000", + "0x1cc1d3c14f0fb8640e36724dc43229d2ea7a1e48": "1700000000000000000000", + "0x824b3c3c443e19295d7ef6faa7f374a4798486a8": "20000000000000000000", + "0xa7758cecb60e8f614cce96137ef72b4fbd07774a": "500000000000000000000", + "0x981f712775c0dad97518ffedcb47b9ad1d6c2762": "6685000000000000000000", + "0x26e801b62c827191dd68d31a011990947fd0ebe0": "20000000000000000000", + "0x95447046313b2f3a5e19b948fd3b8bedc82c717c": "500000000000000000000", + "0x0b701101a4109f9cb360dc57b77442673d5e5983": "2000000000000000000000", + "0x5b25cae86dcafa2a60e7723631fc5fa49c1ad87d": "2491200000000000000000", + "0xf73ac46c203be1538111b151ec8220c786d84144": "294515000000000000000", + "0xe8c3d3b0e17f97d1e756e684f94e1470f99c95a1": "400000000000000000000", + "0x8c900a8236b08c2b65405d39d75f20062a7561fd": "1640000000000000000000", + "0x43898c49a34d509bfed4f76041ee91caf3aa6aa5": "300000000000000000000", + "0xc85325eab2a59b3ed863c86a5f2906a04229ffa9": "465600000000000000000", + "0x4a430170152de5172633dd8262d107a0afd96a0f": "3160000000000000000000", + "0x6e0ee70612c976287d499ddfa6c0dcc12c06deea": "129980000000000000000", + "0x21c07380484f6cbc8724ad32bc864c3b5ad500b7": "1000000000000000000000", + "0xff5162f2354dc492c75fd6e3a107268660eecb47": "1700000000000000000000", + "0x8845e9f90e96336bac3c616be9d88402683e004c": "2000000000000000000000", + "0xf23c7b0cb8cd59b82bd890644a57daf40c85e278": "50038000000000000000", + "0x1784948bf99848c89e445638504dd698271b5924": "6037580000000000000000", + "0xb39f4c00b2630cab7db7295ef43d47d501e17fd7": "4000000000000000000000", + "0x3fb7d197b3ba4fe045efc23d50a14585f558d9b2": "20000000000000000000", + "0xbd043b67c63e60f841ccca15b129cdfe6590c8e3": "200000000000000000000", + "0x86ca0145957e6b0dfe36875fbe7a0dec55e17a28": "10000000000000000000000", + "0xdae7201eab8c063302930d693929d07f95e71962": "2687370000000000000000", + "0xcc034985d3f28c2d39b1a34bced4d3b2b6ca234e": "182000000000000000000", + "0x40e0dbf3efef9084ea1cd7e503f40b3b4a8443f6": "4000000000000000000000", + "0xb1896a37e5d8825a2d01765ae5de629977de8352": "200000000000000000000", + "0xd9f547f2c1de0ed98a53d161df57635dd21a00bd": "98500000000000000000", + "0x2fea1b2f834f02fc54333f8a809f0438e5870aa9": "20200000000000000000", + "0x68b31836a30a016ada157b638ac15da73f18cfde": "26000000000000000000", + "0xbc967fe4418c18b99858966d870678dca2b88879": "8740000000000000000000", + "0x16bae5d24eff91778cd98b4d3a1cc3162f44aa77": "401100000000000000000", + "0xf476e1267f86247cc908816f2e7ad5388c952db0": "4000000000000000000000", + "0x0203ae01d4c41cae1865e04b1f5b53cdfaecae31": "1006054000000000000000", + "0xbd4bd5b122d8ef7b7c8f0667450320db2116142e": "600000000000000000000", + "0xa394ad4fd9e6530e6f5c53faecbede81cb172da1": "5600000000000000000000", + "0x3a9960266df6492063538a99f487c950a3a5ec9e": "24000000000000000000000", + "0xd8069f84b521493f4715037f3226b25f33b60586": "1910000000000000000000", + "0x136c834bf111326d207395295b2e583ea7f33572": "100000000000000000000", + "0xc5c73d61cce7c8fe4c8fce29f39092cd193e0fff": "8000000000000000000000", + "0x3cfbf066565970639e130df2a7d16b0e14d6091c": "1700000000000000000000", + "0x61b905de663fc17386523b3a28e2f7d037a655cd": "500000000000000000000", + "0xfda0ce15330707f10bce3201172d2018b9ddea74": "51900000000000000000", + "0xf7fc45abf76f5088e2e5b5a8d132f28a4d4ec1c0": "2000000000000000000000", + "0xc3db9fb6f46c480af34465d79753b4e2b74a67ce": "20000000000000000000000", + "0xebe46cc3c34c32f5add6c3195bb486c4713eb918": "1000000000000000000000", + "0x91d2a9ee1a6db20f5317cca7fbe2313895db8ef8": "8499600000000000000000", + "0xc4cc45a2b63c27c0b4429e58cd42da59be739bd6": "1000000000000000000000", + "0xa43b81f99356c0af141a03010d77bd042c71c1ee": "2000000000000000000000", + "0x4c45d4c9a725d11112bfcbca00bf31186ccaadb7": "400000000000000000000", + "0xbf9f271f7a7e12e36dd2fe9facebf385fe6142bd": "62760000000000000000", + "0xe0ce80a461b648a501fd0b824690c8868b0e4de8": "500000000000000000000", + "0xa1f7dde1d738d8cd679ea1ee965bee224be7d04d": "1127000000000000000000", + "0x7f1c81ee1697fc144b7c0be5493b5615ae7fddca": "500200000000000000000", + "0xb508f987b2de34ae4cf193de85bff61389621f88": "6000000000000000000000", + "0x5f26cf34599bc36ea67b9e7a9f9b4330c9d542a3": "1000000000000000000000", + "0xd02108d2ae3cab10cbcf1657af223e027c8210f6": "2000140000000000000000", + "0x952183cfd38e352e579d36decec5b18450f7fba0": "2000000000000000000000", + "0xeb90c793b3539761e1c814a29671148692193eb4": "12000000000000000000000", + "0x1076212d4f758c8ec7121c1c7d74254926459284": "35000056000000000000000", + "0xf05ceeab65410564709951773c8445ad9f4ec797": "299982000000000000000", + "0x05361d8eb6941d4e90fb7e1418a95a32d5257732": "20000000000000000000", + "0xa5783bf33432ff82ac498985d7d460ae67ec3673": "1820000000000000000000", + "0xb1cd4bdfd104489a026ec99d597307a04279f173": "20000000000000000000000", + "0x876c3f218b4776df3ca9dbfb270de152d94ed252": "100000000000000000000", + "0x8a36869ad478997cbf6d8924d20a3c8018e9855b": "20000000000000000000", + "0xfb3fe09bb836861529d7518da27635f538505615": "1399904000000000000000", + "0xd093e829819fd2e25b973800bb3d5841dd152d05": "4000000000000000000000", + "0x126d91f7ad86debb0557c612ca276eb7f96d00a1": "100000000000000000000", + "0x2a81d27cb6d4770ff4f3c4a3ba18e5e57f07517c": "2000000000000000000000", + "0xc4f7b13ac6d4eb4db3d4e6a252af8a07bd5957da": "200000000000000000000", + "0x305d26c10bdc103f6b9c21272eb7cb2d9108c47e": "500000000000000000000", + "0xd0d0a2ad45f59a9dccc695d85f25ca46ed31a5a3": "840000000000000000000", + "0x522323aad71dbc96d85af90f084b99c3f09decb7": "6000000000000000000000", + "0xf43da3a4e3f5fab104ca9bc1a0f7f3bb4a56f351": "1999944000000000000000", + "0xa2dc65ee256b59a5bd7929774f904b358df3ada1": "21319600000000000000000", + "0xf382df583155d8548f3f93440cd5f68cb79d6026": "266619800000000000000000", + "0x0c967e3061b87a753e84507eb60986782c8f3013": "100000000000000000000", + "0xa3a262afd2936819230892fde84f2d5a594ab283": "1880000000000000000000", + "0x93868ddb2a794d02ebda2fa4807c76e3609858dc": "2027851000000000000000", + "0xcd35ff010ec501a721a1b2f07a9ca5877dfcf95a": "4011000000000000000000", + "0x5824a7e22838277134308c5f4b50dab65e43bb31": "6000000000000000000000", + "0x7f7a3a21b3f5a65d81e0fcb7d52dd00a1aa36dba": "100000000000000000000", + "0x30513fca9f36fd788cfea7a340e86df98294a244": "447000000000000000000", + "0x283e6252b4efcf4654391acb75f903c59b78c5fb": "12000000000000000000000", + "0xeddbaafbc21be8f25562f1ed6d05d6afb58f02c2": "2000000000000000000000", + "0x0dcfe837ea1cf28c65fccec3bef1f84e59d150c0": "200000000000000000000", + "0x828ba651cb930ed9787156299a3de44cd08b7212": "1337000000000000000000", + "0xcfd47493c9f89fe680bda5754dd7c9cfe7cb5bbe": "54508000000000000000", + "0x0e89eddd3fa0d71d8ab0ff8da5580686e3d4f74f": "2000000000000000000000", + "0x205f5166f12440d85762c967d3ae86184f8f4d98": "432500000000000000000", + "0x25dad495a11a86b9eeece1eeec805e57f157faff": "16000000000000000000000", + "0x6c84cba77c6db4f7f90ef13d5ee21e8cfc7f8314": "2000000000000000000000", + "0x91a787bc5196f34857fe0c372f4df376aaa76613": "2000000000000000000000", + "0xb0d3c9872b85056ea0c0e6d1ecf7a77e3ce6ab85": "4999711000000000000000", + "0x6e4d2e39c8836629e5b487b1918a669aebdd9536": "1000000000000000000000", + "0xdc703a5f3794c84d6cb3544918cae14a35c3bd4f": "1850000000000000000000", + "0x47beb20f759100542aa93d41118b3211d664920e": "2000000000000000000000", + "0x5a7735007d70b06844da9901cdfadb11a2582c2f": "6000000000000000000000", + "0xaff107960b7ec34ed690b665024d60838c190f70": "500000000000000000000", + "0x563a03ab9c56b600f6d25b660c21e16335517a75": "1000000000000000000000", + "0xa106465bbd19e1b6bce50d1b1157dc59095a3630": "2000000000000000000000", + "0xca9dec02841adf5cc920576a5187edd2bd434a18": "500000000000000000000", + "0x572ac1aba0de23ae41a7cae1dc0842d8abfc103b": "1910000000000000000000", + "0x5f74ed0e24ff80d9b2c4a44baa9975428cd6b935": "2980000000000000000000", + "0xf2049532fd458a83ca1bff2eebacb6d5ca63f4a4": "3625693000000000000000", + "0xcee699c0707a7836252b292f047ce8ad289b2f55": "324700000000000000000", + "0x8b3696f3c60de32432a2e4c395ef0303b7e81e75": "30000000000000000000000", + "0x13dee03e3799952d0738843d4be8fc0a803fb20e": "2000000000000000000000", + "0xc853215b9b9f2d2cd0741e585e987b5fb80c212e": "1550000000000000000000", + "0x851c0d62be4635d4777e8035e37e4ba8517c6132": "500000000000000000000", + "0xa76b743f981b693072a131b22ba510965c2fefd7": "18200000000000000000", + "0x69bd25ade1a3346c59c4e930db2a9d715ef0a27a": "4000000000000000000000", + "0x0fec4ee0d7ca180290b6bd20f9992342f60ff68d": "334383000000000000000", + "0xccfd725760a68823ff1e062f4cc97e1360e8d997": "399800000000000000000", + "0x9f017706b830fb9c30efb0a09f506b9157457534": "2000000000000000000000", + "0x420fb86e7d2b51401fc5e8c72015decb4ef8fc2e": "1000000000000000000000", + "0xcb7d2b8089e9312cc9aeaa2773f35308ec6c2a7b": "10000000000000000000000", + "0x6c822029218ac8e98a260c1e064029348839875b": "5010000000000000000000", + "0x1c68a66138783a63c98cc675a9ec77af4598d35e": "50100000000000000000", + "0xf270792576f05d514493ffd1f5e84bec4b2df810": "1000000000000000000000", + "0x9191f94698210516cf6321a142070e20597674ed": "17194000000000000000", + "0xc0ca3277942e7445874be31ceb902972714f1823": "250000000000000000000", + "0x35e096120deaa5c1ecb1645e2ccb8b4edbd9299a": "500000000000000000000", + "0xe2bbf84641e3541f6c33e6ed683a635a70bde2ec": "502763000000000000000", + "0xd12d77ae01a92d35117bac705aacd982d02e74c1": "1000000000000000000000", + "0xdabb0889fc042926b05ef57b2520910abc4b4149": "2000000000000000000000", + "0x5a1a336962d6e0c63031cc83c6a5c6a6f4478ecb": "1000000000000000000000", + "0xabd154903513b8da4f019f68284b0656a1d0169b": "1000000000000000000000", + "0xad377cd25eb53e83ae091a0a1d2b4516f484afde": "1940000000000000000000", + "0x08c2f236ac4adcd3fda9fbc6e4532253f9da3bec": "20000000000000000000", + "0x71135d8f05963c905a4a07922909235a896a52ea": "3000000000000000000000", + "0x080546508a3d2682c8b9884f13637b8847b44db3": "2000000000000000000000", + "0x2d61bfc56873923c2b00095dc3eaa0f590d8ae0f": "20760000000000000000000", + "0xcbfa6af6c283b046e2772c6063b0b21553c40106": "2000000000000000000000", + "0xccabc6048a53464424fcf76eeb9e6e1801fa23d4": "49250000000000000000", + "0x60cc3d445ebdf76a7d7ae571c6971dff68cc8585": "1000000000000000000000", + "0xfff33a3bd36abdbd412707b8e310d6011454a7ae": "8000000000000000000000", + "0xd2dbebe89b0357aea98bbe8e496338debb28e805": "4000000000000000000000", + "0x5f521282e9b278dc8c034c72af53ee29e5443d78": "6520000000000000000000", + "0xc5a48a8500f9b4e22f0eb16c6f4649687674267d": "812721000000000000000", + "0x8cb3aa3fcd212854d7578fcc30fdede6742a312a": "300000000000000000000", + "0x90d2809ae1d1ffd8f63eda01de49dd552df3d1bc": "3998000000000000000000", + "0x96a55f00dff405dc4de5e58c57f6f6f0cac55d2f": "1962711000000000000000", + "0xae842e81858ecfedf6506c686dc204ac15bf8b24": "40000000000000000000", + "0x0be6a09e4307fe48d412b8d1a1a8284dce486261": "19180000000000000000000", + "0xc9c7ac0bdd9342b5ead4360923f68c72a6ba633a": "500000000000000000000", + "0xea8f30b6e4c5e65290fb9864259bc5990fa8ee8a": "20000000000000000000", + "0x74d37a51747bf8b771bfbf43943933d100d21483": "1000000000000000000000", + "0x1a04d5389eb006f9ce880c30d15353f8d11c4b31": "17072800000000000000000", + "0x726a14c90e3f84144c765cffacba3e0df11b48be": "10000000000000000000000", + "0x86b7bd563ceab686f96244f9ddc02ad7b0b14bc2": "10000000000000000000000", + "0x2bbe672a1857508f630f2a5edb563d9e9de92815": "2000000000000000000000", + "0xa17070c2e9c5a940a4ec0e4954c4d7d643be8f49": "1999965000000000000000", + "0xf2d1b7357724ec4c03185b879b63f57e26589153": "6000000000000000000000", + "0xd6a7ac4de7b510f0e8de519d973fa4c01ba83400": "1880000000000000000000", + "0x593b45a1864ac5c7e8f0caaeba0d873cd5d113b2": "6000000000000000000000", + "0x0837539b5f6a522a482cdcd3a9bb7043af39bdd2": "6000000000000000000000", + "0xb927abd2d28aaaa24db31778d27419df8e1b04bb": "27531000000000000000", + "0xb2e085fddd1468ba07415b274e734e11237fb2a9": "100000000000000000000", + "0x970938522afb5e8f994873c9fbdc26e3b37e314c": "1000000000000000000000", + "0xf3de5f26ef6aded6f06d3b911346ee70401da4a0": "354718000000000000000", + "0xbffb6929241f788693273e7022e60e3eab1fe84f": "2000000000000000000000", + "0xb56ad2aec6c8c3f19e1515bbb7dd91285256b639": "1000000000000000000000", + "0x47730f5f8ebf89ac72ef80e46c12195038ecdc49": "3160000000000000000000", + "0xf39a9d7aa3581df07ee4279ae6c312ef21033658": "4000000000000000000000", + "0x36227cdfa0fd3b9d7e6a744685f5be9aa366a7f0": "198479000000000000000", + "0x89e3b59a15864737d493c1d23cc53dbf8dcb1362": "4000000000000000000000", + "0xbd08e0cddec097db7901ea819a3d1fd9de8951a2": "20000000000000000000", + "0x533444584082eba654e1ad30e149735c6f7ba922": "1730000000000000000000", + "0x6a8a4317c45faa0554ccdb482548183e295a24b9": "1000000000000000000000", + "0x22ce349159eeb144ef06ff2636588aef79f62832": "188000000000000000000", + "0x3cd1d9731bd548c1dd6fcea61beb75d91754f7d3": "5130285000000000000000", + "0x8b7056f6abf3b118d026e944d5c073433ca451d7": "999999000000000000000", + "0x15f1b352110d68901d8f67aac46a6cfafe031477": "200000000000000000000", + "0x0f789e30397c53bf256fc364e6ef39f853504114": "3640000000000000000000", + "0x750bbb8c06bbbf240843cc75782ee02f08a97453": "835000000000000000000", + "0xfff7ac99c8e4feb60c9750054bdc14ce1857f181": "1000000000000000000000", + "0x5c6f36af90ab1a656c6ec8c7d521512762bba3e1": "1999800000000000000000", + "0x6811b54cd19663b11b94da1de2448285cd9f68d9": "1100000000000000000000", + "0x6f50929777824c291a49c46dc854f379a6bea080": "360000000000000000000", + "0xe83604e4ff6be7f96f6018d3ec3072ec525dff6b": "182000000000000000000", + "0xd731bb6b5f3c37395e09ceaccd14a918a6060789": "3940000000000000000000", + "0x372e453a6b629f27678cc8aeb5e57ce85ec0aef9": "200000000000000000000", + "0x86924fb211aad23cf5ce600e0aae806396444087": "10000000000000000000000", + "0x18c6723a6753299cb914477d04a3bd218df8c775": "1000000000000000000000", + "0xe00484788db50fc6a48e379d123e508b0f6e5ab1": "1000000000000000000000", + "0x150e3dbcbcfc84ccf89b73427763a565c23e60d0": "40000000000000000000", + "0x8ffa062122ac307418821adb9311075a3703bfa3": "1000000000000000000000", + "0x21206ce22ea480e85940d31314e0d64f4e4d3a04": "1000000000000000000000", + "0xac024f594f9558f04943618eb0e6b2ee501dc272": "2000000000000000000000", + "0xb2b7cdb4ff4b61d5b7ce0b2270bbb5269743ec04": "2000000000000000000000", + "0xabc74706964960dfe0dca3dca79e9216056f1cf4": "40000000000000000000000", + "0xd7eb903162271c1afa35fe69e37322c8a4d29b11": "10000000000000000000000", + "0xd7c6265dea11876c903b718e4cd8ab24fe265bde": "2000000000000000000000", + "0xcba288cd3c1eb4d59ddb06a6421c14c345a47b24": "4000000000000000000000", + "0x8c22426055b76f11f0a2de1a7f819a619685fe60": "1980000000000000000000", + "0xf463a90cb3f13e1f0643423636beab84c123b06d": "40000000000000000000", + "0x2b5ced9987c0765f900e49cf9da2d9f9c1138855": "400000000000000000000", + "0x9bb760d5c289a3e1db18db095345ca413b9a43c2": "197000000000000000000", + "0xd66ab79294074c8b627d842dab41e17dd70c5de5": "1000000000000000000000", + "0x0bdd58b96e7c916dd2fb30356f2aebfaaf1d8630": "2000000000000000000000", + "0xd612597bc31743c78633f633f239b1e9426bd925": "76000000000000000000000", + "0x140518a3194bad1350b8949e650565debe6db315": "2000000000000000000000", + "0xdaedd4ad107b271e89486cbf80ebd621dd974578": "2000000000000000000000", + "0xc36c0b63bfd75c2f8efb060883d868cccd6cbdb4": "3000000000000000000000", + "0xe646665872e40b0d7aa2ff82729caaba5bc3e89e": "400000000000000000000", + "0xb5fb7ea2ddc1598b667a9d57dd39e85a38f35d56": "500000000000000000000", + "0xe51421f8ee2210c71ed870fe618276c8954afbe9": "1337000000000000000000", + "0x08a9a44e1f41de3dbba7a363a3ab412c124cd15e": "200000000000000000000", + "0x562bced38ab2ab6c080f3b0541b8456e70824b3f": "641760000000000000000", + "0x1e484d0621f0f5331b35d5408d9aae4eb1acf21e": "20000000000000000000", + "0x3a476bd2c9e664c63ab266aa4c6e4a4825f516c3": "200000000000000000000", + "0x8d6df209484d7b94702b03a53e56b9fb0660f6f0": "2000000000000000000000", + "0x5970fb1b144dd751e4ce2eca7caa20e363dc4da3": "10000000000000000000000", + "0xd1dd79fb158160e5b4e8e23f312e6a907fbc4d4e": "500000000000000000000", + "0x7ee5ca805dce23af89c2d444e7e40766c54c7404": "240660000000000000000", + "0x93e0f37ecdfb0086e3e862a97034447b1e4dec1a": "30000000000000000000", + "0xe10ac19c546fc2547c61c139f5d1f45a6666d5b0": "4775000000000000000000", + "0x1c73d00b6e25d8eb9c1ff4ad827b6b9e9cf6d20c": "200000000000000000000", + "0xd771d9e0ca8a08a113775731434eb3270599c40d": "20000000000000000000", + "0xe69d1c378b771e0feff051db69d966ac6779f4ed": "553000000000000000000", + "0x0ef85b49d08a75198692914eddb4b22cf5fa4450": "2004800000000000000000", + "0xed70a37cdd1cbda9746d939658ae2a6181288578": "9600000000000000000000", + "0xeee761847e33fd61d99387ee14628694d1bfd525": "2000000000000000000000", + "0x271d3d481cb88e7671ad216949b6365e06303de0": "4000000000000000000000", + "0x5255dc69155a45b970c604d30047e2f530690e7f": "20000000000000000000", + "0xcabab6274ed15089737e287be878b757934864e2": "20000000000000000000000", + "0x9defe56a0ff1a1947dba0923f7dd258d8f12fa45": "26880000000000000000000", + "0xb7a2c103728b7305b5ae6e961c94ee99c9fe8e2b": "50000000000000000000000", + "0xb498bb0f520005b6216a4425b75aa9adc52d622b": "4000000000000000000000", + "0xc1132878235c5ddba5d9f3228b5236e47020dc6f": "1000000000000000000000", + "0xf81622e55757daea6675975dd93538da7d16991e": "2000000000000000000000", + "0xce2deab51c0a9ae09cd212c4fa4cc52b53cc0dec": "2000000000000000000000", + "0x86a1eadeeb30461345d9ef6bd05216fa247c0d0c": "2000000000000000000000", + "0x7b1fe1ab4dfd0088cdd7f60163ef59ec2aee06f5": "2000000000000000000000", + "0x6bbc3f358a668dd1a11f0380f3f73108426abd4a": "4000000000000000000000", + "0xb1e6e810c24ab0488de9e01e574837829f7c77d0": "400000000000000000000", + "0x03eb3cb860f6028da554d344a2bb5a500ae8b86f": "2000000000000000000000", + "0xe5481a7fed42b901bbed20789bd4ade50d5f83b9": "2000000000000000000000", + "0x1f3da68fe87eaf43a829ab6d7ec5a6e009b204fb": "554988000000000000000", + "0x30037988702671acbe892c03fe5788aa98af287a": "2800000000000000000000", + "0xedb473353979a206879de144c10a3c51d7d7081a": "6000000000000000000000", + "0x22bdffc240a88ff7431af3bff50e14da37d5183e": "1000000000000000000000", + "0x9374869d4a9911ee1eaf558bc4c2b63ec63acfdd": "1000000000000000000000", + "0xb756ad52f3bf74a7d24c67471e0887436936504c": "20000000000000000000000", + "0x8bd0b65a50ef5cef84fec420be7b89ed1470ceb9": "11999000000000000000000", + "0xaf26f7c6bf453e2078f08953e4b28004a2c1e209": "100000000000000000000", + "0x7c532db9e0c06c26fd40acc56ac55c1ee92d3c3a": "300000000000000000000000", + "0xdde670d01639667576a22dd05d3246d61f06e083": "26740000000000000000", + "0x5cf44e10540d65716423b1bcb542d21ff83a94cd": "10000000000000000000000", + "0xf96b4c00766f53736a8574f822e6474c2f21da2d": "400000000000000000000", + "0x8d89170b92b2be2c08d57c48a7b190a2f146720f": "19700000000000000000000", + "0x142b87c5043ffb5a91df18c2e109ced6fe4a71db": "200000000000000000000", + "0x42d34940edd2e7005d46e2188e4cfece8311d74d": "158000000000000000000", + "0x562105e82b099735de49f62692cc87cd38a8edcd": "6000000000000000000000", + "0x457bcef37dd3d60b2dd019e3fe61d46b3f1e7252": "20000000000000000000", + "0xcf8882359c0fb23387f5674074d8b17ade512f98": "6000000000000000000000", + "0xf0c081da52a9ae36642adf5e08205f05c54168a6": "111000000000000000000", + "0x551e7784778ef8e048e495df49f2614f84a4f1dc": "600000000000000000000", + "0x3c869c09696523ced824a070414605bb76231ff2": "1000000000000000000000", + "0x7e7f18a02eccaa5d61ab8fbf030343c434a25ef7": "66850000000000000000", + "0x9328d55ccb3fce531f199382339f0e576ee840a3": "4000000000000000000000", + "0x9d0f347e826b7dceaad279060a35c0061ecf334b": "4000000000000000000000", + "0x680640838bd07a447b168d6d923b90cf6c43cdca": "1730000000000000000000", + "0xc951900c341abbb3bafbf7ee2029377071dbc36a": "327600000000000000000", + "0xddf5810a0eb2fb2e32323bb2c99509ab320f24ac": "17900000000000000000000", + "0x2489ac126934d4d6a94df08743da7b7691e9798e": "1000000000000000000000", + "0xf42f905231c770f0a406f2b768877fb49eee0f21": "197000000000000000000", + "0x756f45e3fa69347a9a973a725e3c98bc4db0b5a0": "200000000000000000000" +} + +},{}],598:[function(require,module,exports){ +module.exports={ + "0x0000000000000000000000000000000000000000": "0x1", + "0x0000000000000000000000000000000000000001": "0x1", + "0x0000000000000000000000000000000000000002": "0x1", + "0x0000000000000000000000000000000000000003": "0x1", + "0x0000000000000000000000000000000000000004": "0x1", + "0x0000000000000000000000000000000000000005": "0x1", + "0x0000000000000000000000000000000000000006": "0x1", + "0x0000000000000000000000000000000000000007": "0x1", + "0x0000000000000000000000000000000000000008": "0x1", + "0x0000000000000000000000000000000000000009": "0x1", + "0x000000000000000000000000000000000000000a": "0x1", + "0x000000000000000000000000000000000000000b": "0x1", + "0x000000000000000000000000000000000000000c": "0x1", + "0x000000000000000000000000000000000000000d": "0x1", + "0x000000000000000000000000000000000000000e": "0x1", + "0x000000000000000000000000000000000000000f": "0x1", + "0x0000000000000000000000000000000000000010": "0x1", + "0x0000000000000000000000000000000000000011": "0x1", + "0x0000000000000000000000000000000000000012": "0x1", + "0x0000000000000000000000000000000000000013": "0x1", + "0x0000000000000000000000000000000000000014": "0x1", + "0x0000000000000000000000000000000000000015": "0x1", + "0x0000000000000000000000000000000000000016": "0x1", + "0x0000000000000000000000000000000000000017": "0x1", + "0x0000000000000000000000000000000000000018": "0x1", + "0x0000000000000000000000000000000000000019": "0x1", + "0x000000000000000000000000000000000000001a": "0x1", + "0x000000000000000000000000000000000000001b": "0x1", + "0x000000000000000000000000000000000000001c": "0x1", + "0x000000000000000000000000000000000000001d": "0x1", + "0x000000000000000000000000000000000000001e": "0x1", + "0x000000000000000000000000000000000000001f": "0x1", + "0x0000000000000000000000000000000000000020": "0x1", + "0x0000000000000000000000000000000000000021": "0x1", + "0x0000000000000000000000000000000000000022": "0x1", + "0x0000000000000000000000000000000000000023": "0x1", + "0x0000000000000000000000000000000000000024": "0x1", + "0x0000000000000000000000000000000000000025": "0x1", + "0x0000000000000000000000000000000000000026": "0x1", + "0x0000000000000000000000000000000000000027": "0x1", + "0x0000000000000000000000000000000000000028": "0x1", + "0x0000000000000000000000000000000000000029": "0x1", + "0x000000000000000000000000000000000000002a": "0x1", + "0x000000000000000000000000000000000000002b": "0x1", + "0x000000000000000000000000000000000000002c": "0x1", + "0x000000000000000000000000000000000000002d": "0x1", + "0x000000000000000000000000000000000000002e": "0x1", + "0x000000000000000000000000000000000000002f": "0x1", + "0x0000000000000000000000000000000000000030": "0x1", + "0x0000000000000000000000000000000000000031": "0x1", + "0x0000000000000000000000000000000000000032": "0x1", + "0x0000000000000000000000000000000000000033": "0x1", + "0x0000000000000000000000000000000000000034": "0x1", + "0x0000000000000000000000000000000000000035": "0x1", + "0x0000000000000000000000000000000000000036": "0x1", + "0x0000000000000000000000000000000000000037": "0x1", + "0x0000000000000000000000000000000000000038": "0x1", + "0x0000000000000000000000000000000000000039": "0x1", + "0x000000000000000000000000000000000000003a": "0x1", + "0x000000000000000000000000000000000000003b": "0x1", + "0x000000000000000000000000000000000000003c": "0x1", + "0x000000000000000000000000000000000000003d": "0x1", + "0x000000000000000000000000000000000000003e": "0x1", + "0x000000000000000000000000000000000000003f": "0x1", + "0x0000000000000000000000000000000000000040": "0x1", + "0x0000000000000000000000000000000000000041": "0x1", + "0x0000000000000000000000000000000000000042": "0x1", + "0x0000000000000000000000000000000000000043": "0x1", + "0x0000000000000000000000000000000000000044": "0x1", + "0x0000000000000000000000000000000000000045": "0x1", + "0x0000000000000000000000000000000000000046": "0x1", + "0x0000000000000000000000000000000000000047": "0x1", + "0x0000000000000000000000000000000000000048": "0x1", + "0x0000000000000000000000000000000000000049": "0x1", + "0x000000000000000000000000000000000000004a": "0x1", + "0x000000000000000000000000000000000000004b": "0x1", + "0x000000000000000000000000000000000000004c": "0x1", + "0x000000000000000000000000000000000000004d": "0x1", + "0x000000000000000000000000000000000000004e": "0x1", + "0x000000000000000000000000000000000000004f": "0x1", + "0x0000000000000000000000000000000000000050": "0x1", + "0x0000000000000000000000000000000000000051": "0x1", + "0x0000000000000000000000000000000000000052": "0x1", + "0x0000000000000000000000000000000000000053": "0x1", + "0x0000000000000000000000000000000000000054": "0x1", + "0x0000000000000000000000000000000000000055": "0x1", + "0x0000000000000000000000000000000000000056": "0x1", + "0x0000000000000000000000000000000000000057": "0x1", + "0x0000000000000000000000000000000000000058": "0x1", + "0x0000000000000000000000000000000000000059": "0x1", + "0x000000000000000000000000000000000000005a": "0x1", + "0x000000000000000000000000000000000000005b": "0x1", + "0x000000000000000000000000000000000000005c": "0x1", + "0x000000000000000000000000000000000000005d": "0x1", + "0x000000000000000000000000000000000000005e": "0x1", + "0x000000000000000000000000000000000000005f": "0x1", + "0x0000000000000000000000000000000000000060": "0x1", + "0x0000000000000000000000000000000000000061": "0x1", + "0x0000000000000000000000000000000000000062": "0x1", + "0x0000000000000000000000000000000000000063": "0x1", + "0x0000000000000000000000000000000000000064": "0x1", + "0x0000000000000000000000000000000000000065": "0x1", + "0x0000000000000000000000000000000000000066": "0x1", + "0x0000000000000000000000000000000000000067": "0x1", + "0x0000000000000000000000000000000000000068": "0x1", + "0x0000000000000000000000000000000000000069": "0x1", + "0x000000000000000000000000000000000000006a": "0x1", + "0x000000000000000000000000000000000000006b": "0x1", + "0x000000000000000000000000000000000000006c": "0x1", + "0x000000000000000000000000000000000000006d": "0x1", + "0x000000000000000000000000000000000000006e": "0x1", + "0x000000000000000000000000000000000000006f": "0x1", + "0x0000000000000000000000000000000000000070": "0x1", + "0x0000000000000000000000000000000000000071": "0x1", + "0x0000000000000000000000000000000000000072": "0x1", + "0x0000000000000000000000000000000000000073": "0x1", + "0x0000000000000000000000000000000000000074": "0x1", + "0x0000000000000000000000000000000000000075": "0x1", + "0x0000000000000000000000000000000000000076": "0x1", + "0x0000000000000000000000000000000000000077": "0x1", + "0x0000000000000000000000000000000000000078": "0x1", + "0x0000000000000000000000000000000000000079": "0x1", + "0x000000000000000000000000000000000000007a": "0x1", + "0x000000000000000000000000000000000000007b": "0x1", + "0x000000000000000000000000000000000000007c": "0x1", + "0x000000000000000000000000000000000000007d": "0x1", + "0x000000000000000000000000000000000000007e": "0x1", + "0x000000000000000000000000000000000000007f": "0x1", + "0x0000000000000000000000000000000000000080": "0x1", + "0x0000000000000000000000000000000000000081": "0x1", + "0x0000000000000000000000000000000000000082": "0x1", + "0x0000000000000000000000000000000000000083": "0x1", + "0x0000000000000000000000000000000000000084": "0x1", + "0x0000000000000000000000000000000000000085": "0x1", + "0x0000000000000000000000000000000000000086": "0x1", + "0x0000000000000000000000000000000000000087": "0x1", + "0x0000000000000000000000000000000000000088": "0x1", + "0x0000000000000000000000000000000000000089": "0x1", + "0x000000000000000000000000000000000000008a": "0x1", + "0x000000000000000000000000000000000000008b": "0x1", + "0x000000000000000000000000000000000000008c": "0x1", + "0x000000000000000000000000000000000000008d": "0x1", + "0x000000000000000000000000000000000000008e": "0x1", + "0x000000000000000000000000000000000000008f": "0x1", + "0x0000000000000000000000000000000000000090": "0x1", + "0x0000000000000000000000000000000000000091": "0x1", + "0x0000000000000000000000000000000000000092": "0x1", + "0x0000000000000000000000000000000000000093": "0x1", + "0x0000000000000000000000000000000000000094": "0x1", + "0x0000000000000000000000000000000000000095": "0x1", + "0x0000000000000000000000000000000000000096": "0x1", + "0x0000000000000000000000000000000000000097": "0x1", + "0x0000000000000000000000000000000000000098": "0x1", + "0x0000000000000000000000000000000000000099": "0x1", + "0x000000000000000000000000000000000000009a": "0x1", + "0x000000000000000000000000000000000000009b": "0x1", + "0x000000000000000000000000000000000000009c": "0x1", + "0x000000000000000000000000000000000000009d": "0x1", + "0x000000000000000000000000000000000000009e": "0x1", + "0x000000000000000000000000000000000000009f": "0x1", + "0x00000000000000000000000000000000000000a0": "0x1", + "0x00000000000000000000000000000000000000a1": "0x1", + "0x00000000000000000000000000000000000000a2": "0x1", + "0x00000000000000000000000000000000000000a3": "0x1", + "0x00000000000000000000000000000000000000a4": "0x1", + "0x00000000000000000000000000000000000000a5": "0x1", + "0x00000000000000000000000000000000000000a6": "0x1", + "0x00000000000000000000000000000000000000a7": "0x1", + "0x00000000000000000000000000000000000000a8": "0x1", + "0x00000000000000000000000000000000000000a9": "0x1", + "0x00000000000000000000000000000000000000aa": "0x1", + "0x00000000000000000000000000000000000000ab": "0x1", + "0x00000000000000000000000000000000000000ac": "0x1", + "0x00000000000000000000000000000000000000ad": "0x1", + "0x00000000000000000000000000000000000000ae": "0x1", + "0x00000000000000000000000000000000000000af": "0x1", + "0x00000000000000000000000000000000000000b0": "0x1", + "0x00000000000000000000000000000000000000b1": "0x1", + "0x00000000000000000000000000000000000000b2": "0x1", + "0x00000000000000000000000000000000000000b3": "0x1", + "0x00000000000000000000000000000000000000b4": "0x1", + "0x00000000000000000000000000000000000000b5": "0x1", + "0x00000000000000000000000000000000000000b6": "0x1", + "0x00000000000000000000000000000000000000b7": "0x1", + "0x00000000000000000000000000000000000000b8": "0x1", + "0x00000000000000000000000000000000000000b9": "0x1", + "0x00000000000000000000000000000000000000ba": "0x1", + "0x00000000000000000000000000000000000000bb": "0x1", + "0x00000000000000000000000000000000000000bc": "0x1", + "0x00000000000000000000000000000000000000bd": "0x1", + "0x00000000000000000000000000000000000000be": "0x1", + "0x00000000000000000000000000000000000000bf": "0x1", + "0x00000000000000000000000000000000000000c0": "0x1", + "0x00000000000000000000000000000000000000c1": "0x1", + "0x00000000000000000000000000000000000000c2": "0x1", + "0x00000000000000000000000000000000000000c3": "0x1", + "0x00000000000000000000000000000000000000c4": "0x1", + "0x00000000000000000000000000000000000000c5": "0x1", + "0x00000000000000000000000000000000000000c6": "0x1", + "0x00000000000000000000000000000000000000c7": "0x1", + "0x00000000000000000000000000000000000000c8": "0x1", + "0x00000000000000000000000000000000000000c9": "0x1", + "0x00000000000000000000000000000000000000ca": "0x1", + "0x00000000000000000000000000000000000000cb": "0x1", + "0x00000000000000000000000000000000000000cc": "0x1", + "0x00000000000000000000000000000000000000cd": "0x1", + "0x00000000000000000000000000000000000000ce": "0x1", + "0x00000000000000000000000000000000000000cf": "0x1", + "0x00000000000000000000000000000000000000d0": "0x1", + "0x00000000000000000000000000000000000000d1": "0x1", + "0x00000000000000000000000000000000000000d2": "0x1", + "0x00000000000000000000000000000000000000d3": "0x1", + "0x00000000000000000000000000000000000000d4": "0x1", + "0x00000000000000000000000000000000000000d5": "0x1", + "0x00000000000000000000000000000000000000d6": "0x1", + "0x00000000000000000000000000000000000000d7": "0x1", + "0x00000000000000000000000000000000000000d8": "0x1", + "0x00000000000000000000000000000000000000d9": "0x1", + "0x00000000000000000000000000000000000000da": "0x1", + "0x00000000000000000000000000000000000000db": "0x1", + "0x00000000000000000000000000000000000000dc": "0x1", + "0x00000000000000000000000000000000000000dd": "0x1", + "0x00000000000000000000000000000000000000de": "0x1", + "0x00000000000000000000000000000000000000df": "0x1", + "0x00000000000000000000000000000000000000e0": "0x1", + "0x00000000000000000000000000000000000000e1": "0x1", + "0x00000000000000000000000000000000000000e2": "0x1", + "0x00000000000000000000000000000000000000e3": "0x1", + "0x00000000000000000000000000000000000000e4": "0x1", + "0x00000000000000000000000000000000000000e5": "0x1", + "0x00000000000000000000000000000000000000e6": "0x1", + "0x00000000000000000000000000000000000000e7": "0x1", + "0x00000000000000000000000000000000000000e8": "0x1", + "0x00000000000000000000000000000000000000e9": "0x1", + "0x00000000000000000000000000000000000000ea": "0x1", + "0x00000000000000000000000000000000000000eb": "0x1", + "0x00000000000000000000000000000000000000ec": "0x1", + "0x00000000000000000000000000000000000000ed": "0x1", + "0x00000000000000000000000000000000000000ee": "0x1", + "0x00000000000000000000000000000000000000ef": "0x1", + "0x00000000000000000000000000000000000000f0": "0x1", + "0x00000000000000000000000000000000000000f1": "0x1", + "0x00000000000000000000000000000000000000f2": "0x1", + "0x00000000000000000000000000000000000000f3": "0x1", + "0x00000000000000000000000000000000000000f4": "0x1", + "0x00000000000000000000000000000000000000f5": "0x1", + "0x00000000000000000000000000000000000000f6": "0x1", + "0x00000000000000000000000000000000000000f7": "0x1", + "0x00000000000000000000000000000000000000f8": "0x1", + "0x00000000000000000000000000000000000000f9": "0x1", + "0x00000000000000000000000000000000000000fa": "0x1", + "0x00000000000000000000000000000000000000fb": "0x1", + "0x00000000000000000000000000000000000000fc": "0x1", + "0x00000000000000000000000000000000000000fd": "0x1", + "0x00000000000000000000000000000000000000fe": "0x1", + "0x00000000000000000000000000000000000000ff": "0x1", + "0x31b98d14007bdee637298086988a0bbd31184523": "0x200000000000000000000000000000000000000000000000000000000000000" +} + +},{}],599:[function(require,module,exports){ +module.exports={ + "0x0000000000000000000000000000000000000011": "0", + "0x0000000000000000000000000000000000000010": "0", + "0x0000000000000000000000000000000000000013": "0", + "0x0000000000000000000000000000000000000012": "0", + "0x0000000000000000000000000000000000000015": "0", + "0x0000000000000000000000000000000000000014": "0", + "0x0000000000000000000000000000000000000017": "0", + "0x0000000000000000000000000000000000000016": "0", + "0x0000000000000000000000000000000000000019": "0", + "0x0000000000000000000000000000000000000018": "0", + "0x00000000000000000000000000000000000000c1": "0", + "0x00000000000000000000000000000000000000c0": "0", + "0x00000000000000000000000000000000000000c7": "0", + "0x00000000000000000000000000000000000000c6": "0", + "0x00000000000000000000000000000000000000c5": "0", + "0x00000000000000000000000000000000000000c4": "0", + "0x000000000000000000000000000000000000002d": "0", + "0x000000000000000000000000000000000000002e": "0", + "0x000000000000000000000000000000000000002f": "0", + "0x00000000000000000000000000000000000000c8": "0", + "0x000000000000000000000000000000000000002a": "0", + "0x000000000000000000000000000000000000002b": "0", + "0x000000000000000000000000000000000000002c": "0", + "0x0000000000000000000000000000000000000091": "0", + "0x0000000000000000000000000000000000000090": "0", + "0x0000000000000000000000000000000000000093": "0", + "0x0000000000000000000000000000000000000092": "0", + "0x0000000000000000000000000000000000000095": "0", + "0x0000000000000000000000000000000000000094": "0", + "0x0000000000000000000000000000000000000097": "0", + "0x0000000000000000000000000000000000000096": "0", + "0x0000000000000000000000000000000000000076": "0", + "0x000000000000000000000000000000000000000c": "0", + "0x00000000000000000000000000000000000000c3": "0", + "0x00000000000000000000000000000000000000c2": "0", + "0x0000000000000000000000000000000000000081": "0", + "0x000000000000000000000000000000000000000a": "0", + "0x0000000000000000000000000000000000000024": "0", + "0x0000000000000000000000000000000000000025": "0", + "0x0000000000000000000000000000000000000026": "0", + "0x0000000000000000000000000000000000000027": "0", + "0x0000000000000000000000000000000000000020": "0", + "0x0000000000000000000000000000000000000021": "0", + "0x0000000000000000000000000000000000000022": "0", + "0x0000000000000000000000000000000000000023": "0", + "0x000000000000000000000000000000000000009a": "0", + "0x00000000000000000000000000000000000000d7": "0", + "0x000000000000000000000000000000000000009c": "0", + "0x000000000000000000000000000000000000009b": "0", + "0x0000000000000000000000000000000000000028": "0", + "0x0000000000000000000000000000000000000029": "0", + "0x00000000000000000000000000000000000000d0": "0", + "0x000000000000000000000000000000000000009f": "0", + "0x000000000000000000000000000000000000001a": "0", + "0x000000000000000000000000000000000000001c": "0", + "0x000000000000000000000000000000000000001b": "0", + "0x000000000000000000000000000000000000001e": "0", + "0x000000000000000000000000000000000000001d": "0", + "0x000000000000000000000000000000000000001f": "0", + "0x00000000000000000000000000000000000000cc": "0", + "0x00000000000000000000000000000000000000cb": "0", + "0x00000000000000000000000000000000000000ca": "0", + "0x00000000000000000000000000000000000000cf": "0", + "0x00000000000000000000000000000000000000ce": "0", + "0x00000000000000000000000000000000000000cd": "0", + "0x0000000000000000000000000000000000000099": "0", + "0x0000000000000000000000000000000000000098": "0", + "0x00000000000000000000000000000000000000ac": "0", + "0x00000000000000000000000000000000000000aa": "0", + "0x00000000000000000000000000000000000000e9": "0", + "0x00000000000000000000000000000000000000e8": "0", + "0x00000000000000000000000000000000000000e5": "0", + "0x00000000000000000000000000000000000000e4": "0", + "0x00000000000000000000000000000000000000e7": "0", + "0x00000000000000000000000000000000000000e6": "0", + "0x00000000000000000000000000000000000000e1": "0", + "0x00000000000000000000000000000000000000e0": "0", + "0x00000000000000000000000000000000000000e3": "0", + "0x00000000000000000000000000000000000000e2": "0", + "0x00000000000000000000000000000000000000df": "0", + "0x00000000000000000000000000000000000000fb": "0", + "0x00000000000000000000000000000000000000fc": "0", + "0x00000000000000000000000000000000000000fd": "0", + "0x00000000000000000000000000000000000000fe": "0", + "0x00000000000000000000000000000000000000ff": "0", + "0x00000000000000000000000000000000000000ae": "0", + "0x00000000000000000000000000000000000000dd": "0", + "0x00000000000000000000000000000000000000ad": "0", + "0x00000000000000000000000000000000000000de": "0", + "0x000000000000000000000000000000000000009e": "0", + "0x000000000000000000000000000000000000004f": "0", + "0x00000000000000000000000000000000000000db": "0", + "0x000000000000000000000000000000000000004d": "0", + "0x000000000000000000000000000000000000004e": "0", + "0x000000000000000000000000000000000000004b": "0", + "0x000000000000000000000000000000000000004c": "0", + "0x000000000000000000000000000000000000004a": "0", + "0x0000000000000000000000000000000000000039": "0", + "0x0000000000000000000000000000000000000038": "0", + "0x000000000000000000000000000000000000000e": "0", + "0x0000000000000000000000000000000000000033": "0", + "0x0000000000000000000000000000000000000032": "0", + "0x0000000000000000000000000000000000000031": "0", + "0x0000000000000000000000000000000000000030": "0", + "0x0000000000000000000000000000000000000037": "0", + "0x0000000000000000000000000000000000000036": "0", + "0x0000000000000000000000000000000000000035": "0", + "0x0000000000000000000000000000000000000034": "0", + "0x00000000000000000000000000000000000000f0": "0", + "0x00000000000000000000000000000000000000f1": "0", + "0x00000000000000000000000000000000000000f2": "0", + "0x00000000000000000000000000000000000000f3": "0", + "0x00000000000000000000000000000000000000f4": "0", + "0x00000000000000000000000000000000000000f5": "0", + "0x00000000000000000000000000000000000000f6": "0", + "0x00000000000000000000000000000000000000f7": "0", + "0x00000000000000000000000000000000000000f8": "0", + "0x00000000000000000000000000000000000000f9": "0", + "0x00000000000000000000000000000000000000ee": "0", + "0x00000000000000000000000000000000000000c9": "0", + "0x00000000000000000000000000000000000000ef": "0", + "0x00000000000000000000000000000000000000ea": "0", + "0x00000000000000000000000000000000000000ec": "0", + "0x00000000000000000000000000000000000000eb": "0", + "0x000000000000000000000000000000000000003c": "0", + "0x000000000000000000000000000000000000003b": "0", + "0x000000000000000000000000000000000000003a": "0", + "0x000000000000000000000000000000000000003f": "0", + "0x000000000000000000000000000000000000003e": "0", + "0x000000000000000000000000000000000000003d": "0", + "0x0000000000000000000000000000000000000089": "0", + "0x0000000000000000000000000000000000000048": "0", + "0x0000000000000000000000000000000000000049": "0", + "0x0000000000000000000000000000000000000046": "0", + "0x0000000000000000000000000000000000000047": "0", + "0x0000000000000000000000000000000000000044": "0", + "0x0000000000000000000000000000000000000045": "0", + "0x0000000000000000000000000000000000000042": "0", + "0x0000000000000000000000000000000000000043": "0", + "0x0000000000000000000000000000000000000040": "0", + "0x0000000000000000000000000000000000000041": "0", + "0x874b54a8bd152966d63f706bae1ffeb0411921e5": "1000000000000000000000000000000", + "0x00000000000000000000000000000000000000af": "0", + "0x0000000000000000000000000000000000000088": "0", + "0x000000000000000000000000000000000000000d": "0", + "0x00000000000000000000000000000000000000ed": "0", + "0x000000000000000000000000000000000000006a": "0", + "0x000000000000000000000000000000000000006b": "0", + "0x000000000000000000000000000000000000006c": "0", + "0x000000000000000000000000000000000000006d": "0", + "0x000000000000000000000000000000000000006e": "0", + "0x000000000000000000000000000000000000006f": "0", + "0x0000000000000000000000000000000000000086": "0", + "0x0000000000000000000000000000000000000087": "0", + "0x0000000000000000000000000000000000000059": "0", + "0x0000000000000000000000000000000000000058": "0", + "0x0000000000000000000000000000000000000055": "0", + "0x0000000000000000000000000000000000000054": "0", + "0x0000000000000000000000000000000000000057": "0", + "0x0000000000000000000000000000000000000056": "0", + "0x0000000000000000000000000000000000000051": "0", + "0x0000000000000000000000000000000000000050": "0", + "0x0000000000000000000000000000000000000053": "0", + "0x0000000000000000000000000000000000000052": "0", + "0x000000000000000000000000000000000000009d": "0", + "0x00000000000000000000000000000000000000dc": "0", + "0x000000000000000000000000000000000000000b": "0", + "0x00000000000000000000000000000000000000fa": "0", + "0x000000000000000000000000000000000000005e": "0", + "0x000000000000000000000000000000000000005d": "0", + "0x000000000000000000000000000000000000005f": "0", + "0x000000000000000000000000000000000000005a": "0", + "0x000000000000000000000000000000000000005c": "0", + "0x000000000000000000000000000000000000005b": "0", + "0x0000000000000000000000000000000000000060": "0", + "0x0000000000000000000000000000000000000061": "0", + "0x0000000000000000000000000000000000000062": "0", + "0x0000000000000000000000000000000000000063": "0", + "0x0000000000000000000000000000000000000064": "0", + "0x0000000000000000000000000000000000000065": "0", + "0x0000000000000000000000000000000000000066": "0", + "0x0000000000000000000000000000000000000067": "0", + "0x0000000000000000000000000000000000000068": "0", + "0x0000000000000000000000000000000000000069": "0", + "0x00000000000000000000000000000000000000bd": "0", + "0x00000000000000000000000000000000000000be": "0", + "0x00000000000000000000000000000000000000bf": "0", + "0x00000000000000000000000000000000000000ba": "0", + "0x00000000000000000000000000000000000000bb": "0", + "0x00000000000000000000000000000000000000bc": "0", + "0x000000000000000000000000000000000000008b": "0", + "0x000000000000000000000000000000000000008c": "0", + "0x000000000000000000000000000000000000008a": "0", + "0x000000000000000000000000000000000000008f": "0", + "0x000000000000000000000000000000000000008d": "0", + "0x000000000000000000000000000000000000008e": "0", + "0x00000000000000000000000000000000000000a1": "0", + "0x00000000000000000000000000000000000000a0": "0", + "0x00000000000000000000000000000000000000a3": "0", + "0x00000000000000000000000000000000000000a2": "0", + "0x00000000000000000000000000000000000000a5": "0", + "0x00000000000000000000000000000000000000a4": "0", + "0x00000000000000000000000000000000000000a7": "0", + "0x00000000000000000000000000000000000000a6": "0", + "0x00000000000000000000000000000000000000a9": "0", + "0x00000000000000000000000000000000000000a8": "0", + "0x00000000000000000000000000000000000000ab": "0", + "0x00000000000000000000000000000000000000d8": "0", + "0x00000000000000000000000000000000000000d9": "0", + "0x0000000000000000000000000000000000000077": "0", + "0x00000000000000000000000000000000000000d6": "0", + "0x0000000000000000000000000000000000000075": "0", + "0x0000000000000000000000000000000000000074": "0", + "0x0000000000000000000000000000000000000073": "0", + "0x0000000000000000000000000000000000000072": "0", + "0x0000000000000000000000000000000000000071": "0", + "0x0000000000000000000000000000000000000070": "0", + "0x00000000000000000000000000000000000000d4": "0", + "0x0000000000000000000000000000000000000079": "0", + "0x0000000000000000000000000000000000000078": "0", + "0x0000000000000000000000000000000000000002": "1", + "0x0000000000000000000000000000000000000003": "1", + "0x0000000000000000000000000000000000000000": "1", + "0x0000000000000000000000000000000000000001": "1", + "0x0000000000000000000000000000000000000006": "1", + "0x0000000000000000000000000000000000000007": "1", + "0x0000000000000000000000000000000000000004": "1", + "0x0000000000000000000000000000000000000005": "1", + "0x00000000000000000000000000000000000000d2": "0", + "0x0000000000000000000000000000000000000008": "1", + "0x0000000000000000000000000000000000000009": "1", + "0x00000000000000000000000000000000000000d3": "0", + "0x00000000000000000000000000000000000000b4": "0", + "0x00000000000000000000000000000000000000b5": "0", + "0x00000000000000000000000000000000000000b6": "0", + "0x00000000000000000000000000000000000000b7": "0", + "0x00000000000000000000000000000000000000b0": "0", + "0x00000000000000000000000000000000000000b1": "0", + "0x00000000000000000000000000000000000000b2": "0", + "0x00000000000000000000000000000000000000b3": "0", + "0x0000000000000000000000000000000000000082": "0", + "0x0000000000000000000000000000000000000083": "0", + "0x0000000000000000000000000000000000000080": "0", + "0x00000000000000000000000000000000000000d1": "0", + "0x00000000000000000000000000000000000000b8": "0", + "0x00000000000000000000000000000000000000b9": "0", + "0x0000000000000000000000000000000000000084": "0", + "0x0000000000000000000000000000000000000085": "0", + "0x000000000000000000000000000000000000007f": "0", + "0x000000000000000000000000000000000000007e": "0", + "0x000000000000000000000000000000000000007d": "0", + "0x000000000000000000000000000000000000007c": "0", + "0x000000000000000000000000000000000000007b": "0", + "0x000000000000000000000000000000000000007a": "0", + "0x000000000000000000000000000000000000000f": "0", + "0x00000000000000000000000000000000000000d5": "0", + "0x00000000000000000000000000000000000000da": "0" +} + +},{}],600:[function(require,module,exports){ +module.exports={ + "name": "byzantium", + "comment": "Hardfork with new precompiles, instructions and other protocol changes", + "eip": { + "url": "https://eips.ethereum.org/EIPS/eip-609", + "status": "Final" + }, + "gasConfig": {}, + "gasPrices": { + "modexpGquaddivisor": { + "v": 20, + "d": "Gquaddivisor from modexp precompile for gas calculation" + }, + "ecAdd": { + "v": 500, + "d": "Gas costs for curve addition precompile" + }, + "ecMul": { + "v": 40000, + "d": "Gas costs for curve multiplication precompile" + }, + "ecPairing": { + "v": 100000, + "d": "Base gas costs for curve pairing precompile" + }, + "ecPairingWord": { + "v": 80000, + "d": "Gas costs regarding curve pairing precompile input length" + } + }, + "vm": {}, + "pow": { + "minerReward": { + "v": "3000000000000000000", + "d": "the amount a miner get rewarded for mining a block" + } + }, + "casper": {}, + "sharding": {} +} + +},{}],601:[function(require,module,exports){ +module.exports={ + "name": "chainstart", + "comment": "Start of the Ethereum main chain", + "eip": { + "url": "", + "status": "" + }, + "status": "", + "gasConfig": { + "minGasLimit": { + "v": 5000, + "d": "Minimum the gas limit may ever be" + }, + "gasLimitBoundDivisor": { + "v": 1024, + "d": "The bound divisor of the gas limit, used in update calculations" + } + }, + "gasPrices": { + "tierStep": { + "v": [0, 2, 3, 5, 8, 10, 20], + "d": "Once per operation, for a selection of them" + }, + "exp": { + "v": 10, + "d": "Once per EXP instuction" + }, + "expByte": { + "v": 10, + "d": "Times ceil(log256(exponent)) for the EXP instruction" + }, + "sha3": { + "v": 30, + "d": "Once per SHA3 operation" + }, + "sha3Word": { + "v": 6, + "d": "Once per word of the SHA3 operation's data" + }, + "sload": { + "v": 50, + "d": "Once per SLOAD operation" + }, + "sstoreSet": { + "v": 20000, + "d": "Once per SSTORE operation if the zeroness changes from zero" + }, + "sstoreReset": { + "v": 5000, + "d": "Once per SSTORE operation if the zeroness does not change from zero" + }, + "sstoreRefund": { + "v": 15000, + "d": "Once per SSTORE operation if the zeroness changes to zero" + }, + "jumpdest": { + "v": 1, + "d": "Refunded gas, once per SSTORE operation if the zeroness changes to zero" + }, + "log": { + "v": 375, + "d": "Per LOG* operation" + }, + "logData": { + "v": 8, + "d": "Per byte in a LOG* operation's data" + }, + "logTopic": { + "v": 375, + "d": "Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas" + }, + "create": { + "v": 32000, + "d": "Once per CREATE operation & contract-creation transaction" + }, + "call": { + "v": 40, + "d": "Once per CALL operation & message call transaction" + }, + "callStipend": { + "v": 2300, + "d": "Free gas given at beginning of call" + }, + "callValueTransfer": { + "v": 9000, + "d": "Paid for CALL when the value transfor is non-zero" + }, + "callNewAccount": { + "v": 25000, + "d": "Paid for CALL when the destination address didn't exist prior" + }, + "selfdestructRefund": { + "v": 24000, + "d": "Refunded following a selfdestruct operation" + }, + "memory": { + "v": 3, + "d": "Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL" + }, + "quadCoeffDiv": { + "v": 512, + "d": "Divisor for the quadratic particle of the memory cost equation" + }, + "createData": { + "v": 200, + "d": "" + }, + "tx": { + "v": 21000, + "d": "Per transaction. NOTE: Not payable on data of calls between transactions" + }, + "txCreation": { + "v": 32000, + "d": "The cost of creating a contract via tx" + }, + "txDataZero": { + "v": 4, + "d": "Per byte of data attached to a transaction that equals zero. NOTE: Not payable on data of calls between transactions" + }, + "txDataNonZero": { + "v": 68, + "d": "Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions" + }, + "copy": { + "v": 3, + "d": "Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added" + }, + "ecRecover": { + "v": 3000, + "d": "" + }, + "sha256": { + "v": 60, + "d": "" + }, + "sha256Word": { + "v": 12, + "d": "" + }, + "ripemd160": { + "v": 600, + "d": "" + }, + "ripemd160Word": { + "v": 120, + "d": "" + }, + "identity": { + "v": 15, + "d": "" + }, + "identityWord": { + "v": 3, + "d": "" + } + }, + "vm": { + "stackLimit": { + "v": 1024, + "d": "Maximum size of VM stack allowed" + }, + "callCreateDepth": { + "v": 1024, + "d": "Maximum depth of call/create stack" + }, + "maxExtraDataSize": { + "v": 32, + "d": "Maximum size extra data may be after Genesis" + } + }, + "pow": { + "minimumDifficulty": { + "v": 131072, + "d": "The minimum that the difficulty may ever be" + }, + "difficultyBoundDivisor": { + "v": 2048, + "d": "The bound divisor of the difficulty, used in the update calculations" + }, + "durationLimit": { + "v": 13, + "d": "The decision boundary on the blocktime duration used to determine whether difficulty should go up or not" + }, + "epochDuration": { + "v": 30000, + "d": "Duration between proof-of-work epochs" + }, + "timebombPeriod": { + "v": 100000, + "d": "Exponential difficulty timebomb period" + }, + "minerReward": { + "v": "5000000000000000000", + "d": "the amount a miner get rewarded for mining a block" + } + }, + "casper": {}, + "sharding": {} +} + +},{}],602:[function(require,module,exports){ +module.exports={ + "name": "constantinople", + "comment": "Postponed hardfork including EIP-1283 (SSTORE gas metering changes)", + "eip": { + "url": "https://eips.ethereum.org/EIPS/eip-1013", + "status": "Final" + }, + "gasConfig": {}, + "gasPrices": { + "netSstoreNoopGas": { + "v": 200, + "d": "Once per SSTORE operation if the value doesn't change" + }, + "netSstoreInitGas": { + "v": 20000, + "d": "Once per SSTORE operation from clean zero" + }, + "netSstoreCleanGas": { + "v": 5000, + "d": "Once per SSTORE operation from clean non-zero" + }, + "netSstoreDirtyGas": { + "v": 200, + "d": "Once per SSTORE operation from dirty" + }, + "netSstoreClearRefund": { + "v": 15000, + "d": "Once per SSTORE operation for clearing an originally existing storage slot" + }, + "netSstoreResetRefund": { + "v": 4800, + "d": "Once per SSTORE operation for resetting to the original non-zero value" + }, + "netSstoreResetClearRefund": { + "v": 19800, + "d": "Once per SSTORE operation for resetting to the original zero value" + } + }, + "vm": {}, + "pow": { + "minerReward": { + "v": "2000000000000000000", + "d": "The amount a miner gets rewarded for mining a block" + } + }, + "casper": {}, + "sharding": {} +} + +},{}],603:[function(require,module,exports){ +module.exports={ + "name": "dao", + "comment": "DAO rescue hardfork", + "eip": { + "url": "https://eips.ethereum.org/EIPS/eip-779", + "status": "Final" + }, + "gasConfig": {}, + "gasPrices": {}, + "vm": {}, + "pow": {}, + "casper": {}, + "sharding": {} +} + +},{}],604:[function(require,module,exports){ +module.exports={ + "name": "homestead", + "comment": "Homestead hardfork with protocol and network changes", + "eip": { + "url": "https://eips.ethereum.org/EIPS/eip-606", + "status": "Final" + }, + "gasConfig": {}, + "gasPrices": {}, + "vm": {}, + "pow": {}, + "casper": {}, + "sharding": {} +} + +},{}],605:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.hardforks = [ + ['chainstart', require('./chainstart.json')], + ['homestead', require('./homestead.json')], + ['dao', require('./dao.json')], + ['tangerineWhistle', require('./tangerineWhistle.json')], + ['spuriousDragon', require('./spuriousDragon.json')], + ['byzantium', require('./byzantium.json')], + ['constantinople', require('./constantinople.json')], + ['petersburg', require('./petersburg.json')], +]; + +},{"./byzantium.json":600,"./chainstart.json":601,"./constantinople.json":602,"./dao.json":603,"./homestead.json":604,"./petersburg.json":606,"./spuriousDragon.json":607,"./tangerineWhistle.json":608}],606:[function(require,module,exports){ +module.exports={ + "name": "petersburg", + "comment": "Aka constantinopleFix, removes EIP-1283, activate together with or after constantinople", + "eip": { + "url": "https://github.com/ethereum/EIPs/pull/1716", + "status": "Draft" + }, + "gasConfig": {}, + "gasPrices": { + "netSstoreNoopGas": { + "v": null, + "d": "Removed along EIP-1283" + }, + "netSstoreInitGas": { + "v": null, + "d": "Removed along EIP-1283" + }, + "netSstoreCleanGas": { + "v": null, + "d": "Removed along EIP-1283" + }, + "netSstoreDirtyGas": { + "v": null, + "d": "Removed along EIP-1283" + }, + "netSstoreClearRefund": { + "v": null, + "d": "Removed along EIP-1283" + }, + "netSstoreResetRefund": { + "v": null, + "d": "Removed along EIP-1283" + }, + "netSstoreResetClearRefund": { + "v": null, + "d": "Removed along EIP-1283" + } + }, + "vm": {}, + "pow": {}, + "casper": {}, + "sharding": {} +} + +},{}],607:[function(require,module,exports){ +module.exports={ + "name": "spuriousDragon", + "comment": "HF with EIPs for simple replay attack protection, EXP cost increase, state trie clearing, contract code size limit", + "eip": { + "url": "https://eips.ethereum.org/EIPS/eip-607", + "status": "Final" + }, + "gasConfig": {}, + "gasPrices": { + "expByte": { + "v": 50, + "d": "Times ceil(log256(exponent)) for the EXP instruction" + } + }, + "vm": { + "maxCodeSize": { + "v": 24576, + "d": "Maximum length of contract code" + } + }, + "pow": {}, + "casper": {}, + "sharding": {} +} + +},{}],608:[function(require,module,exports){ +module.exports={ + "name": "tangerineWhistle", + "comment": "Hardfork with gas cost changes for IO-heavy operations", + "eip": { + "url": "https://eips.ethereum.org/EIPS/eip-608", + "status": "Final" + }, + "gasConfig": {}, + "gasPrices": { + "sload": { + "v": 200, + "d": "Once per SLOAD operation" + }, + "call": { + "v": 700, + "d": "Once per CALL operation & message call transaction" + } + }, + "vm": {}, + "pow": {}, + "casper": {}, + "sharding": {} +} + +},{}],609:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var chains_1 = require("./chains"); +var hardforks_1 = require("./hardforks"); +/** + * Common class to access chain and hardfork parameters + */ +var Common = /** @class */ (function () { + /** + * @constructor + * @param chain String ('mainnet') or Number (1) chain + * @param hardfork String identifier ('byzantium') for hardfork (optional) + * @param supportedHardforks Limit parameter returns to the given hardforks (optional) + */ + function Common(chain, hardfork, supportedHardforks) { + this._chainParams = this.setChain(chain); + this._hardfork = null; + this._supportedHardforks = supportedHardforks === undefined ? [] : supportedHardforks; + if (hardfork) { + this.setHardfork(hardfork); + } + } + /** + * Sets the chain + * @param chain String ('mainnet') or Number (1) chain + * representation. Or, a Dictionary of chain parameters for a private network. + * @returns The dictionary with parameters set as chain + */ + Common.prototype.setChain = function (chain) { + if (typeof chain === 'number') { + if (chains_1.chains['names'][chain]) { + this._chainParams = chains_1.chains[chains_1.chains['names'][chain]]; + } + else { + throw new Error("Chain with ID " + chain + " not supported"); + } + } + else if (typeof chain === 'string') { + if (chains_1.chains[chain]) { + this._chainParams = chains_1.chains[chain]; + } + else { + throw new Error("Chain with name " + chain + " not supported"); + } + } + else if (typeof chain === 'object') { + var required = ['networkId', 'genesis', 'hardforks', 'bootstrapNodes']; + for (var _i = 0, required_1 = required; _i < required_1.length; _i++) { + var param = required_1[_i]; + if (chain[param] === undefined) { + throw new Error("Missing required chain parameter: " + param); + } + } + this._chainParams = chain; + } + else { + throw new Error('Wrong input format'); + } + return this._chainParams; + }; + /** + * Sets the hardfork to get params for + * @param hardfork String identifier ('byzantium') + */ + Common.prototype.setHardfork = function (hardfork) { + if (!this._isSupportedHardfork(hardfork)) { + throw new Error("Hardfork " + hardfork + " not set as supported in supportedHardforks"); + } + var changed = false; + for (var _i = 0, hardforkChanges_1 = hardforks_1.hardforks; _i < hardforkChanges_1.length; _i++) { + var hfChanges = hardforkChanges_1[_i]; + if (hfChanges[0] === hardfork) { + this._hardfork = hardfork; + changed = true; + } + } + if (!changed) { + throw new Error("Hardfork with name " + hardfork + " not supported"); + } + }; + /** + * Internal helper function to choose between hardfork set and hardfork provided as param + * @param hardfork Hardfork given to function as a parameter + * @returns Hardfork chosen to be used + */ + Common.prototype._chooseHardfork = function (hardfork, onlySupported) { + onlySupported = onlySupported === undefined ? true : onlySupported; + if (!hardfork) { + if (!this._hardfork) { + throw new Error('Method called with neither a hardfork set nor provided by param'); + } + else { + hardfork = this._hardfork; + } + } + else if (onlySupported && !this._isSupportedHardfork(hardfork)) { + throw new Error("Hardfork " + hardfork + " not set as supported in supportedHardforks"); + } + return hardfork; + }; + /** + * Internal helper function, returns the params for the given hardfork for the chain set + * @param hardfork Hardfork name + * @returns Dictionary with hardfork params + */ + Common.prototype._getHardfork = function (hardfork) { + var hfs = this.hardforks(); + for (var _i = 0, hfs_1 = hfs; _i < hfs_1.length; _i++) { + var hf = hfs_1[_i]; + if (hf['name'] === hardfork) + return hf; + } + throw new Error("Hardfork " + hardfork + " not defined for chain " + this.chainName()); + }; + /** + * Internal helper function to check if a hardfork is set to be supported by the library + * @param hardfork Hardfork name + * @returns True if hardfork is supported + */ + Common.prototype._isSupportedHardfork = function (hardfork) { + if (this._supportedHardforks.length > 0) { + for (var _i = 0, _a = this._supportedHardforks; _i < _a.length; _i++) { + var supportedHf = _a[_i]; + if (hardfork === supportedHf) + return true; + } + } + else { + return true; + } + return false; + }; + /** + * Returns the parameter corresponding to a hardfork + * @param topic Parameter topic ('gasConfig', 'gasPrices', 'vm', 'pow', 'casper', 'sharding') + * @param name Parameter name (e.g. 'minGasLimit' for 'gasConfig' topic) + * @param hardfork Hardfork name, optional if hardfork set + */ + Common.prototype.param = function (topic, name, hardfork) { + hardfork = this._chooseHardfork(hardfork); + var value; + for (var _i = 0, hardforkChanges_2 = hardforks_1.hardforks; _i < hardforkChanges_2.length; _i++) { + var hfChanges = hardforkChanges_2[_i]; + if (!hfChanges[1][topic]) { + throw new Error("Topic " + topic + " not defined"); + } + if (hfChanges[1][topic][name] !== undefined) { + value = hfChanges[1][topic][name].v; + } + if (hfChanges[0] === hardfork) + break; + } + if (value === undefined) { + throw new Error(topic + " value for " + name + " not found"); + } + return value; + }; + /** + * Returns a parameter for the hardfork active on block number + * @param topic Parameter topic + * @param name Parameter name + * @param blockNumber Block number + */ + Common.prototype.paramByBlock = function (topic, name, blockNumber) { + var activeHfs = this.activeHardforks(blockNumber); + var hardfork = activeHfs[activeHfs.length - 1]['name']; + return this.param(topic, name, hardfork); + }; + /** + * Checks if set or provided hardfork is active on block number + * @param hardfork Hardfork name or null (for HF set) + * @param blockNumber + * @param opts Hardfork options (onlyActive unused) + * @returns True if HF is active on block number + */ + Common.prototype.hardforkIsActiveOnBlock = function (hardfork, blockNumber, opts) { + opts = opts !== undefined ? opts : {}; + var onlySupported = opts.onlySupported === undefined ? false : opts.onlySupported; + hardfork = this._chooseHardfork(hardfork, onlySupported); + var hfBlock = this.hardforkBlock(hardfork); + if (hfBlock !== null && blockNumber >= hfBlock) + return true; + return false; + }; + /** + * Alias to hardforkIsActiveOnBlock when hardfork is set + * @param blockNumber + * @param opts Hardfork options (onlyActive unused) + * @returns True if HF is active on block number + */ + Common.prototype.activeOnBlock = function (blockNumber, opts) { + return this.hardforkIsActiveOnBlock(null, blockNumber, opts); + }; + /** + * Sequence based check if given or set HF1 is greater than or equal HF2 + * @param hardfork1 Hardfork name or null (if set) + * @param hardfork2 Hardfork name + * @param opts Hardfork options + * @returns True if HF1 gte HF2 + */ + Common.prototype.hardforkGteHardfork = function (hardfork1, hardfork2, opts) { + opts = opts !== undefined ? opts : {}; + var onlyActive = opts.onlyActive === undefined ? false : opts.onlyActive; + hardfork1 = this._chooseHardfork(hardfork1, opts.onlySupported); + var hardforks; + if (onlyActive) { + hardforks = this.activeHardforks(null, opts); + } + else { + hardforks = this.hardforks(); + } + var posHf1 = -1, posHf2 = -1; + var index = 0; + for (var _i = 0, hardforks_2 = hardforks; _i < hardforks_2.length; _i++) { + var hf = hardforks_2[_i]; + if (hf['name'] === hardfork1) + posHf1 = index; + if (hf['name'] === hardfork2) + posHf2 = index; + index += 1; + } + return posHf1 >= posHf2; + }; + /** + * Alias to hardforkGteHardfork when hardfork is set + * @param hardfork Hardfork name + * @param opts Hardfork options + * @returns True if hardfork set is greater than hardfork provided + */ + Common.prototype.gteHardfork = function (hardfork, opts) { + return this.hardforkGteHardfork(null, hardfork, opts); + }; + /** + * Checks if given or set hardfork is active on the chain + * @param hardfork Hardfork name, optional if HF set + * @param opts Hardfork options (onlyActive unused) + * @returns True if hardfork is active on the chain + */ + Common.prototype.hardforkIsActiveOnChain = function (hardfork, opts) { + opts = opts !== undefined ? opts : {}; + var onlySupported = opts.onlySupported === undefined ? false : opts.onlySupported; + hardfork = this._chooseHardfork(hardfork, onlySupported); + for (var _i = 0, _a = this.hardforks(); _i < _a.length; _i++) { + var hf = _a[_i]; + if (hf['name'] === hardfork && hf['block'] !== null) + return true; + } + return false; + }; + /** + * Returns the active hardfork switches for the current chain + * @param blockNumber up to block if provided, otherwise for the whole chain + * @param opts Hardfork options (onlyActive unused) + * @return Array with hardfork arrays + */ + Common.prototype.activeHardforks = function (blockNumber, opts) { + opts = opts !== undefined ? opts : {}; + var activeHardforks = []; + var hfs = this.hardforks(); + for (var _i = 0, hfs_2 = hfs; _i < hfs_2.length; _i++) { + var hf = hfs_2[_i]; + if (hf['block'] === null) + continue; + if (blockNumber !== undefined && blockNumber !== null && blockNumber < hf['block']) + break; + if (opts.onlySupported && !this._isSupportedHardfork(hf['name'])) + continue; + activeHardforks.push(hf); + } + return activeHardforks; + }; + /** + * Returns the latest active hardfork name for chain or block or throws if unavailable + * @param blockNumber up to block if provided, otherwise for the whole chain + * @param opts Hardfork options (onlyActive unused) + * @return Hardfork name + */ + Common.prototype.activeHardfork = function (blockNumber, opts) { + opts = opts !== undefined ? opts : {}; + var activeHardforks = this.activeHardforks(blockNumber, opts); + if (activeHardforks.length > 0) { + return activeHardforks[activeHardforks.length - 1]['name']; + } + else { + throw new Error("No (supported) active hardfork found"); + } + }; + /** + * Returns the hardfork change block for hardfork provided or set + * @param hardfork Hardfork name, optional if HF set + * @returns Block number + */ + Common.prototype.hardforkBlock = function (hardfork) { + hardfork = this._chooseHardfork(hardfork, false); + return this._getHardfork(hardfork)['block']; + }; + /** + * True if block number provided is the hardfork (given or set) change block of the current chain + * @param blockNumber Number of the block to check + * @param hardfork Hardfork name, optional if HF set + * @returns True if blockNumber is HF block + */ + Common.prototype.isHardforkBlock = function (blockNumber, hardfork) { + hardfork = this._chooseHardfork(hardfork, false); + if (this.hardforkBlock(hardfork) === blockNumber) { + return true; + } + else { + return false; + } + }; + /** + * Provide the consensus type for the hardfork set or provided as param + * @param hardfork Hardfork name, optional if hardfork set + * @returns Consensus type (e.g. 'pow', 'poa') + */ + Common.prototype.consensus = function (hardfork) { + hardfork = this._chooseHardfork(hardfork); + return this._getHardfork(hardfork)['consensus']; + }; + /** + * Provide the finality type for the hardfork set or provided as param + * @param {String} hardfork Hardfork name, optional if hardfork set + * @returns {String} Finality type (e.g. 'pos', null of no finality) + */ + Common.prototype.finality = function (hardfork) { + hardfork = this._chooseHardfork(hardfork); + return this._getHardfork(hardfork)['finality']; + }; + /** + * Returns the Genesis parameters of current chain + * @returns Genesis dictionary + */ + Common.prototype.genesis = function () { + return this._chainParams['genesis']; + }; + /** + * Returns the hardforks for current chain + * @returns {Array} Array with arrays of hardforks + */ + Common.prototype.hardforks = function () { + return this._chainParams['hardforks']; + }; + /** + * Returns bootstrap nodes for the current chain + * @returns {Dictionary} Dict with bootstrap nodes + */ + Common.prototype.bootstrapNodes = function () { + return this._chainParams['bootstrapNodes']; + }; + /** + * Returns the hardfork set + * @returns Hardfork name + */ + Common.prototype.hardfork = function () { + return this._hardfork; + }; + /** + * Returns the Id of current chain + * @returns chain Id + */ + Common.prototype.chainId = function () { + return this._chainParams['chainId']; + }; + /** + * Returns the name of current chain + * @returns chain name (lower case) + */ + Common.prototype.chainName = function () { + return chains_1.chains['names'][this.chainId()] || this._chainParams['name']; + }; + /** + * Returns the Id of current network + * @returns network Id + */ + Common.prototype.networkId = function () { + return this._chainParams['networkId']; + }; + return Common; +}()); +exports.default = Common; + +},{"./chains":589,"./hardforks":605}],610:[function(require,module,exports){ +(function (Buffer){ +'use strict'; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var ethUtil = require('ethereumjs-util'); +var fees = require('ethereum-common/params.json'); +var BN = ethUtil.BN; + +// secp256k1n/2 +var N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16); + +/** + * Creates a new transaction object. + * + * @example + * var rawTx = { + * nonce: '00', + * gasPrice: '09184e72a000', + * gasLimit: '2710', + * to: '0000000000000000000000000000000000000000', + * value: '00', + * data: '7f7465737432000000000000000000000000000000000000000000000000000000600057', + * v: '1c', + * r: '5e1d3a76fbf824220eafc8c79ad578ad2b67d01b0c2425eb1f1347e8f50882ab', + * s: '5bd428537f05f9830e93792f90ea6a3e2d1ee84952dd96edbae9f658f831ab13' + * }; + * var tx = new Transaction(rawTx); + * + * @class + * @param {Buffer | Array | Object} data a transaction can be initiailized with either a buffer containing the RLP serialized transaction or an array of buffers relating to each of the tx Properties, listed in order below in the exmple. + * + * Or lastly an Object containing the Properties of the transaction like in the Usage example. + * + * For Object and Arrays each of the elements can either be a Buffer, a hex-prefixed (0x) String , Number, or an object with a toBuffer method such as Bignum + * + * @property {Buffer} raw The raw rlp encoded transaction + * @param {Buffer} data.nonce nonce number + * @param {Buffer} data.gasLimit transaction gas limit + * @param {Buffer} data.gasPrice transaction gas price + * @param {Buffer} data.to to the to address + * @param {Buffer} data.value the amount of ether sent + * @param {Buffer} data.data this will contain the data of the message or the init of a contract + * @param {Buffer} data.v EC signature parameter + * @param {Buffer} data.r EC signature parameter + * @param {Buffer} data.s EC recovery ID + * @param {Number} data.chainId EIP 155 chainId - mainnet: 1, ropsten: 3 + * */ + +var Transaction = function () { + function Transaction(data) { + _classCallCheck(this, Transaction); + + data = data || {}; + // Define Properties + var fields = [{ + name: 'nonce', + length: 32, + allowLess: true, + default: new Buffer([]) + }, { + name: 'gasPrice', + length: 32, + allowLess: true, + default: new Buffer([]) + }, { + name: 'gasLimit', + alias: 'gas', + length: 32, + allowLess: true, + default: new Buffer([]) + }, { + name: 'to', + allowZero: true, + length: 20, + default: new Buffer([]) + }, { + name: 'value', + length: 32, + allowLess: true, + default: new Buffer([]) + }, { + name: 'data', + alias: 'input', + allowZero: true, + default: new Buffer([]) + }, { + name: 'v', + allowZero: true, + default: new Buffer([0x1c]) + }, { + name: 'r', + length: 32, + allowZero: true, + allowLess: true, + default: new Buffer([]) + }, { + name: 's', + length: 32, + allowZero: true, + allowLess: true, + default: new Buffer([]) + }]; + + /** + * Returns the rlp encoding of the transaction + * @method serialize + * @return {Buffer} + * @memberof Transaction + * @name serialize + */ + // attached serialize + ethUtil.defineProperties(this, fields, data); + + /** + * @property {Buffer} from (read only) sender address of this transaction, mathematically derived from other parameters. + * @name from + * @memberof Transaction + */ + Object.defineProperty(this, 'from', { + enumerable: true, + configurable: true, + get: this.getSenderAddress.bind(this) + }); + + // calculate chainId from signature + var sigV = ethUtil.bufferToInt(this.v); + var chainId = Math.floor((sigV - 35) / 2); + if (chainId < 0) chainId = 0; + + // set chainId + this._chainId = chainId || data.chainId || 0; + this._homestead = true; + } + + /** + * If the tx's `to` is to the creation address + * @return {Boolean} + */ + + + Transaction.prototype.toCreationAddress = function toCreationAddress() { + return this.to.toString('hex') === ''; + }; + + /** + * Computes a sha3-256 hash of the serialized tx + * @param {Boolean} [includeSignature=true] whether or not to inculde the signature + * @return {Buffer} + */ + + + Transaction.prototype.hash = function hash(includeSignature) { + if (includeSignature === undefined) includeSignature = true; + + // EIP155 spec: + // when computing the hash of a transaction for purposes of signing or recovering, + // instead of hashing only the first six elements (ie. nonce, gasprice, startgas, to, value, data), + // hash nine elements, with v replaced by CHAIN_ID, r = 0 and s = 0 + + var items = void 0; + if (includeSignature) { + items = this.raw; + } else { + if (this._chainId > 0) { + var raw = this.raw.slice(); + this.v = this._chainId; + this.r = 0; + this.s = 0; + items = this.raw; + this.raw = raw; + } else { + items = this.raw.slice(0, 6); + } + } + + // create hash + return ethUtil.rlphash(items); + }; + + /** + * returns the public key of the sender + * @return {Buffer} + */ + + + Transaction.prototype.getChainId = function getChainId() { + return this._chainId; + }; + + /** + * returns the sender's address + * @return {Buffer} + */ + + + Transaction.prototype.getSenderAddress = function getSenderAddress() { + if (this._from) { + return this._from; + } + var pubkey = this.getSenderPublicKey(); + this._from = ethUtil.publicToAddress(pubkey); + return this._from; + }; + + /** + * returns the public key of the sender + * @return {Buffer} + */ + + + Transaction.prototype.getSenderPublicKey = function getSenderPublicKey() { + if (!this._senderPubKey || !this._senderPubKey.length) { + if (!this.verifySignature()) throw new Error('Invalid Signature'); + } + return this._senderPubKey; + }; + + /** + * Determines if the signature is valid + * @return {Boolean} + */ + + + Transaction.prototype.verifySignature = function verifySignature() { + var msgHash = this.hash(false); + // All transaction signatures whose s-value is greater than secp256k1n/2 are considered invalid. + if (this._homestead && new BN(this.s).cmp(N_DIV_2) === 1) { + return false; + } + + try { + var v = ethUtil.bufferToInt(this.v); + if (this._chainId > 0) { + v -= this._chainId * 2 + 8; + } + this._senderPubKey = ethUtil.ecrecover(msgHash, v, this.r, this.s); + } catch (e) { + return false; + } + + return !!this._senderPubKey; + }; + + /** + * sign a transaction with a given a private key + * @param {Buffer} privateKey + */ + + + Transaction.prototype.sign = function sign(privateKey) { + var msgHash = this.hash(false); + var sig = ethUtil.ecsign(msgHash, privateKey); + if (this._chainId > 0) { + sig.v += this._chainId * 2 + 8; + } + Object.assign(this, sig); + }; + + /** + * The amount of gas paid for the data in this tx + * @return {BN} + */ + + + Transaction.prototype.getDataFee = function getDataFee() { + var data = this.raw[5]; + var cost = new BN(0); + for (var i = 0; i < data.length; i++) { + data[i] === 0 ? cost.iaddn(fees.txDataZeroGas.v) : cost.iaddn(fees.txDataNonZeroGas.v); + } + return cost; + }; + + /** + * the minimum amount of gas the tx must have (DataFee + TxFee + Creation Fee) + * @return {BN} + */ + + + Transaction.prototype.getBaseFee = function getBaseFee() { + var fee = this.getDataFee().iaddn(fees.txGas.v); + if (this._homestead && this.toCreationAddress()) { + fee.iaddn(fees.txCreation.v); + } + return fee; + }; + + /** + * the up front amount that an account must have for this transaction to be valid + * @return {BN} + */ + + + Transaction.prototype.getUpfrontCost = function getUpfrontCost() { + return new BN(this.gasLimit).imul(new BN(this.gasPrice)).iadd(new BN(this.value)); + }; + + /** + * validates the signature and checks to see if it has enough gas + * @param {Boolean} [stringError=false] whether to return a string with a dscription of why the validation failed or return a Bloolean + * @return {Boolean|String} + */ + + + Transaction.prototype.validate = function validate(stringError) { + var errors = []; + if (!this.verifySignature()) { + errors.push('Invalid Signature'); + } + + if (this.getBaseFee().cmp(new BN(this.gasLimit)) > 0) { + errors.push(['gas limit is too low. Need at least ' + this.getBaseFee()]); + } + + if (stringError === undefined || stringError === false) { + return errors.length === 0; + } else { + return errors.join(' '); + } + }; + + return Transaction; +}(); + +module.exports = Transaction; +}).call(this,require("buffer").Buffer) +},{"buffer":113,"ethereum-common/params.json":611,"ethereumjs-util":612}],611:[function(require,module,exports){ +module.exports={ + "genesisGasLimit": { + "v": 5000, + "d": "Gas limit of the Genesis block." + }, + "genesisDifficulty": { + "v": 17179869184, + "d": "Difficulty of the Genesis block." + }, + "genesisNonce": { + "v": "0x0000000000000042", + "d": "the geneis nonce" + }, + "genesisExtraData": { + "v": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "d": "extra data " + }, + "genesisHash": { + "v": "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3", + "d": "genesis hash" + }, + "genesisStateRoot": { + "v": "0xd7f8974fb5ac78d9ac099b9ad5018bedc2ce0a72dad1827a1709da30580f0544", + "d": "the genesis state root" + }, + "minGasLimit": { + "v": 5000, + "d": "Minimum the gas limit may ever be." + }, + "gasLimitBoundDivisor": { + "v": 1024, + "d": "The bound divisor of the gas limit, used in update calculations." + }, + "minimumDifficulty": { + "v": 131072, + "d": "The minimum that the difficulty may ever be." + }, + "difficultyBoundDivisor": { + "v": 2048, + "d": "The bound divisor of the difficulty, used in the update calculations." + }, + "durationLimit": { + "v": 13, + "d": "The decision boundary on the blocktime duration used to determine whether difficulty should go up or not." + }, + "maximumExtraDataSize": { + "v": 32, + "d": "Maximum size extra data may be after Genesis." + }, + "epochDuration": { + "v": 30000, + "d": "Duration between proof-of-work epochs." + }, + "stackLimit": { + "v": 1024, + "d": "Maximum size of VM stack allowed." + }, + "callCreateDepth": { + "v": 1024, + "d": "Maximum depth of call/create stack." + }, + + "tierStepGas": { + "v": [0, 2, 3, 5, 8, 10, 20], + "d": "Once per operation, for a selection of them." + }, + "expGas": { + "v": 10, + "d": "Once per EXP instuction." + }, + "expByteGas": { + "v": 10, + "d": "Times ceil(log256(exponent)) for the EXP instruction." + }, + + "sha3Gas": { + "v": 30, + "d": "Once per SHA3 operation." + }, + "sha3WordGas": { + "v": 6, + "d": "Once per word of the SHA3 operation's data." + }, + "sloadGas": { + "v": 50, + "d": "Once per SLOAD operation." + }, + "sstoreSetGas": { + "v": 20000, + "d": "Once per SSTORE operation if the zeroness changes from zero." + }, + "sstoreResetGas": { + "v": 5000, + "d": "Once per SSTORE operation if the zeroness does not change from zero." + }, + "sstoreRefundGas": { + "v": 15000, + "d": "Once per SSTORE operation if the zeroness changes to zero." + }, + "jumpdestGas": { + "v": 1, + "d": "Refunded gas, once per SSTORE operation if the zeroness changes to zero." + }, + + "logGas": { + "v": 375, + "d": "Per LOG* operation." + }, + "logDataGas": { + "v": 8, + "d": "Per byte in a LOG* operation's data." + }, + "logTopicGas": { + "v": 375, + "d": "Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas." + }, + + "createGas": { + "v": 32000, + "d": "Once per CREATE operation & contract-creation transaction." + }, + + "callGas": { + "v": 40, + "d": "Once per CALL operation & message call transaction." + }, + "callStipend": { + "v": 2300, + "d": "Free gas given at beginning of call." + }, + "callValueTransferGas": { + "v": 9000, + "d": "Paid for CALL when the value transfor is non-zero." + }, + "callNewAccountGas": { + "v": 25000, + "d": "Paid for CALL when the destination address didn't exist prior." + }, + + "suicideRefundGas": { + "v": 24000, + "d": "Refunded following a suicide operation." + }, + + "memoryGas": { + "v": 3, + "d": "Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL." + }, + "quadCoeffDiv": { + "v": 512, + "d": "Divisor for the quadratic particle of the memory cost equation." + }, + + "createDataGas": { + "v": 200, + "d": "" + }, + "txGas": { + "v": 21000, + "d": "Per transaction. NOTE: Not payable on data of calls between transactions." + }, + "txCreation": { + "v": 32000, + "d": "the cost of creating a contract via tx" + }, + "txDataZeroGas": { + "v": 4, + "d": "Per byte of data attached to a transaction that equals zero. NOTE: Not payable on data of calls between transactions." + }, + "txDataNonZeroGas": { + "v": 68, + "d": "Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions." + }, + + "copyGas": { + "v": 3, + "d": "Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added." + }, + + "ecrecoverGas": { + "v": 3000, + "d": "" + }, + "sha256Gas": { + "v": 60, + "d": "" + }, + "sha256WordGas": { + "v": 12, + "d": "" + }, + "ripemd160Gas": { + "v": 600, + "d": "" + }, + "ripemd160WordGas": { + "v": 120, + "d": "" + }, + "identityGas": { + "v": 15, + "d": "" + }, + "identityWordGas": { + "v": 3, + "d": "" + }, + "minerReward": { + "v": "5000000000000000000", + "d": "the amount a miner get rewarded for mining a block" + }, + "ommerReward": { + "v": "625000000000000000", + "d": "The amount of wei a miner of an uncle block gets for being inculded in the blockchain" + }, + "niblingReward": { + "v": "156250000000000000", + "d": "the amount a miner gets for inculding a uncle" + }, + "homeSteadForkNumber": { + "v": 1150000, + "d": "the block that the Homestead fork started at" + }, + "homesteadRepriceForkNumber": { + "v": 2463000, + "d": "the block that the Homestead Reprice (EIP150) fork started at" + }, + "timebombPeriod": { + "v": 100000, + "d": "Exponential difficulty timebomb period" + }, + "freeBlockPeriod": { + "v": 2 + } +} + +},{}],612:[function(require,module,exports){ +'use strict'; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var createKeccakHash = require('keccak'); +var secp256k1 = require('secp256k1'); +var assert = require('assert'); +var rlp = require('rlp'); +var BN = require('bn.js'); +var createHash = require('create-hash'); +var Buffer = require('safe-buffer').Buffer; +Object.assign(exports, require('ethjs-util')); + +/** + * the max integer that this VM can handle (a ```BN```) + * @var {BN} MAX_INTEGER + */ +exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16); + +/** + * 2^256 (a ```BN```) + * @var {BN} TWO_POW256 + */ +exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16); + +/** + * Keccak-256 hash of null (a ```String```) + * @var {String} KECCAK256_NULL_S + */ +exports.KECCAK256_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'; +exports.SHA3_NULL_S = exports.KECCAK256_NULL_S; + +/** + * Keccak-256 hash of null (a ```Buffer```) + * @var {Buffer} KECCAK256_NULL + */ +exports.KECCAK256_NULL = Buffer.from(exports.KECCAK256_NULL_S, 'hex'); +exports.SHA3_NULL = exports.KECCAK256_NULL; + +/** + * Keccak-256 of an RLP of an empty array (a ```String```) + * @var {String} KECCAK256_RLP_ARRAY_S + */ +exports.KECCAK256_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'; +exports.SHA3_RLP_ARRAY_S = exports.KECCAK256_RLP_ARRAY_S; + +/** + * Keccak-256 of an RLP of an empty array (a ```Buffer```) + * @var {Buffer} KECCAK256_RLP_ARRAY + */ +exports.KECCAK256_RLP_ARRAY = Buffer.from(exports.KECCAK256_RLP_ARRAY_S, 'hex'); +exports.SHA3_RLP_ARRAY = exports.KECCAK256_RLP_ARRAY; + +/** + * Keccak-256 hash of the RLP of null (a ```String```) + * @var {String} KECCAK256_RLP_S + */ +exports.KECCAK256_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'; +exports.SHA3_RLP_S = exports.KECCAK256_RLP_S; + +/** + * Keccak-256 hash of the RLP of null (a ```Buffer```) + * @var {Buffer} KECCAK256_RLP + */ +exports.KECCAK256_RLP = Buffer.from(exports.KECCAK256_RLP_S, 'hex'); +exports.SHA3_RLP = exports.KECCAK256_RLP; + +/** + * [`BN`](https://github.com/indutny/bn.js) + * @var {Function} + */ +exports.BN = BN; + +/** + * [`rlp`](https://github.com/ethereumjs/rlp) + * @var {Function} + */ +exports.rlp = rlp; + +/** + * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/) + * @var {Object} + */ +exports.secp256k1 = secp256k1; + +/** + * Returns a buffer filled with 0s + * @method zeros + * @param {Number} bytes the number of bytes the buffer should be + * @return {Buffer} + */ +exports.zeros = function (bytes) { + return Buffer.allocUnsafe(bytes).fill(0); +}; + +/** + * Returns a zero address + * @method zeroAddress + * @return {String} + */ +exports.zeroAddress = function () { + var addressLength = 20; + var zeroAddress = exports.zeros(addressLength); + return exports.bufferToHex(zeroAddress); +}; + +/** + * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes. + * Or it truncates the beginning if it exceeds. + * @method lsetLength + * @param {Buffer|Array} msg the value to pad + * @param {Number} length the number of bytes the output should be + * @param {Boolean} [right=false] whether to start padding form the left or right + * @return {Buffer|Array} + */ +exports.setLengthLeft = exports.setLength = function (msg, length, right) { + var buf = exports.zeros(length); + msg = exports.toBuffer(msg); + if (right) { + if (msg.length < length) { + msg.copy(buf); + return buf; + } + return msg.slice(0, length); + } else { + if (msg.length < length) { + msg.copy(buf, length - msg.length); + return buf; + } + return msg.slice(-length); + } +}; + +/** + * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes. + * Or it truncates the beginning if it exceeds. + * @param {Buffer|Array} msg the value to pad + * @param {Number} length the number of bytes the output should be + * @return {Buffer|Array} + */ +exports.setLengthRight = function (msg, length) { + return exports.setLength(msg, length, true); +}; + +/** + * Trims leading zeros from a `Buffer` or an `Array` + * @param {Buffer|Array|String} a + * @return {Buffer|Array|String} + */ +exports.unpad = exports.stripZeros = function (a) { + a = exports.stripHexPrefix(a); + var first = a[0]; + while (a.length > 0 && first.toString() === '0') { + a = a.slice(1); + first = a[0]; + } + return a; +}; +/** + * Attempts to turn a value into a `Buffer`. As input it supports `Buffer`, `String`, `Number`, null/undefined, `BN` and other objects with a `toArray()` method. + * @param {*} v the value + */ +exports.toBuffer = function (v) { + if (!Buffer.isBuffer(v)) { + if (Array.isArray(v)) { + v = Buffer.from(v); + } else if (typeof v === 'string') { + if (exports.isHexString(v)) { + v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex'); + } else { + v = Buffer.from(v); + } + } else if (typeof v === 'number') { + v = exports.intToBuffer(v); + } else if (v === null || v === undefined) { + v = Buffer.allocUnsafe(0); + } else if (BN.isBN(v)) { + v = v.toArrayLike(Buffer); + } else if (v.toArray) { + // converts a BN to a Buffer + v = Buffer.from(v.toArray()); + } else { + throw new Error('invalid type'); + } + } + return v; +}; + +/** + * Converts a `Buffer` to a `Number` + * @param {Buffer} buf + * @return {Number} + * @throws If the input number exceeds 53 bits. + */ +exports.bufferToInt = function (buf) { + return new BN(exports.toBuffer(buf)).toNumber(); +}; + +/** + * Converts a `Buffer` into a hex `String` + * @param {Buffer} buf + * @return {String} + */ +exports.bufferToHex = function (buf) { + buf = exports.toBuffer(buf); + return '0x' + buf.toString('hex'); +}; + +/** + * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers. + * @param {Buffer} num + * @return {BN} + */ +exports.fromSigned = function (num) { + return new BN(num).fromTwos(256); +}; + +/** + * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers. + * @param {BN} num + * @return {Buffer} + */ +exports.toUnsigned = function (num) { + return Buffer.from(num.toTwos(256).toArray()); +}; + +/** + * Creates Keccak hash of the input + * @param {Buffer|Array|String|Number} a the input data + * @param {Number} [bits=256] the Keccak width + * @return {Buffer} + */ +exports.keccak = function (a, bits) { + a = exports.toBuffer(a); + if (!bits) bits = 256; + + return createKeccakHash('keccak' + bits).update(a).digest(); +}; + +/** + * Creates Keccak-256 hash of the input, alias for keccak(a, 256) + * @param {Buffer|Array|String|Number} a the input data + * @return {Buffer} + */ +exports.keccak256 = function (a) { + return exports.keccak(a); +}; + +/** + * Creates SHA-3 (Keccak) hash of the input [OBSOLETE] + * @param {Buffer|Array|String|Number} a the input data + * @param {Number} [bits=256] the SHA-3 width + * @return {Buffer} + */ +exports.sha3 = exports.keccak; + +/** + * Creates SHA256 hash of the input + * @param {Buffer|Array|String|Number} a the input data + * @return {Buffer} + */ +exports.sha256 = function (a) { + a = exports.toBuffer(a); + return createHash('sha256').update(a).digest(); +}; + +/** + * Creates RIPEMD160 hash of the input + * @param {Buffer|Array|String|Number} a the input data + * @param {Boolean} padded whether it should be padded to 256 bits or not + * @return {Buffer} + */ +exports.ripemd160 = function (a, padded) { + a = exports.toBuffer(a); + var hash = createHash('rmd160').update(a).digest(); + if (padded === true) { + return exports.setLength(hash, 32); + } else { + return hash; + } +}; + +/** + * Creates SHA-3 hash of the RLP encoded version of the input + * @param {Buffer|Array|String|Number} a the input data + * @return {Buffer} + */ +exports.rlphash = function (a) { + return exports.keccak(rlp.encode(a)); +}; + +/** + * Checks if the private key satisfies the rules of the curve secp256k1. + * @param {Buffer} privateKey + * @return {Boolean} + */ +exports.isValidPrivate = function (privateKey) { + return secp256k1.privateKeyVerify(privateKey); +}; + +/** + * Checks if the public key satisfies the rules of the curve secp256k1 + * and the requirements of Ethereum. + * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled + * @param {Boolean} [sanitize=false] Accept public keys in other formats + * @return {Boolean} + */ +exports.isValidPublic = function (publicKey, sanitize) { + if (publicKey.length === 64) { + // Convert to SEC1 for secp256k1 + return secp256k1.publicKeyVerify(Buffer.concat([Buffer.from([4]), publicKey])); + } + + if (!sanitize) { + return false; + } + + return secp256k1.publicKeyVerify(publicKey); +}; + +/** + * Returns the ethereum address of a given public key. + * Accepts "Ethereum public keys" and SEC1 encoded keys. + * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled + * @param {Boolean} [sanitize=false] Accept public keys in other formats + * @return {Buffer} + */ +exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) { + pubKey = exports.toBuffer(pubKey); + if (sanitize && pubKey.length !== 64) { + pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1); + } + assert(pubKey.length === 64); + // Only take the lower 160bits of the hash + return exports.keccak(pubKey).slice(-20); +}; + +/** + * Returns the ethereum public key of a given private key + * @param {Buffer} privateKey A private key must be 256 bits wide + * @return {Buffer} + */ +var privateToPublic = exports.privateToPublic = function (privateKey) { + privateKey = exports.toBuffer(privateKey); + // skip the type flag and use the X, Y points + return secp256k1.publicKeyCreate(privateKey, false).slice(1); +}; + +/** + * Converts a public key to the Ethereum format. + * @param {Buffer} publicKey + * @return {Buffer} + */ +exports.importPublic = function (publicKey) { + publicKey = exports.toBuffer(publicKey); + if (publicKey.length !== 64) { + publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1); + } + return publicKey; +}; + +/** + * ECDSA sign + * @param {Buffer} msgHash + * @param {Buffer} privateKey + * @return {Object} + */ +exports.ecsign = function (msgHash, privateKey) { + var sig = secp256k1.sign(msgHash, privateKey); + + var ret = {}; + ret.r = sig.signature.slice(0, 32); + ret.s = sig.signature.slice(32, 64); + ret.v = sig.recovery + 27; + return ret; +}; + +/** + * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call. + * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign` + * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key + * used to produce the signature. + * @param message + * @returns {Buffer} hash + */ +exports.hashPersonalMessage = function (message) { + var prefix = exports.toBuffer('\x19Ethereum Signed Message:\n' + message.length.toString()); + return exports.keccak(Buffer.concat([prefix, message])); +}; + +/** + * ECDSA public key recovery from signature + * @param {Buffer} msgHash + * @param {Number} v + * @param {Buffer} r + * @param {Buffer} s + * @return {Buffer} publicKey + */ +exports.ecrecover = function (msgHash, v, r, s) { + var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64); + var recovery = v - 27; + if (recovery !== 0 && recovery !== 1) { + throw new Error('Invalid signature v value'); + } + var senderPubKey = secp256k1.recover(msgHash, signature, recovery); + return secp256k1.publicKeyConvert(senderPubKey, false).slice(1); +}; + +/** + * Convert signature parameters into the format of `eth_sign` RPC method + * @param {Number} v + * @param {Buffer} r + * @param {Buffer} s + * @return {String} sig + */ +exports.toRpcSig = function (v, r, s) { + // NOTE: with potential introduction of chainId this might need to be updated + if (v !== 27 && v !== 28) { + throw new Error('Invalid recovery id'); + } + + // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin + // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053 + return exports.bufferToHex(Buffer.concat([exports.setLengthLeft(r, 32), exports.setLengthLeft(s, 32), exports.toBuffer(v - 27)])); +}; + +/** + * Convert signature format of the `eth_sign` RPC method to signature parameters + * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053 + * @param {String} sig + * @return {Object} + */ +exports.fromRpcSig = function (sig) { + sig = exports.toBuffer(sig); + + // NOTE: with potential introduction of chainId this might need to be updated + if (sig.length !== 65) { + throw new Error('Invalid signature length'); + } + + var v = sig[64]; + // support both versions of `eth_sign` responses + if (v < 27) { + v += 27; + } + + return { + v: v, + r: sig.slice(0, 32), + s: sig.slice(32, 64) + }; +}; + +/** + * Returns the ethereum address of a given private key + * @param {Buffer} privateKey A private key must be 256 bits wide + * @return {Buffer} + */ +exports.privateToAddress = function (privateKey) { + return exports.publicToAddress(privateToPublic(privateKey)); +}; + +/** + * Checks if the address is a valid. Accepts checksummed addresses too + * @param {String} address + * @return {Boolean} + */ +exports.isValidAddress = function (address) { + return (/^0x[0-9a-fA-F]{40}$/.test(address) + ); +}; + +/** + * Checks if a given address is a zero address + * @method isZeroAddress + * @param {String} address + * @return {Boolean} + */ +exports.isZeroAddress = function (address) { + var zeroAddress = exports.zeroAddress(); + return zeroAddress === exports.addHexPrefix(address); +}; + +/** + * Returns a checksummed address + * @param {String} address + * @return {String} + */ +exports.toChecksumAddress = function (address) { + address = exports.stripHexPrefix(address).toLowerCase(); + var hash = exports.keccak(address).toString('hex'); + var ret = '0x'; + + for (var i = 0; i < address.length; i++) { + if (parseInt(hash[i], 16) >= 8) { + ret += address[i].toUpperCase(); + } else { + ret += address[i]; + } + } + + return ret; +}; + +/** + * Checks if the address is a valid checksummed address + * @param {Buffer} address + * @return {Boolean} + */ +exports.isValidChecksumAddress = function (address) { + return exports.isValidAddress(address) && exports.toChecksumAddress(address) === address; +}; + +/** + * Generates an address of a newly created contract + * @param {Buffer} from the address which is creating this new address + * @param {Buffer} nonce the nonce of the from account + * @return {Buffer} + */ +exports.generateAddress = function (from, nonce) { + from = exports.toBuffer(from); + nonce = new BN(nonce); + + if (nonce.isZero()) { + // in RLP we want to encode null in the case of zero nonce + // read the RLP documentation for an answer if you dare + nonce = null; + } else { + nonce = Buffer.from(nonce.toArray()); + } + + // Only take the lower 160bits of the hash + return exports.rlphash([from, nonce]).slice(-20); +}; + +/** + * Returns true if the supplied address belongs to a precompiled account (Byzantium) + * @param {Buffer|String} address + * @return {Boolean} + */ +exports.isPrecompiled = function (address) { + var a = exports.unpad(address); + return a.length === 1 && a[0] >= 1 && a[0] <= 8; +}; + +/** + * Adds "0x" to a given `String` if it does not already start with "0x" + * @param {String} str + * @return {String} + */ +exports.addHexPrefix = function (str) { + if (typeof str !== 'string') { + return str; + } + + return exports.isHexPrefixed(str) ? str : '0x' + str; +}; + +/** + * Validate ECDSA signature + * @method isValidSignature + * @param {Buffer} v + * @param {Buffer} r + * @param {Buffer} s + * @param {Boolean} [homestead=true] + * @return {Boolean} + */ + +exports.isValidSignature = function (v, r, s, homestead) { + var SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16); + var SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16); + + if (r.length !== 32 || s.length !== 32) { + return false; + } + + if (v !== 27 && v !== 28) { + return false; + } + + r = new BN(r); + s = new BN(s); + + if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) { + return false; + } + + if (homestead === false && new BN(s).cmp(SECP256K1_N_DIV_2) === 1) { + return false; + } + + return true; +}; + +/** + * Converts a `Buffer` or `Array` to JSON + * @param {Buffer|Array} ba + * @return {Array|String|null} + */ +exports.baToJSON = function (ba) { + if (Buffer.isBuffer(ba)) { + return '0x' + ba.toString('hex'); + } else if (ba instanceof Array) { + var array = []; + for (var i = 0; i < ba.length; i++) { + array.push(exports.baToJSON(ba[i])); + } + return array; + } +}; + +/** + * Defines properties on a `Object`. It make the assumption that underlying data is binary. + * @param {Object} self the `Object` to define properties on + * @param {Array} fields an array fields to define. Fields can contain: + * * `name` - the name of the properties + * * `length` - the number of bytes the field can have + * * `allowLess` - if the field can be less than the length + * * `allowEmpty` + * @param {*} data data to be validated against the definitions + */ +exports.defineProperties = function (self, fields, data) { + self.raw = []; + self._fields = []; + + // attach the `toJSON` + self.toJSON = function (label) { + if (label) { + var obj = {}; + self._fields.forEach(function (field) { + obj[field] = '0x' + self[field].toString('hex'); + }); + return obj; + } + return exports.baToJSON(this.raw); + }; + + self.serialize = function serialize() { + return rlp.encode(self.raw); + }; + + fields.forEach(function (field, i) { + self._fields.push(field.name); + function getter() { + return self.raw[i]; + } + function setter(v) { + v = exports.toBuffer(v); + + if (v.toString('hex') === '00' && !field.allowZero) { + v = Buffer.allocUnsafe(0); + } + + if (field.allowLess && field.length) { + v = exports.stripZeros(v); + assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes'); + } else if (!(field.allowZero && v.length === 0) && field.length) { + assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length); + } + + self.raw[i] = v; + } + + Object.defineProperty(self, field.name, { + enumerable: true, + configurable: true, + get: getter, + set: setter + }); + + if (field.default) { + self[field.name] = field.default; + } + + // attach alias + if (field.alias) { + Object.defineProperty(self, field.alias, { + enumerable: false, + configurable: true, + set: setter, + get: getter + }); + } + }); + + // if the constuctor is passed data + if (data) { + if (typeof data === 'string') { + data = Buffer.from(exports.stripHexPrefix(data), 'hex'); + } + + if (Buffer.isBuffer(data)) { + data = rlp.decode(data); + } + + if (Array.isArray(data)) { + if (data.length > self._fields.length) { + throw new Error('wrong number of fields in data'); + } + + // make sure all the items are buffers + data.forEach(function (d, i) { + self[self._fields[i]] = exports.toBuffer(d); + }); + } else if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object') { + var keys = Object.keys(data); + fields.forEach(function (field) { + if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]; + if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]; + }); + } else { + throw new Error('invalid data'); + } + } +}; +},{"assert":35,"bn.js":66,"create-hash":466,"ethjs-util":707,"keccak":868,"rlp":1331,"safe-buffer":1334,"secp256k1":1339}],613:[function(require,module,exports){ +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var assert = require('assert'); +var utils = require('ethereumjs-util'); + +var BYTE_SIZE = 256; + +module.exports = function () { + /** + * Represents a Bloom + * @constructor + * @param {Buffer} bitvector + */ + function Bloom(bitvector) { + _classCallCheck(this, Bloom); + + if (!bitvector) { + this.bitvector = utils.zeros(BYTE_SIZE); + } else { + assert(bitvector.length === BYTE_SIZE, 'bitvectors must be 2048 bits long'); + this.bitvector = bitvector; + } + } + + /** + * adds an element to a bit vector of a 64 byte bloom filter + * @method add + * @param {Buffer} e the element to add + */ + + + _createClass(Bloom, [{ + key: 'add', + value: function add(e) { + e = utils.keccak256(e); + var mask = 2047; // binary 11111111111 + + for (var i = 0; i < 3; i++) { + var first2bytes = e.readUInt16BE(i * 2); + var loc = mask & first2bytes; + var byteLoc = loc >> 3; + var bitLoc = 1 << loc % 8; + this.bitvector[BYTE_SIZE - byteLoc - 1] |= bitLoc; + } + } + + /** + * checks if an element is in the bloom + * @method check + * @param {Buffer} e the element to check + * @returns {boolean} Returns {@code true} if the element is in the bloom + */ + + }, { + key: 'check', + value: function check(e) { + e = utils.keccak256(e); + var mask = 2047; // binary 11111111111 + var match = true; + + for (var i = 0; i < 3 && match; i++) { + var first2bytes = e.readUInt16BE(i * 2); + var loc = mask & first2bytes; + var byteLoc = loc >> 3; + var bitLoc = 1 << loc % 8; + match = this.bitvector[BYTE_SIZE - byteLoc - 1] & bitLoc; + } + + return Boolean(match); + } + + /** + * checks if multiple topics are in a bloom + * @method multiCheck + * @param {Buffer} topics + * @returns {boolean} Returns {@code true} if every topic is in the bloom + */ + + }, { + key: 'multiCheck', + value: function multiCheck(topics) { + var _this = this; + + return topics.every(function (t) { + return _this.check(t); + }); + } + + /** + * bitwise or blooms together + * @method or + * @param {Bloom} bloom + */ + + }, { + key: 'or', + value: function or(bloom) { + if (bloom) { + for (var i = 0; i <= BYTE_SIZE; i++) { + this.bitvector[i] = this.bitvector[i] | bloom.bitvector[i]; + } + } + } + }]); + + return Bloom; +}(); +},{"assert":35,"ethereumjs-util":640}],614:[function(require,module,exports){ +'use strict'; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var Buffer = require('safe-buffer').Buffer; +var Tree = require('functional-red-black-tree'); +var Account = require('ethereumjs-account'); +var async = require('async'); + +module.exports = function () { + function Cache(trie) { + _classCallCheck(this, Cache); + + this._cache = Tree(); + this._checkpoints = []; + this._trie = trie; + } + + /** + * Puts account to cache under its address. + * @param {Buffer} key - Address of account + * @param {Account} val - Account + * @param {bool} [fromTrie] + */ + + + _createClass(Cache, [{ + key: 'put', + value: function put(key, val) { + var fromTrie = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + + var modified = !fromTrie; + this._update(key, val, modified, false); + } + + /** + * Returns the queried account or an empty account. + * @param {Buffer} key - Address of account + */ + + }, { + key: 'get', + value: function get(key) { + var account = this.lookup(key); + if (!account) { + account = new Account(); + } + return account; + } + + /** + * Returns the queried account or undefined. + * @param {buffer} key - Address of account + */ + + }, { + key: 'lookup', + value: function lookup(key) { + key = key.toString('hex'); + + var it = this._cache.find(key); + if (it.node) { + var account = new Account(it.value.val); + return account; + } + } + + /** + * Looks up address in underlying trie. + * @param {Buffer} address - Address of account + * @param {Function} cb - Callback with params (err, account) + */ + + }, { + key: '_lookupAccount', + value: function _lookupAccount(address, cb) { + this._trie.get(address, function (err, raw) { + if (err) return cb(err); + var account = new Account(raw); + cb(null, account); + }); + } + + /** + * Looks up address in cache, if not found, looks it up + * in the underlying trie. + * @param {Buffer} key - Address of account + * @param {Function} cb - Callback with params (err, account) + */ + + }, { + key: 'getOrLoad', + value: function getOrLoad(key, cb) { + var _this = this; + + var account = this.lookup(key); + if (account) { + async.nextTick(cb, null, account); + } else { + this._lookupAccount(key, function (err, account) { + if (err) return cb(err); + _this._update(key, account, false, false); + cb(null, account); + }); + } + } + + /** + * Warms cache by loading their respective account from trie + * and putting them in cache. + * @param {Array} addresses - Array of addresses + * @param {Function} cb - Callback + */ + + }, { + key: 'warm', + value: function warm(addresses, cb) { + var _this2 = this; + + // shim till async supports iterators + var accountArr = []; + addresses.forEach(function (val) { + if (val) accountArr.push(val); + }); + + async.eachSeries(accountArr, function (addressHex, done) { + var address = Buffer.from(addressHex, 'hex'); + _this2._lookupAccount(address, function (err, account) { + if (err) return done(err); + _this2._update(address, account, false, false); + done(); + }); + }, cb); + } + + /** + * Flushes cache by updating accounts that have been modified + * and removing accounts that have been deleted. + * @param {function} cb - Callback + */ + + }, { + key: 'flush', + value: function flush(cb) { + var _this3 = this; + + var it = this._cache.begin; + var next = true; + async.whilst(function () { + return next; + }, function (done) { + if (it.value && it.value.modified) { + it.value.modified = false; + it.value.val = it.value.val.serialize(); + _this3._trie.put(Buffer.from(it.key, 'hex'), it.value.val, function () { + next = it.hasNext; + it.next(); + done(); + }); + } else if (it.value && it.value.deleted) { + it.value.modified = false; + it.value.deleted = false; + it.value.val = new Account().serialize(); + _this3._trie.del(Buffer.from(it.key, 'hex'), function () { + next = it.hasNext; + it.next(); + done(); + }); + } else { + next = it.hasNext; + it.next(); + async.nextTick(done); + } + }, cb); + } + + /** + * Marks current state of cache as checkpoint, which can + * later on be reverted or commited. + */ + + }, { + key: 'checkpoint', + value: function checkpoint() { + this._checkpoints.push(this._cache); + } + + /** + * Revert changes to cache last checkpoint (no effect on trie). + */ + + }, { + key: 'revert', + value: function revert() { + this._cache = this._checkpoints.pop(); + } + + /** + * Commits to current state of cache (no effect on trie). + */ + + }, { + key: 'commit', + value: function commit() { + this._checkpoints.pop(); + } + + /** + * Clears cache. + */ + + }, { + key: 'clear', + value: function clear() { + this._cache = Tree(); + } + + /** + * Marks address as deleted in cache. + * @params {Buffer} key - Address + */ + + }, { + key: 'del', + value: function del(key) { + this._update(key, new Account(), false, true); + } + }, { + key: '_update', + value: function _update(key, val, modified, deleted) { + key = key.toString('hex'); + var it = this._cache.find(key); + if (it.node) { + this._cache = it.update({ + val: val, + modified: modified, + deleted: deleted + }); + } else { + this._cache = this._cache.insert(key, { + val: val, + modified: modified, + deleted: deleted + }); + } + } + }]); + + return Cache; +}(); +},{"async":42,"ethereumjs-account":585,"functional-red-black-tree":725,"safe-buffer":1334}],615:[function(require,module,exports){ +'use strict'; + +var ERROR = { + OUT_OF_GAS: 'out of gas', + STACK_UNDERFLOW: 'stack underflow', + STACK_OVERFLOW: 'stack overflow', + INVALID_JUMP: 'invalid JUMP', + INVALID_OPCODE: 'invalid opcode', + REVERT: 'revert', + STATIC_STATE_CHANGE: 'static state change', + INTERNAL_ERROR: 'internal error' +}; + +function VmError(error) { + this.error = error; + this.errorType = 'VmError'; +} + +module.exports = { + ERROR: ERROR, + VmError: VmError +}; +},{}],616:[function(require,module,exports){ +'use strict'; + +var Buffer = require('safe-buffer').Buffer; +var utils = require('ethereumjs-util'); + +module.exports = { + fake: true, + getBlock: function getBlock(blockTag, cb) { + var _hash; + + if (Buffer.isBuffer(blockTag)) { + _hash = utils.keccak256(blockTag); + } else if (Number.isInteger(blockTag)) { + _hash = utils.keccak256('0x' + utils.toBuffer(blockTag).toString('hex')); + } else { + return cb(new Error('Unknown blockTag type')); + } + + var block = { + hash: function hash() { + return _hash; + } + }; + + cb(null, block); + }, + + delBlock: function delBlock(hash, cb) { + cb(null); + }, + + iterator: function iterator(name, onBlock, cb) { + cb(null); + } +}; +},{"ethereumjs-util":640,"safe-buffer":1334}],617:[function(require,module,exports){ +'use strict'; + +var Buffer = require('safe-buffer').Buffer; +var util = require('util'); +var ethUtil = require('ethereumjs-util'); +var StateManager = require('./stateManager.js'); +var Common = require('ethereumjs-common').default; +var Account = require('ethereumjs-account'); +var AsyncEventEmitter = require('async-eventemitter'); +var Trie = require('merkle-patricia-tree/secure.js'); +var fakeBlockchain = require('./fakeBlockChain.js'); +var BN = ethUtil.BN; + +// require the precompiled contracts +var num01 = require('./precompiled/01-ecrecover.js'); +var num02 = require('./precompiled/02-sha256.js'); +var num03 = require('./precompiled/03-ripemd160.js'); +var num04 = require('./precompiled/04-identity.js'); +var num05 = require('./precompiled/05-modexp.js'); +var num06 = require('./precompiled/06-ecadd.js'); +var num07 = require('./precompiled/07-ecmul.js'); +var num08 = require('./precompiled/08-ecpairing.js'); + +module.exports = VM; + +VM.deps = { + ethUtil: ethUtil, + Account: require('ethereumjs-account'), + Trie: require('merkle-patricia-tree'), + rlp: require('ethereumjs-util').rlp + + /** + * VM Class, `new VM(opts)` creates a new VM object + * @method VM + * @param {Object} opts + * @param {StateManager} opts.stateManager a [`StateManager`](stateManager.md) instance to use as the state store (Beta API) + * @param {Trie} opts.state a merkle-patricia-tree instance for the state tree (ignored if stateManager is passed) + * @param {Blockchain} opts.blockchain a blockchain object for storing/retrieving blocks (ignored if stateManager is passed) + * @param {String|Number} opts.chain the chain the VM operates on [default: 'mainnet'] + * @param {String} opts.hardfork hardfork rules to be used [default: 'byzantium', supported: 'byzantium', 'constantinople', 'petersburg' (will throw on unsupported)] + * @param {Boolean} opts.activatePrecompiles create entries in the state tree for the precompiled contracts + * @param {Boolean} opts.allowUnlimitedContractSize allows unlimited contract sizes while debugging. By setting this to `true`, the check for contract size limit of 24KB (see [EIP-170](https://git.io/vxZkK)) is bypassed. (default: `false`; ONLY set to `true` during debugging) + * @param {Boolean} opts.emitFreeLogs Changes the behavior of the LOG opcode, the gas cost of the opcode becomes zero and calling it using STATICCALL won't throw. (default: `false`; ONLY set to `true` during debugging) + */ +};function VM() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + this.opts = opts; + + var chain = opts.chain ? opts.chain : 'mainnet'; + var hardfork = opts.hardfork ? opts.hardfork : 'byzantium'; + var supportedHardforks = ['byzantium', 'constantinople', 'petersburg']; + this._common = new Common(chain, hardfork, supportedHardforks); + + if (opts.stateManager) { + this.stateManager = opts.stateManager; + } else { + var trie = opts.state || new Trie(); + if (opts.activatePrecompiles) { + for (var i = 1; i <= 8; i++) { + trie.put(new BN(i).toArrayLike(Buffer, 'be', 20), new Account().serialize()); + } + } + this.stateManager = new StateManager({ trie: trie, common: this._common }); + } + + this.blockchain = opts.blockchain || fakeBlockchain; + + this.allowUnlimitedContractSize = opts.allowUnlimitedContractSize === undefined ? false : opts.allowUnlimitedContractSize; + this.emitFreeLogs = opts.emitFreeLogs === undefined ? false : opts.emitFreeLogs; + + // precompiled contracts + this._precompiled = {}; + this._precompiled['0000000000000000000000000000000000000001'] = num01; + this._precompiled['0000000000000000000000000000000000000002'] = num02; + this._precompiled['0000000000000000000000000000000000000003'] = num03; + this._precompiled['0000000000000000000000000000000000000004'] = num04; + this._precompiled['0000000000000000000000000000000000000005'] = num05; + this._precompiled['0000000000000000000000000000000000000006'] = num06; + this._precompiled['0000000000000000000000000000000000000007'] = num07; + this._precompiled['0000000000000000000000000000000000000008'] = num08; + + AsyncEventEmitter.call(this); +} + +util.inherits(VM, AsyncEventEmitter); + +VM.prototype.runCode = require('./runCode.js'); +VM.prototype.runJIT = require('./runJit.js'); +VM.prototype.runBlock = require('./runBlock.js'); +VM.prototype.runTx = require('./runTx.js'); +VM.prototype.runCall = require('./runCall.js'); +VM.prototype.runBlockchain = require('./runBlockchain.js'); + +VM.prototype.copy = function () { + return new VM({ stateManager: this.stateManager.copy(), blockchain: this.blockchain }); +}; +},{"./fakeBlockChain.js":616,"./precompiled/01-ecrecover.js":618,"./precompiled/02-sha256.js":619,"./precompiled/03-ripemd160.js":620,"./precompiled/04-identity.js":621,"./precompiled/05-modexp.js":622,"./precompiled/06-ecadd.js":623,"./precompiled/07-ecmul.js":624,"./precompiled/08-ecpairing.js":625,"./runBlock.js":626,"./runBlockchain.js":627,"./runCall.js":628,"./runCode.js":629,"./runJit.js":630,"./runTx.js":631,"./stateManager.js":632,"async-eventemitter":39,"ethereumjs-account":585,"ethereumjs-common":609,"ethereumjs-util":640,"merkle-patricia-tree":947,"merkle-patricia-tree/secure.js":953,"safe-buffer":1334,"util":1439}],618:[function(require,module,exports){ +(function (Buffer){ +'use strict'; + +var utils = require('ethereumjs-util'); +var BN = utils.BN; +var error = require('../exceptions.js').ERROR; +var assert = require('assert'); + +module.exports = function (opts) { + assert(opts.data); + + var results = {}; + + results.gasUsed = new BN(opts._common.param('gasPrices', 'ecRecover')); + + if (opts.gasLimit.lt(results.gasUsed)) { + results.return = Buffer.alloc(0); + results.gasUsed = opts.gasLimit; + results.exception = 0; // 0 means VM fail (in this case because of OOG) + results.exceptionError = error.OUT_OF_GAS; + return results; + } + + var data = utils.setLengthRight(opts.data, 128); + + var msgHash = data.slice(0, 32); + var v = data.slice(32, 64); + var r = data.slice(64, 96); + var s = data.slice(96, 128); + + var publicKey; + try { + publicKey = utils.ecrecover(msgHash, new BN(v).toNumber(), r, s); + } catch (e) { + results.return = Buffer.alloc(0); + results.exception = 1; + return results; + } + + results.return = utils.setLengthLeft(utils.publicToAddress(publicKey), 32); + results.exception = 1; + + return results; +}; +}).call(this,require("buffer").Buffer) +},{"../exceptions.js":615,"assert":35,"buffer":113,"ethereumjs-util":640}],619:[function(require,module,exports){ +(function (Buffer){ +'use strict'; + +var utils = require('ethereumjs-util'); +var BN = utils.BN; +var error = require('../exceptions.js').ERROR; +var assert = require('assert'); + +module.exports = function (opts) { + assert(opts.data); + + var results = {}; + var data = opts.data; + + results.gasUsed = new BN(opts._common.param('gasPrices', 'sha256')); + results.gasUsed.iadd(new BN(opts._common.param('gasPrices', 'sha256Word')).imuln(Math.ceil(data.length / 32))); + + if (opts.gasLimit.lt(results.gasUsed)) { + results.return = Buffer.alloc(0); + results.gasUsed = opts.gasLimit; + results.exceptionError = error.OUT_OF_GAS; + results.exception = 0; // 0 means VM fail (in this case because of OOG) + return results; + } + + results.return = utils.sha256(data); + results.exception = 1; + + return results; +}; +}).call(this,require("buffer").Buffer) +},{"../exceptions.js":615,"assert":35,"buffer":113,"ethereumjs-util":640}],620:[function(require,module,exports){ +(function (Buffer){ +'use strict'; + +var utils = require('ethereumjs-util'); +var BN = utils.BN; +var error = require('../exceptions.js').ERROR; +var assert = require('assert'); + +module.exports = function (opts) { + assert(opts.data); + + var results = {}; + var data = opts.data; + + results.gasUsed = new BN(opts._common.param('gasPrices', 'ripemd160')); + results.gasUsed.iadd(new BN(opts._common.param('gasPrices', 'ripemd160Word')).imuln(Math.ceil(data.length / 32))); + + if (opts.gasLimit.lt(results.gasUsed)) { + results.return = Buffer.alloc(0); + results.gasUsed = opts.gasLimit; + results.exceptionError = error.OUT_OF_GAS; + results.exception = 0; // 0 means VM fail (in this case because of OOG) + return results; + } + + results.return = utils.ripemd160(data, true); + results.exception = 1; + + return results; +}; +}).call(this,require("buffer").Buffer) +},{"../exceptions.js":615,"assert":35,"buffer":113,"ethereumjs-util":640}],621:[function(require,module,exports){ +(function (Buffer){ +'use strict'; + +var utils = require('ethereumjs-util'); +var BN = utils.BN; +var error = require('../exceptions.js').ERROR; +var assert = require('assert'); + +module.exports = function (opts) { + assert(opts.data); + + var results = {}; + var data = opts.data; + + results.gasUsed = new BN(opts._common.param('gasPrices', 'identity')); + results.gasUsed.iadd(new BN(opts._common.param('gasPrices', 'identityWord')).imuln(Math.ceil(data.length / 32))); + + if (opts.gasLimit.lt(results.gasUsed)) { + results.return = Buffer.alloc(0); + results.gasUsed = opts.gasLimit; + results.exceptionError = error.OUT_OF_GAS; + results.exception = 0; // 0 means VM fail (in this case because of OOG) + return results; + } + + results.return = data; + results.exception = 1; + + return results; +}; +}).call(this,require("buffer").Buffer) +},{"../exceptions.js":615,"assert":35,"buffer":113,"ethereumjs-util":640}],622:[function(require,module,exports){ +(function (Buffer){ +'use strict'; + +var utils = require('ethereumjs-util'); +var BN = utils.BN; +var error = require('../exceptions.js').ERROR; +var assert = require('assert'); + +function multComplexity(x) { + var fac1; + var fac2; + if (x.lten(64)) { + return x.sqr(); + } else if (x.lten(1024)) { + // return Math.floor(Math.pow(x, 2) / 4) + 96 * x - 3072 + fac1 = x.sqr().divn(4); + fac2 = x.muln(96); + return fac1.add(fac2).subn(3072); + } else { + // return Math.floor(Math.pow(x, 2) / 16) + 480 * x - 199680 + fac1 = x.sqr().divn(16); + fac2 = x.muln(480); + return fac1.add(fac2).subn(199680); + } +} + +function getAdjustedExponentLength(data) { + var expBytesStart; + try { + var baseLen = new BN(data.slice(0, 32)).toNumber(); + expBytesStart = 96 + baseLen; // 96 for base length, then exponent length, and modulus length, then baseLen for the base data, then exponent bytes start + } catch (e) { + expBytesStart = Number.MAX_SAFE_INTEGER - 32; + } + var expLen = new BN(data.slice(32, 64)); + var firstExpBytes = Buffer.from(data.slice(expBytesStart, expBytesStart + 32)); // first word of the exponent data + firstExpBytes = utils.setLengthRight(firstExpBytes, 32); // reading past the data reads virtual zeros + firstExpBytes = new BN(firstExpBytes); + var max32expLen = 0; + if (expLen.ltn(32)) { + max32expLen = 32 - expLen.toNumber(); + } + firstExpBytes = firstExpBytes.shrn(8 * Math.max(max32expLen, 0)); + + var bitLen = -1; + while (firstExpBytes.gtn(0)) { + bitLen = bitLen + 1; + firstExpBytes = firstExpBytes.ushrn(1); + } + var expLenMinus32OrZero = expLen.subn(32); + if (expLenMinus32OrZero.ltn(0)) { + expLenMinus32OrZero = new BN(0); + } + var eightTimesExpLenMinus32OrZero = expLenMinus32OrZero.muln(8); + var adjustedExpLen = eightTimesExpLenMinus32OrZero; + if (bitLen > 0) { + adjustedExpLen.iaddn(bitLen); + } + return adjustedExpLen; +} + +// Taken from https://stackoverflow.com/a/1503019 +function expmod(B, E, M) { + if (E.isZero()) return new BN(1).mod(M); + var BM = B.mod(M); + var R = expmod(BM, E.divn(2), M); + R = R.mul(R).mod(M); + if (E.mod(new BN(2)).isZero()) return R; + return R.mul(BM).mod(M); +} + +function getOOGResults(opts, results) { + results.return = Buffer.alloc(0); + results.gasUsed = opts.gasLimit; + results.exception = 0; // 0 means VM fail (in this case because of OOG) + results.exceptionError = error.OUT_OF_GAS; + return results; +} + +module.exports = function (opts) { + assert(opts.data); + + var results = {}; + var data = opts.data; + + var adjustedELen = getAdjustedExponentLength(data); + if (adjustedELen.ltn(1)) { + adjustedELen = new BN(1); + } + + var bLen = new BN(data.slice(0, 32)); + var eLen = new BN(data.slice(32, 64)); + var mLen = new BN(data.slice(64, 96)); + + var maxLen = bLen; + if (maxLen.lt(mLen)) { + maxLen = mLen; + } + var Gquaddivisor = opts._common.param('gasPrices', 'modexpGquaddivisor'); + var gasUsed = adjustedELen.mul(multComplexity(maxLen)).divn(Gquaddivisor); + + if (opts.gasLimit.lt(gasUsed)) { + return getOOGResults(opts, results); + } + + results.gasUsed = gasUsed; + + if (bLen.isZero()) { + results.return = new BN(0).toArrayLike(Buffer, 'be', 1); + results.exception = 1; + return results; + } + + if (mLen.isZero()) { + results.return = Buffer.alloc(0); + results.exception = 1; + return results; + } + + var maxInt = new BN(Number.MAX_SAFE_INTEGER); + var maxSize = new BN(2147483647); // ethereumjs-util setLengthRight limitation + + if (bLen.gt(maxSize) || eLen.gt(maxSize) || mLen.gt(maxSize)) { + return getOOGResults(opts, results); + } + + var bStart = new BN(96); + var bEnd = bStart.add(bLen); + var eStart = bEnd; + var eEnd = eStart.add(eLen); + var mStart = eEnd; + var mEnd = mStart.add(mLen); + + if (mEnd.gt(maxInt)) { + return getOOGResults(opts, results); + } + + bLen = bLen.toNumber(); + eLen = eLen.toNumber(); + mLen = mLen.toNumber(); + + var B = new BN(utils.setLengthRight(data.slice(bStart.toNumber(), bEnd.toNumber()), bLen)); + var E = new BN(utils.setLengthRight(data.slice(eStart.toNumber(), eEnd.toNumber()), eLen)); + var M = new BN(utils.setLengthRight(data.slice(mStart.toNumber(), mEnd.toNumber()), mLen)); + + // console.log('MODEXP input') + // console.log('B:', bLen, B) + // console.log('E:', eLen, E) + // console.log('M:', mLen, M) + + var R; + if (M.isZero()) { + R = new BN(0); + } else { + R = expmod(B, E, M); + } + var result = R.toArrayLike(Buffer, 'be', mLen); + + results.return = result; + results.exception = 1; + + // console.log('MODEXP output', result) + + return results; +}; +}).call(this,require("buffer").Buffer) +},{"../exceptions.js":615,"assert":35,"buffer":113,"ethereumjs-util":640}],623:[function(require,module,exports){ +(function (Buffer){ +'use strict'; + +var utils = require('ethereumjs-util'); +var BN = utils.BN; +var error = require('../exceptions.js').ERROR; +var assert = require('assert'); + +var bn128 = require('rustbn.js'); + +module.exports = function (opts) { + assert(opts.data); + + var results = {}; + var inputData = opts.data; + + results.gasUsed = new BN(opts._common.param('gasPrices', 'ecAdd')); + if (opts.gasLimit.lt(results.gasUsed)) { + results.return = Buffer.alloc(0); + results.exception = 0; + results.gasUsed = new BN(opts.gasLimit); + results.exceptionError = error.OUT_OF_GAS; + return results; + } + + var returnData = bn128.add(inputData); + + // check ecadd success or failure by comparing the output length + if (returnData.length !== 64) { + results.return = Buffer.alloc(0); + results.exception = 0; + results.gasUsed = new BN(opts.gasLimit); + results.exceptionError = error.OUT_OF_GAS; + } else { + results.return = returnData; + results.exception = 1; + } + + return results; +}; +}).call(this,require("buffer").Buffer) +},{"../exceptions.js":615,"assert":35,"buffer":113,"ethereumjs-util":640,"rustbn.js":1332}],624:[function(require,module,exports){ +(function (Buffer){ +'use strict'; + +var utils = require('ethereumjs-util'); +var ERROR = require('../exceptions.js').ERROR; +var BN = utils.BN; +var assert = require('assert'); + +var bn128 = require('rustbn.js'); + +module.exports = function (opts) { + assert(opts.data); + + var results = {}; + var inputData = opts.data; + + results.gasUsed = new BN(opts._common.param('gasPrices', 'ecMul')); + + if (opts.gasLimit.lt(results.gasUsed)) { + results.return = Buffer.alloc(0); + results.exception = 0; + results.gasUsed = new BN(opts.gasLimit); + results.exceptionError = ERROR.OUT_OF_GAS; + return results; + } + + var returnData = bn128.mul(inputData); + + // check ecmul success or failure by comparing the output length + if (returnData.length !== 64) { + results.return = Buffer.alloc(0); + results.exception = 0; + results.gasUsed = new BN(opts.gasLimit); + results.exceptionError = ERROR.OUT_OF_GAS; + } else { + results.return = returnData; + results.exception = 1; + } + + return results; +}; +}).call(this,require("buffer").Buffer) +},{"../exceptions.js":615,"assert":35,"buffer":113,"ethereumjs-util":640,"rustbn.js":1332}],625:[function(require,module,exports){ +(function (Buffer){ +'use strict'; + +var utils = require('ethereumjs-util'); +var BN = utils.BN; +var error = require('../exceptions.js').ERROR; +var assert = require('assert'); + +var bn128 = require('rustbn.js'); + +module.exports = function (opts) { + assert(opts.data); + + var results = {}; + var inputData = opts.data; + + // no need to care about non-divisible-by-192, because bn128.pairing will properly fail in that case + var inputDataSize = Math.floor(inputData.length / 192); + + var gascost = opts._common.param('gasPrices', 'ecPairing') + inputDataSize * opts._common.param('gasPrices', 'ecPairingWord'); + results.gasUsed = new BN(gascost); + + if (opts.gasLimit.ltn(gascost)) { + results.return = Buffer.alloc(0); + results.gasUsed = opts.gasLimit; + results.exceptionError = error.OUT_OF_GAS; + results.exception = 0; // 0 means VM fail (in this case because of OOG) + return results; + } + + var returnData = bn128.pairing(inputData); + + // check ecpairing success or failure by comparing the output length + if (returnData.length !== 32) { + results.return = Buffer.alloc(0); + results.gasUsed = opts.gasLimit; + results.exceptionError = error.OUT_OF_GAS; + results.exception = 0; + } else { + results.return = returnData; + results.exception = 1; + } + + return results; +}; +}).call(this,require("buffer").Buffer) +},{"../exceptions.js":615,"assert":35,"buffer":113,"ethereumjs-util":640,"rustbn.js":1332}],626:[function(require,module,exports){ +'use strict'; + +var Buffer = require('safe-buffer').Buffer; +var async = require('async'); +var ethUtil = require('ethereumjs-util'); +var Bloom = require('./bloom'); +var rlp = ethUtil.rlp; +var Trie = require('merkle-patricia-tree'); +var BN = ethUtil.BN; + +/** + * Processes the `block` running all of the transactions it contains and updating the miner's account + * @method vm.runBlock + * @param opts + * @param {Block} opts.block the [`Block`](https://github.com/ethereumjs/ethereumjs-block) to process + * @param {Boolean} opts.generate [gen=false] whether to generate the stateRoot, if false `runBlock` will check the stateRoot of the block against the Trie + * @param {runBlock~callback} cb callback + */ + +/** + * Callback for `runBlock` method + * @callback runBlock~callback + * @param {Error} error an error that may have happened or `null` + * @param {Object} results + * @param {Array} results.receipts the receipts from the transactions in the block + * @param {Array} results.results +*/ +module.exports = function (opts, cb) { + if (typeof opts === 'function' && cb === undefined) { + cb = opts; + return cb(new Error('invalid input, opts must be provided')); + } + if (!opts.block) { + return cb(new Error('invalid input, block must be provided')); + } + + var self = this; + + // parse options + var block = opts.block; + var skipBlockValidation = opts.skipBlockValidation || false; + var generateStateRoot = !!opts.generate; + var validateStateRoot = !generateStateRoot; + var bloom = new Bloom(); + var receiptTrie = new Trie(); + // the total amount of gas used processing this block + var gasUsed = new BN(0); + var checkpointedState = false; + var receipts = []; + var txResults = []; + var result; + + // run everything + async.series([beforeBlock, validateBlock, setStateRoot, checkpointState, processTransactions, payOmmersAndMiner], parseBlockResults); + + function beforeBlock(cb) { + /** + * The `beforeBlock` event + * + * @event Event: beforeBlock + * @type {Object} + * @property {Block} block emits the block that is about to be processed + */ + self.emit('beforeBlock', opts.block, cb); + } + + function afterBlock(cb) { + /** + * The `afterBlock` event + * + * @event Event: afterBlock + * @type {Object} + * @property {Object} result emits the results of processing a block + */ + self.emit('afterBlock', result, cb); + } + + function validateBlock(cb) { + if (skipBlockValidation) { + cb(); + } else { + if (new BN(block.header.gasLimit).gte(new BN('8000000000000000', 16))) { + cb(new Error('Invalid block with gas limit greater than (2^63 - 1)')); + } else { + block.validate(self.blockchain, cb); + } + } + } + + function setStateRoot(cb) { + if (opts.root) { + self.stateManager.setStateRoot(opts.root, cb); + } else { + cb(null); + } + } + + function checkpointState(cb) { + checkpointedState = true; + self.stateManager.checkpoint(cb); + } + + /** + * Processes all of the transaction in the block + * @method processTransaction + * @private + * @param {Function} cb the callback is given error if there are any + */ + function processTransactions(cb) { + var validReceiptCount = 0; + + async.eachSeries(block.transactions, processTx, cb); + + function processTx(tx, cb) { + var gasLimitIsHigherThanBlock = new BN(block.header.gasLimit).lt(new BN(tx.gasLimit).add(gasUsed)); + if (gasLimitIsHigherThanBlock) { + cb(new Error('tx has a higher gas limit than the block')); + return; + } + + // run the tx through the VM + self.runTx({ + tx: tx, + block: block + }, parseTxResult); + + function parseTxResult(err, result) { + txResults.push(result); + // var receiptResult = new BN(1) + + // abort if error + if (err) { + receipts.push(null); + cb(err); + return; + } + + gasUsed = gasUsed.add(result.gasUsed); + // combine blooms via bitwise OR + bloom.or(result.bloom); + + if (generateStateRoot) { + block.header.bloom = bloom.bitvector; + } + + var txLogs = result.vm.logs || []; + + var rawTxReceipt = [result.vm.exception ? 1 : 0, // result.vm.exception is 0 when an exception occurs, and 1 when it doesn't. TODO make this the opposite + gasUsed.toArrayLike(Buffer), result.bloom.bitvector, txLogs]; + var txReceipt = { + status: rawTxReceipt[0], + gasUsed: rawTxReceipt[1], + bitvector: rawTxReceipt[2], + logs: rawTxReceipt[3] + }; + + receipts.push(txReceipt); + receiptTrie.put(rlp.encode(validReceiptCount), rlp.encode(rawTxReceipt), function () { + validReceiptCount++; + cb(); + }); + } + } + } + + // credit all block rewards + function payOmmersAndMiner(cb) { + var ommers = block.uncleHeaders; + + // pay each ommer + async.series([rewardOmmers, rewardMiner], cb); + + function rewardOmmers(done) { + async.each(block.uncleHeaders, function (ommer, next) { + // calculate reward + var minerReward = new BN(self._common.param('pow', 'minerReward')); + var heightDiff = new BN(block.header.number).sub(new BN(ommer.number)); + var reward = new BN(8).sub(heightDiff).mul(minerReward.divn(8)); + + if (reward.ltn(0)) { + reward = new BN(0); + } + + rewardAccount(ommer.coinbase, reward, next); + }, done); + } + + function rewardMiner(done) { + // calculate nibling reward + var minerReward = new BN(self._common.param('pow', 'minerReward')); + var niblingReward = minerReward.divn(32); + var totalNiblingReward = niblingReward.muln(ommers.length); + var reward = minerReward.add(totalNiblingReward); + rewardAccount(block.header.coinbase, reward, done); + } + + function rewardAccount(address, reward, done) { + self.stateManager.getAccount(address, function (err, account) { + if (err) return done(err); + // give miner the block reward + account.balance = new BN(account.balance).add(reward); + self.stateManager.putAccount(address, account, done); + }); + } + } + + // handle results or error from block run + function parseBlockResults(err) { + if (err) { + if (checkpointedState) { + self.stateManager.revert(function () { + cb(err); + }); + } else { + cb(err); + } + return; + } + + self.stateManager.commit(function (err) { + if (err) return cb(err); + + self.stateManager.getStateRoot(function (err, stateRoot) { + if (err) return cb(err); + + // credit all block rewards + if (generateStateRoot) { + block.header.stateRoot = stateRoot; + } + + if (validateStateRoot) { + if (receiptTrie.root && receiptTrie.root.toString('hex') !== block.header.receiptTrie.toString('hex')) { + err = new Error((err || '') + 'invalid receiptTrie '); + } + if (bloom.bitvector.toString('hex') !== block.header.bloom.toString('hex')) { + err = new Error((err || '') + 'invalid bloom '); + } + if (ethUtil.bufferToInt(block.header.gasUsed) !== Number(gasUsed)) { + err = new Error((err || '') + 'invalid gasUsed '); + } + if (stateRoot.toString('hex') !== block.header.stateRoot.toString('hex')) { + err = new Error((err || '') + 'invalid block stateRoot '); + } + } + + result = { + receipts: receipts, + results: txResults, + error: err + }; + + afterBlock(cb.bind(this, err, result)); + }); + }); + } +}; +},{"./bloom":613,"async":42,"ethereumjs-util":640,"merkle-patricia-tree":947,"safe-buffer":1334}],627:[function(require,module,exports){ +'use strict'; + +var async = require('async'); + +/** + * Processes blocks and adds them to the blockchain + * @method vm.runBlockchain + * @param {Blockchain} blockchain A [blockchain](https://github.com/ethereum/ethereumjs-blockchain) that to process + * @param {Function} cb the callback function + */ +module.exports = function (blockchain, cb) { + var self = this; + var headBlock, parentState; + + // parse arguments + if (typeof blockchain === 'function') { + cb = blockchain; + blockchain = undefined; + } + + blockchain = blockchain || self.blockchain; + + // setup blockchain iterator + blockchain.iterator('vm', processBlock, cb); + function processBlock(block, reorg, cb) { + async.series([getStartingState, runBlock], cb); + + // determine starting state for block run + function getStartingState(cb) { + // if we are just starting or if a chain re-org has happened + if (!headBlock || reorg) { + blockchain.getBlock(block.header.parentHash, function (err, parentBlock) { + parentState = parentBlock.header.stateRoot; + // generate genesis state if we are at the genesis block + // we don't have the genesis state + if (!headBlock) { + return self.stateManager.generateCanonicalGenesis(cb); + } else { + cb(err); + } + }); + } else { + parentState = headBlock.header.stateRoot; + cb(); + } + } + + // run block, update head if valid + function runBlock(cb) { + self.runBlock({ + block: block, + root: parentState + }, function (err, results) { + if (err) { + // remove invalid block + blockchain.delBlock(block.header.hash(), function () { + cb(err); + }); + } else { + // set as new head block + headBlock = block; + cb(); + } + }); + } + } +}; +},{"async":42}],628:[function(require,module,exports){ +'use strict'; + +var Buffer = require('safe-buffer').Buffer; +var async = require('async'); +var ethUtil = require('ethereumjs-util'); +var BN = ethUtil.BN; +var exceptions = require('./exceptions.js'); +var StorageReader = require('./storageReader'); + +var ERROR = exceptions.ERROR; + +/** + * runs a CALL operation + * @method vm.runCall + * @private + * @param opts + * @param opts.block {Block} + * @param opts.caller {Buffer} + * @param opts.code {Buffer} this is for CALLCODE where the code to load is different than the code from the to account. + * @param opts.data {Buffer} + * @param opts.gasLimit {Buffer | BN.js } + * @param opts.gasPrice {Buffer} + * @param opts.origin {Buffer} [] + * @param opts.to {Buffer} + * @param opts.value {Buffer} + * @param {Function} cb the callback + */ +module.exports = function (opts, cb) { + var self = this; + var stateManager = self.stateManager; + + var vmResults = {}; + var toAccount; + var toAddress = opts.to; + var createdAddress; + var txValue = opts.value || Buffer.from([0]); + var caller = opts.caller; + var account; + var block = opts.block; + var code = opts.code; + var txData = opts.data; + var gasLimit = opts.gasLimit || new BN(0xffffff); + gasLimit = new BN(opts.gasLimit); // make sure is a BN + var gasPrice = opts.gasPrice; + var gasUsed = new BN(0); + var origin = opts.origin; + var isCompiled = opts.compiled; + var depth = opts.depth; + // opts.suicides is kept for backward compatiblity with pre-EIP6 syntax + var selfdestruct = opts.selfdestruct || opts.suicides; + var delegatecall = opts.delegatecall || false; + var isStatic = opts.static || false; + var salt = opts.salt || null; + var storageReader = opts.storageReader || new StorageReader(stateManager); + + txValue = new BN(txValue); + + // run and parse + async.series([checkpointState, loadFromAccount, subTxValue, loadToAccount, addTxValue, loadCode, runCode, saveCode], parseCallResult); + + function checkpointState(cb) { + stateManager.checkpoint(cb); + } + + function loadFromAccount(done) { + stateManager.getAccount(caller, function (err, fromAccount) { + account = fromAccount; + done(err); + }); + } + + function loadToAccount(done) { + // get receiver's account + if (!toAddress) { + // generate a new contract if no `to` + code = txData; + txData = undefined; + var newNonce = new BN(account.nonce).subn(1); + + if (salt) { + createdAddress = toAddress = ethUtil.generateAddress2(caller, salt, code); + } else { + createdAddress = toAddress = ethUtil.generateAddress(caller, newNonce.toArray()); + } + + checkAccountState(createdAddress, setupNewContract, done); + } else { + // else load the `to` account + stateManager.getAccount(toAddress, function (err, account) { + toAccount = account; + done(err); + }); + } + } + + function checkAccountState(address, next, done) { + stateManager.getAccount(address, function (err, account) { + if (err) { + done(err); + return; + } + + if (account.nonce && new BN(account.nonce) > 0 || account.codeHash.compare(ethUtil.KECCAK256_NULL) !== 0) { + toAccount = account; + code = new Buffer('fe', 'hex'); // Invalid init code + done(); + return; + } + + next(address, done); + }); + } + + function setupNewContract(address, done) { + stateManager.clearContractStorage(address, function (err) { + if (err) { + done(err); + return; + } + + async.series([newContractEvent, getAccount], done); + + function newContractEvent(callback) { + self.emit('newContract', { + address: address, + code: code + }, callback); + } + + function getAccount(callback) { + stateManager.getAccount(address, function (err, account) { + toAccount = account; + toAccount.nonce = new BN(toAccount.nonce).addn(1).toArrayLike(Buffer); + callback(err); + }); + } + }); + } + + function subTxValue(cb) { + if (delegatecall) { + cb(); + return; + } + var newBalance = new BN(account.balance).sub(txValue); + account.balance = newBalance; + stateManager.putAccount(ethUtil.toBuffer(caller), account, cb); + } + + function addTxValue(cb) { + if (delegatecall) { + cb(); + return; + } + // add the amount sent to the `to` account + var newBalance = new BN(toAccount.balance).add(txValue); + toAccount.balance = newBalance; + // putAccount as the nonce may have changed for contract creation + stateManager.putAccount(ethUtil.toBuffer(toAddress), toAccount, cb); + } + + function loadCode(cb) { + // loads the contract's code if the account is a contract + if (code || !(toAccount.isContract() || self._precompiled[toAddress.toString('hex')])) { + cb(); + return; + } + + if (self._precompiled[toAddress.toString('hex')]) { + isCompiled = true; + code = self._precompiled[toAddress.toString('hex')]; + cb(); + return; + } + + stateManager.getContractCode(toAddress, function (err, c, comp) { + if (err) return cb(err); + isCompiled = comp; + code = c; + cb(); + }); + } + + function runCode(cb) { + if (!code) { + vmResults.exception = 1; + stateManager.commit(cb); + return; + } + + var runCodeOpts = { + code: code, + data: txData, + gasLimit: gasLimit, + gasPrice: gasPrice, + address: toAddress, + origin: origin, + caller: caller, + value: txValue.toArrayLike(Buffer), + block: block, + depth: depth, + selfdestruct: selfdestruct, + static: isStatic, + storageReader: storageReader + + // run Code through vm + };var codeRunner = isCompiled ? self.runJIT : self.runCode; + codeRunner.call(self, runCodeOpts, parseRunResult); + + function parseRunResult(err, results) { + vmResults = results; + + if (createdAddress) { + // fee for size of the return value + var totalGas = results.gasUsed; + if (!results.runState.vmError) { + var returnFee = new BN(results.return.length * self._common.param('gasPrices', 'createData')); + totalGas = totalGas.add(returnFee); + } + // if not enough gas + if (totalGas.lte(gasLimit) && (self.allowUnlimitedContractSize || results.return.length <= 24576)) { + results.gasUsed = totalGas; + } else { + results.return = Buffer.alloc(0); + // since Homestead + results.exception = 0; + err = results.exceptionError = ERROR.OUT_OF_GAS; + results.gasUsed = gasLimit; + } + } + + gasUsed = results.gasUsed; + if (err) { + results.logs = []; + stateManager.revert(function (revertErr) { + if (revertErr || !isCompiled) cb(revertErr);else { + // Empty precompiled contracts need to be deleted even in case of OOG + // because the bug in both Geth and Parity led to deleting RIPEMD precompiled in this case + // see https://github.com/ethereum/go-ethereum/pull/3341/files#diff-2433aa143ee4772026454b8abd76b9dd + // We mark the account as touched here, so that is can be removed among other touched empty accounts (after tx finalization) + if (err === ERROR.OUT_OF_GAS || err.error === ERROR.OUT_OF_GAS) { + stateManager.getAccount(toAddress, function (getErr, acc) { + if (getErr) cb(getErr);else stateManager.putAccount(toAddress, acc, cb); + }); + } else { + cb(); + } + } + }); + } else { + stateManager.commit(cb); + } + } + } + + function saveCode(cb) { + // store code for a new contract + if (createdAddress && !vmResults.runState.vmError && vmResults.return && vmResults.return.toString() !== '') { + stateManager.putContractCode(createdAddress, vmResults.return, cb); + } else { + cb(); + } + } + + function parseCallResult(err) { + if (err) return cb(err); + var results = { + gasUsed: gasUsed, + createdAddress: createdAddress, + vm: vmResults + }; + + cb(null, results); + } +}; +},{"./exceptions.js":615,"./storageReader":633,"async":42,"ethereumjs-util":640,"safe-buffer":1334}],629:[function(require,module,exports){ +'use strict'; + +/* + +This is the core of the Ethereum Virtual Machine (EVM or just VM). + +NOTES: + +stack items are lazily duplicated. +So you must never directly change a buffer from the stack, +instead you should `copy` it first + +not all stack items are 32 bytes, so if the operation realies on the stack +item length then you must use utils.pad(, 32) first. +*/ +var Buffer = require('safe-buffer').Buffer; +var async = require('async'); +var utils = require('ethereumjs-util'); +var Block = require('ethereumjs-block'); +var lookupOpInfo = require('./vm/opcodes.js'); +var opFns = require('./vm/opFns.js'); +var exceptions = require('./exceptions.js'); +var StorageReader = require('./storageReader'); +var setImmediate = require('timers').setImmediate; +var BN = utils.BN; + +var ERROR = exceptions.ERROR; +var VmError = exceptions.VmError; + +/** + * Runs EVM code + * @method vm.runCode + * @param {Object} opts + * @param {Account} opts.account the [`Account`](https://github.com/ethereumjs/ethereumjs-account) that the executing code belongs to. If omitted an empty account will be used + * @param {Buffer} opts.address the address of the account that is executing this code. The address should be a `Buffer` of bytes. Defaults to `0` + * @param {Block} opts.block the [`Block`](https://github.com/ethereumjs/ethereumjs-block) the `tx` belongs to. If omitted a blank block will be used + * @param {Buffer} opts.caller the address that ran this code. The address should be a `Buffer` of 20bits. Defaults to `0` + * @param {Buffer} opts.code the EVM code to run given as a `Buffer` + * @param {Buffer} opts.data the input data + * @param {Buffer} opts.gasLimit the gas limit for the code + * @param {Buffer} opts.origin the address where the call originated from. The address should be a `Buffer` of 20bits. Defaults to `0` + * @param {Buffer} opts.value the value in ether that is being sent to `opt.address`. Defaults to `0` + * @param {runCode~callback} cb callback + */ + +/** + * Callback for `runCode` method + * @callback runCode~callback + * @param {Error} error an error that may have happened or `null` + * @param {Object} results + * @param {BN} results.gas the amount of gas left + * @param {BN} results.gasUsed the amount of gas as a `bignum` the code used to run + * @param {BN} results.gasRefund a `bignum` containing the amount of gas to refund from deleting storage values + * @param {Object} results.selfdestruct an `Object` with keys for accounts that have selfdestructed and values for balance transfer recipient accounts + * @param {Array} results.logs an `Array` of logs that the contract emitted + * @param {Number} results.exception `0` if the contract encountered an exception, `1` otherwise + * @param {String} results.exceptionError a `String` describing the exception if there was one + * @param {Buffer} results.return a `Buffer` containing the value that was returned by the contract +*/ +module.exports = function (opts, cb) { + var self = this; + var stateManager = self.stateManager; + + var block = opts.block || new Block(); + + // VM internal state + var runState = { + blockchain: self.blockchain, + stateManager: stateManager, + storageReader: opts.storageReader || new StorageReader(stateManager), + returnValue: false, + stopped: false, + vmError: false, + programCounter: 0, + opCode: undefined, + opName: undefined, + gasLeft: new BN(opts.gasLimit), + gasLimit: new BN(opts.gasLimit), + gasPrice: opts.gasPrice, + memory: [], + memoryWordCount: new BN(0), + stack: [], + lastReturned: [], + logs: [], + validJumps: [], + gasRefund: new BN(0), + highestMemCost: new BN(0), + depth: opts.depth || 0, + // opts.suicides is kept for backward compatiblity with pre-EIP6 syntax + selfdestruct: opts.selfdestruct || opts.suicides || {}, + block: block, + callValue: opts.value || new BN(0), + address: opts.address || utils.zeros(32), + caller: opts.caller || utils.zeros(32), + origin: opts.origin || opts.caller || utils.zeros(32), + callData: opts.data || Buffer.from([0]), + code: opts.code, + static: opts.static || false + + // temporary - to be factored out + };runState._common = self._common; + runState._precompiled = self._precompiled; + runState._vm = self; + + // prepare to run vm + preprocessValidJumps(runState); + // load contract then start vm run + loadContract(runVm); + + // iterate through the given ops until something breaks or we hit STOP + function runVm(err) { + if (err) { + return parseVmResults(err); + } + async.whilst(vmIsActive, iterateVm, parseVmResults); + } + + // ensure contract is loaded; only used if runCode is called directly + function loadContract(cb) { + stateManager.getAccount(runState.address, function (err, account) { + if (err) return cb(err); + runState.contract = account; + cb(); + }); + } + + function vmIsActive() { + var notAtEnd = runState.programCounter < runState.code.length; + + return !runState.stopped && notAtEnd && !runState.vmError && !runState.returnValue; + } + + function iterateVm(done) { + var opCode = runState.code[runState.programCounter]; + var opInfo = lookupOpInfo(opCode, false, self.emitFreeLogs); + var opName = opInfo.name; + var opFn = opFns[opName]; + + runState.opName = opName; + runState.opCode = opCode; + + async.series([runStepHook, runOp], function (err) { + setImmediate(done.bind(null, err)); + }); + + function runStepHook(cb) { + var eventObj = { + pc: runState.programCounter, + gasLeft: runState.gasLeft, + opcode: lookupOpInfo(opCode, true, self.emitFreeLogs), + stack: runState.stack, + depth: runState.depth, + address: runState.address, + account: runState.contract, + stateManager: runState.stateManager, + memory: runState.memory, + memoryWordCount: runState.memoryWordCount + /** + * The `step` event for trace output + * + * @event Event: step + * @type {Object} + * @property {Number} pc representing the program counter + * @property {String} opcode the next opcode to be ran + * @property {BN} gasLeft amount of gasLeft + * @property {Array} stack an `Array` of `Buffers` containing the stack + * @property {Account} account the [`Account`](https://github.com/ethereum/ethereumjs-account) which owns the code running + * @property {Buffer} address the address of the `account` + * @property {Number} depth the current number of calls deep the contract is + * @property {Buffer} memory the memory of the VM as a `buffer` + * @property {BN} memoryWordCount current size of memory in words + * @property {StateManager} stateManager a [`StateManager`](stateManager.md) instance (Beta API) + */ + };self.emit('step', eventObj, cb); + } + + function runOp(cb) { + // check for invalid opcode + if (opName === 'INVALID') { + return cb(new VmError(ERROR.INVALID_OPCODE)); + } + + // check for stack underflows + if (runState.stack.length < opInfo.in) { + return cb(new VmError(ERROR.STACK_UNDERFLOW)); + } + + if (runState.stack.length - opInfo.in + opInfo.out > 1024) { + return cb(new VmError(ERROR.STACK_OVERFLOW)); + } + + // calculate gas + var fee = new BN(opInfo.fee); + // TODO: move to a shared funtion; subGas in opFuns + runState.gasLeft = runState.gasLeft.sub(fee); + if (runState.gasLeft.ltn(0)) { + runState.gasLeft = new BN(0); + cb(new VmError(ERROR.OUT_OF_GAS)); + return; + } + + // advance program counter + runState.programCounter++; + var argsNum = opInfo.in; + var retNum = opInfo.out; + // pop the stack + var args = argsNum ? runState.stack.splice(-argsNum) : []; + + args.reverse(); + args.push(runState); + // create a callback for async opFunc + if (opInfo.async) { + args.push(function (err, result) { + if (err) return cb(err); + + // save result to the stack + if (result !== undefined) { + if (retNum !== 1) { + // opcode post-stack mismatch + return cb(new VmError(ERROR.INTERNAL_ERROR)); + } + + runState.stack.push(result); + } else { + if (retNum !== 0) { + // opcode post-stack mismatch + return cb(new VmError(ERROR.INTERNAL_ERROR)); + } + } + + cb(); + }); + } + + // if opcode is log and emitFreeLogs is enabled, remove static context + var prevStatic = runState.static; + if (self.emitFreeLogs && opName === 'LOG') { + runState.static = false; + } + + try { + // run the opcode + var result = opFn.apply(null, args); + } catch (e) { + if (e.errorType && e.errorType === 'VmError') { + cb(e); + return; + } else { + throw e; + } + } + + // restore previous static context + runState.static = prevStatic; + + // save result to the stack + if (result !== undefined) { + if (retNum !== 1) { + // opcode post-stack mismatch + return cb(new VmError(ERROR.INTERNAL_ERROR)); + } + + runState.stack.push(result); + } else { + if (!opInfo.async && retNum !== 0) { + // opcode post-stack mismatch + return cb(new VmError(ERROR.INTERNAL_ERROR)); + } + } + + // call the callback if opFn was sync + if (!opInfo.async) { + cb(); + } + } + } + + function parseVmResults(err) { + // remove any logs on error + if (err) { + runState.logs = []; + runState.vmError = true; + } + + var results = { + runState: runState, + selfdestruct: runState.selfdestruct, + gasRefund: runState.gasRefund, + exception: err ? 0 : 1, + exceptionError: err, + logs: runState.logs, + gas: runState.gasLeft, + 'return': runState.returnValue ? runState.returnValue : Buffer.alloc(0) + }; + + if (results.exceptionError) { + delete results.gasRefund; + delete results.selfdestruct; + } + + if (err && err.error !== ERROR.REVERT) { + results.gasUsed = runState.gasLimit; + } else { + results.gasUsed = runState.gasLimit.sub(runState.gasLeft); + } + + cb(err, results); + } +}; + +// find all the valid jumps and puts them in the `validJumps` array +function preprocessValidJumps(runState) { + for (var i = 0; i < runState.code.length; i++) { + var curOpCode = lookupOpInfo(runState.code[i]).name; + + // no destinations into the middle of PUSH + if (curOpCode === 'PUSH') { + i += runState.code[i] - 0x5f; + } + + if (curOpCode === 'JUMPDEST') { + runState.validJumps.push(i); + } + } +} +},{"./exceptions.js":615,"./storageReader":633,"./vm/opFns.js":635,"./vm/opcodes.js":636,"async":42,"ethereumjs-block":638,"ethereumjs-util":640,"safe-buffer":1334,"timers":1415}],630:[function(require,module,exports){ +'use strict'; + +module.exports = function (opts, cb) { + // for precompiled + var results; + if (typeof opts.code === 'function') { + opts._common = this._common; + results = opts.code(opts); + results.account = opts.account; + cb(results.exceptionError, results); + } else { + var f = new Function('require', 'opts', opts.code.toString()); // eslint-disable-line + results = f(require, opts); + results.account = opts.account; + cb(results.exceptionError, results); + } +}; +},{}],631:[function(require,module,exports){ +'use strict'; + +var Buffer = require('safe-buffer').Buffer; +var async = require('async'); +var utils = require('ethereumjs-util'); +var BN = utils.BN; +var Bloom = require('./bloom'); +var Block = require('ethereumjs-block'); +var Account = require('ethereumjs-account'); +var StorageReader = require('./storageReader'); + +/** + * Process a transaction. Run the vm. Transfers eth. Checks balances. + * @method vm.runTx + * @param opts + * @param {Transaction} opts.tx a [`Transaction`](https://github.com/ethereum/ethereumjs-tx) to run + * @param {Boolean} opts.skipNonce skips the nonce check + * @param {Boolean} opts.skipBalance skips the balance check + * @param {Block} opts.block the block to which the `tx` belongs, if no block is given a default one is created + * @param {runTx~callback} cb the callback + */ + +/** + * Callback for `runTx` method + * @callback runTx~callback + * @param {Error} error an error that may have happened or `null` + * @param {Object} results + * @param {BN} results.amountSpent the amount of ether used by this transaction as a `bignum` + * @param {BN} results.gasUsed the amount of gas as a `bignum` used by the transaction + * @param {BN} results.gasRefund the amount of gas as a `bignum` that was refunded during the transaction (i.e. `gasUsed = totalGasConsumed - gasRefund`) + * @param {VM} vm contains the results from running the code, if any, as described in `vm.runCode(params, cb)` +*/ +module.exports = function (opts, cb) { + if (typeof opts === 'function' && cb === undefined) { + cb = opts; + return cb(new Error('invalid input, opts must be provided')); + } + + var self = this; + var block = opts.block; + var tx = opts.tx; + var gasLimit; + var results; + var basefee; + var storageReader = new StorageReader(self.stateManager); + + // tx is required + if (!tx) { + return cb(new Error('invalid input, tx is required')); + } + + // create a reasonable default if no block is given + if (!block) { + block = new Block(); + } + + if (new BN(block.header.gasLimit).lt(new BN(tx.gasLimit))) { + cb(new Error('tx has a higher gas limit than the block')); + return; + } + + // run everything + async.series([checkpointState, runTxHook, updateFromAccount, runCall, runAfterTxHook], function (err) { + if (err) { + self.stateManager.revert(function () { + cb(err, results); + }); + } else { + self.stateManager.commit(function (err) { + cb(err, results); + }); + } + }); + + function checkpointState(cb) { + self.stateManager.checkpoint(cb); + } + + // run the transaction hook + function runTxHook(cb) { + /** + * The `beforeTx` event + * + * @event Event: beforeTx + * @type {Object} + * @property {Transaction} tx emits the Transaction that is about to be processed + */ + self.emit('beforeTx', tx, cb); + } + + // run the transaction hook + function runAfterTxHook(cb) { + /** + * The `afterTx` event + * + * @event Event: afterTx + * @type {Object} + * @property {Object} result result of the transaction + */ + self.emit('afterTx', results, cb); + } + + function updateFromAccount(cb) { + self.stateManager.getAccount(tx.from, function (err, fromAccount) { + if (err) { + cb(err); + return; + } + + var message; + if (!opts.skipBalance && new BN(fromAccount.balance).lt(tx.getUpfrontCost())) { + message = "sender doesn't have enough funds to send tx. The upfront cost is: " + tx.getUpfrontCost().toString() + ' and the sender\'s account only has: ' + new BN(fromAccount.balance).toString(); + cb(new Error(message)); + return; + } else if (!opts.skipNonce && !new BN(fromAccount.nonce).eq(new BN(tx.nonce))) { + message = "the tx doesn't have the correct nonce. account has nonce of: " + new BN(fromAccount.nonce).toString() + ' tx has nonce of: ' + new BN(tx.nonce).toString(); + cb(new Error(message)); + return; + } + + // increment the nonce + fromAccount.nonce = new BN(fromAccount.nonce).addn(1); + + basefee = tx.getBaseFee(); + gasLimit = new BN(tx.gasLimit); + if (gasLimit.lt(basefee)) { + return cb(new Error('base fee exceeds gas limit')); + } + gasLimit.isub(basefee); + + fromAccount.balance = new BN(fromAccount.balance).sub(new BN(tx.gasLimit).mul(new BN(tx.gasPrice))); + self.stateManager.putAccount(tx.from, fromAccount, cb); + }); + } + + // sets up the environment and runs a `call` + function runCall(cb) { + var options = { + caller: tx.from, + gasLimit: gasLimit, + gasPrice: tx.gasPrice, + to: tx.to, + value: tx.value, + data: tx.data, + block: block, + storageReader: storageReader + }; + + if (tx.to.toString('hex') === '') { + delete options.to; + } + + // run call + self.runCall(options, parseResults); + + function parseResults(err, _results) { + if (err) return cb(err); + results = _results; + + // generate the bloom for the tx + results.bloom = txLogsBloom(results.vm.logs); + + // caculate the total gas used + results.gasUsed = results.gasUsed.add(basefee); + + // process any gas refund + results.gasRefund = results.vm.gasRefund; + if (results.gasRefund) { + if (results.gasRefund.lt(results.gasUsed.divn(2))) { + results.gasUsed.isub(results.gasRefund); + } else { + results.gasUsed.isub(results.gasUsed.divn(2)); + } + } + + results.amountSpent = results.gasUsed.mul(new BN(tx.gasPrice)); + + async.series([loadFromAccount, updateFromAccount, loadMinerAccount, updateMinerAccount, cleanupAccounts], cb); + + var fromAccount; + function loadFromAccount(next) { + self.stateManager.getAccount(tx.from, function (err, account) { + fromAccount = account; + next(err); + }); + } + + function updateFromAccount(next) { + // refund the leftover gas amount + var finalFromBalance = new BN(tx.gasLimit).sub(results.gasUsed).mul(new BN(tx.gasPrice)).add(new BN(fromAccount.balance)); + fromAccount.balance = finalFromBalance; + + self.stateManager.putAccount(utils.toBuffer(tx.from), fromAccount, next); + } + + var minerAccount; + function loadMinerAccount(next) { + self.stateManager.getAccount(block.header.coinbase, function (err, account) { + minerAccount = account; + next(err); + }); + } + + function updateMinerAccount(next) { + // add the amount spent on gas to the miner's account + minerAccount.balance = new BN(minerAccount.balance).add(results.amountSpent); + + // save the miner's account + if (!new BN(minerAccount.balance).isZero()) { + self.stateManager.putAccount(block.header.coinbase, minerAccount, next); + } else { + next(); + } + } + + function cleanupAccounts(next) { + if (!results.vm.selfdestruct) { + results.vm.selfdestruct = {}; + } + + var keys = Object.keys(results.vm.selfdestruct); + + async.series([deleteSelfDestructs, cleanTouched], next); + + function deleteSelfDestructs(done) { + async.each(keys, function (s, cb) { + self.stateManager.putAccount(Buffer.from(s, 'hex'), new Account(), cb); + }, done); + } + + function cleanTouched(done) { + self.stateManager.cleanupTouchedAccounts(done); + } + } + } + } +}; + +/** + * @method txLogsBloom + * @private + */ +function txLogsBloom(logs) { + var bloom = new Bloom(); + if (logs) { + for (var i = 0; i < logs.length; i++) { + var log = logs[i]; + // add the address + bloom.add(log[0]); + // add the topics + var topics = log[1]; + for (var q = 0; q < topics.length; q++) { + bloom.add(topics[q]); + } + } + } + return bloom; +} +},{"./bloom":613,"./storageReader":633,"async":42,"ethereumjs-account":585,"ethereumjs-block":638,"ethereumjs-util":640,"safe-buffer":1334}],632:[function(require,module,exports){ +'use strict'; + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + +var Buffer = require('safe-buffer').Buffer; +var Trie = require('merkle-patricia-tree/secure.js'); +var Common = require('ethereumjs-common').default; + +var _require = require('ethereumjs-common/dist/genesisStates'), + genesisStateByName = _require.genesisStateByName; + +var async = require('async'); +var Account = require('ethereumjs-account'); +var Cache = require('./cache.js'); +var utils = require('ethereumjs-util'); +var BN = utils.BN; +var rlp = utils.rlp; + +/** + * Interface for getting and setting data from an underlying + * state trie + * @interface StateManager + */ + +module.exports = StateManager; + +/** + * Default implementation of the `StateManager` interface + * @class DefaultStateManager + * @implements StateManager + * @param {Object} [opts={}] + * @param {Common} [opts.common] - [`Common`](https://github.com/ethereumjs/ethereumjs-common) parameters of the chain + * @param {Trie} [opts.trie] - a [`merkle-patricia-tree`](https://github.com/ethereumjs/merkle-patricia-tree) instance + */ +function StateManager() { + var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + var self = this; + + var common = opts.common; + if (!common) { + common = new Common('mainnet', 'byzantium'); + } + self._common = common; + + self._trie = opts.trie || new Trie(); + self._storageTries = {}; // the storage trie cache + self._cache = new Cache(self._trie); + self._touched = new Set(); + self._touchedStack = []; + self._checkpointCount = 0; +} + +var proto = StateManager.prototype; + +/** + * Copies the current instance of the `DefaultStateManager` + * at the last fully committed point, i.e. as if all current + * checkpoints were reverted + * @memberof DefaultStateManager + * @method copy + */ +proto.copy = function () { + return new StateManager({ trie: this._trie.copy() }); +}; + +/** + * Callback for `getAccount` method + * @callback getAccount~callback + * @param {Error} error an error that may have happened or `null` + * @param {Account} account An [`ethereumjs-account`](https://github.com/ethereumjs/ethereumjs-account) + * instance corresponding to the provided `address` + */ + +/** + * Gets the [`ethereumjs-account`](https://github.com/ethereumjs/ethereumjs-account) + * associated with `address`. Returns an empty account if the account does not exist. + * @memberof StateManager + * @method getAccount + * @param {Buffer} address Address of the `account` to get + * @param {getAccount~callback} cb + */ +proto.getAccount = function (address, cb) { + this._cache.getOrLoad(address, cb); +}; + +/** + * Saves an [`ethereumjs-account`](https://github.com/ethereumjs/ethereumjs-account) + * into state under the provided `address` + * @memberof StateManager + * @method putAccount + * @param {Buffer} address Address under which to store `account` + * @param {Account} account The [`ethereumjs-account`](https://github.com/ethereumjs/ethereumjs-account) to store + * @param {Function} cb Callback function + */ +proto.putAccount = function (address, account, cb) { + var self = this; + // TODO: dont save newly created accounts that have no balance + // if (toAccount.balance.toString('hex') === '00') { + // if they have money or a non-zero nonce or code, then write to tree + self._cache.put(address, account); + self._touched.add(address.toString('hex')); + // self._trie.put(addressHex, account.serialize(), cb) + cb(); +}; + +/** + * Adds `value` to the state trie as code, and sets `codeHash` on the account + * corresponding to `address` to reference this. + * @memberof StateManager + * @method putContractCode + * @param {Buffer} address - Address of the `account` to add the `code` for + * @param {Buffer} value - The value of the `code` + * @param {Function} cb Callback function + */ +proto.putContractCode = function (address, value, cb) { + var self = this; + self.getAccount(address, function (err, account) { + if (err) { + return cb(err); + } + // TODO: setCode use trie.setRaw which creates a storage leak + account.setCode(self._trie, value, function (err) { + if (err) { + return cb(err); + } + self.putAccount(address, account, cb); + }); + }); +}; + +/** + * Callback for `getContractCode` method + * @callback getContractCode~callback + * @param {Error} error an error that may have happened or `null` + * @param {Buffer} code The code corresponding to the provided address. + * Returns an empty `Buffer` if the account has no associated code. + */ + +/** + * Gets the code corresponding to the provided `address` + * @memberof StateManager + * @method getContractCode + * @param {Buffer} address Address to get the `code` for + * @param {getContractCode~callback} cb + */ +proto.getContractCode = function (address, cb) { + var self = this; + self.getAccount(address, function (err, account) { + if (err) { + return cb(err); + } + account.getCode(self._trie, cb); + }); +}; + +/** + * Creates a storage trie from the primary storage trie + * for an account and saves this in the storage cache. + * @private + * @memberof DefaultStateManager + * @method _lookupStorageTrie + * @param {Buffer} address + * @param {Function} cb Callback function + */ +proto._lookupStorageTrie = function (address, cb) { + var self = this; + // from state trie + self.getAccount(address, function (err, account) { + if (err) { + return cb(err); + } + var storageTrie = self._trie.copy(); + storageTrie.root = account.stateRoot; + storageTrie._checkpoints = []; + cb(null, storageTrie); + }); +}; + +/** + * Gets the storage trie for an account from the storage + * cache or does a lookup + * @private + * @memberof DefaultStateManager + * @method _getStorageTrie + * @param {Buffer} address + * @param {Function} cb Callback function + */ +proto._getStorageTrie = function (address, cb) { + var self = this; + var storageTrie = self._storageTries[address.toString('hex')]; + // from storage cache + if (storageTrie) { + return cb(null, storageTrie); + } + // lookup from state + self._lookupStorageTrie(address, cb); +}; + +/** + * Callback for `getContractStorage` method + * @callback getContractStorage~callback + * @param {Error} error an error that may have happened or `null` + * @param {Buffer} storageValue The storage value for the account + * corresponding to the provided address at the provided key. + * If this does not exists an empty `Buffer` is returned + */ + +/** + * Gets the storage value associated with the provided `address` and `key` + * @memberof StateManager + * @method getContractStorage + * @param {Buffer} address Address of the account to get the storage for + * @param {Buffer} key Key in the account's storage to get the value for + * @param {getContractCode~callback} cb + */ +proto.getContractStorage = function (address, key, cb) { + var self = this; + self._getStorageTrie(address, function (err, trie) { + if (err) { + return cb(err); + } + trie.get(key, function (err, value) { + if (err) { + return cb(err); + } + var decoded = rlp.decode(value); + cb(null, decoded); + }); + }); +}; + +/** + * Modifies the storage trie of an account + * @private + * @memberof DefaultStateManager + * @method _modifyContractStorage + * @param {Buffer} address Address of the account whose storage is to be modified + * @param {Function} modifyTrie function to modify the storage trie of the account + */ +proto._modifyContractStorage = function (address, modifyTrie, cb) { + var self = this; + self._getStorageTrie(address, function (err, storageTrie) { + if (err) { + return cb(err); + } + + modifyTrie(storageTrie, finalize); + + function finalize(err) { + if (err) return cb(err); + // update storage cache + self._storageTries[address.toString('hex')] = storageTrie; + // update contract stateRoot + var contract = self._cache.get(address); + contract.stateRoot = storageTrie.root; + self.putAccount(address, contract, cb); + self._touched.add(address.toString('hex')); + } + }); +}; + +/** + * Adds value to the state trie for the `account` + * corresponding to `address` at the provided `key` + * @memberof StateManager + * @method putContractStorage + * @param {Buffer} address Address to set a storage value for + * @param {Buffer} key Key to set the value at + * @param {Buffer} value Value to set at `key` for account corresponding to `address` + * @param {Function} cb Callback function + */ +proto.putContractStorage = function (address, key, value, cb) { + var self = this; + self._modifyContractStorage(address, function (storageTrie, done) { + if (value && value.length) { + // format input + var encodedValue = rlp.encode(value); + storageTrie.put(key, encodedValue, done); + } else { + // deleting a value + storageTrie.del(key, done); + } + }, cb); +}; + +/** + * Clears all storage entries for the account corresponding to `address` + * @memberof StateManager + * @method clearContractStorage + * @param {Buffer} address Address to clear the storage of + * @param {Function} cb Callback function + */ +proto.clearContractStorage = function (address, cb) { + var self = this; + self._modifyContractStorage(address, function (storageTrie, done) { + storageTrie.root = storageTrie.EMPTY_TRIE_ROOT; + done(); + }, cb); +}; + +/** + * Checkpoints the current state of the StateManager instance. + * State changes that follow can then be committed by calling + * `commit` or `reverted` by calling rollback. + * @memberof StateManager + * @method checkpoint + * @param {Function} cb Callback function + */ +proto.checkpoint = function (cb) { + var self = this; + self._trie.checkpoint(); + self._cache.checkpoint(); + self._touchedStack.push(new Set([].concat(_toConsumableArray(self._touched)))); + self._checkpointCount++; + cb(); +}; + +/** + * Commits the current change-set to the instance since the + * last call to checkpoint. + * @memberof StateManager + * @method commit + * @param {Function} cb Callback function + */ +proto.commit = function (cb) { + var self = this; + // setup trie checkpointing + self._trie.commit(function () { + // setup cache checkpointing + self._cache.commit(); + self._touchedStack.pop(); + self._checkpointCount--; + + if (self._checkpointCount === 0) self._cache.flush(cb);else cb(); + }); +}; + +/** + * Reverts the current change-set to the instance since the + * last call to checkpoint. + * @memberof StateManager + * @method revert + * @param {Function} cb Callback function + */ +proto.revert = function (cb) { + var self = this; + // setup trie checkpointing + self._trie.revert(); + // setup cache checkpointing + self._cache.revert(); + self._storageTries = {}; + self._touched = self._touchedStack.pop(); + self._checkpointCount--; + + if (self._checkpointCount === 0) self._cache.flush(cb);else cb(); +}; + +/** + * Callback for `getStateRoot` method + * @callback getStateRoot~callback + * @param {Error} error an error that may have happened or `null`. + * Will be an error if the un-committed checkpoints on the instance. + * @param {Buffer} stateRoot The state-root of the `StateManager` + */ + +/** + * Gets the state-root of the Merkle-Patricia trie representation + * of the state of this StateManager. Will error if there are uncommitted + * checkpoints on the instance. + * @memberof StateManager + * @method getStateRoot + * @param {getStateRoot~callback} cb + */ +proto.getStateRoot = function (cb) { + var self = this; + + if (self._checkpointCount !== 0) { + return cb(new Error('Cannot get state root with uncommitted checkpoints')); + } + + self._cache.flush(function (err) { + if (err) { + return cb(err); + } + var stateRoot = self._trie.root; + cb(null, stateRoot); + }); +}; + +/** + * Sets the state of the instance to that represented + * by the provided `stateRoot`. Will error if there are uncommitted + * checkpoints on the instance or if the state root does not exist in + * the state trie. + * @memberof StateManager + * @method setStateRoot + * @param {Buffer} stateRoot The state-root to reset the instance to + * @param {Function} cb Callback function + */ +proto.setStateRoot = function (stateRoot, cb) { + var self = this; + + if (self._checkpointCount !== 0) { + return cb(new Error('Cannot set state root with uncommitted checkpoints')); + } + + self._cache.flush(function (err) { + if (err) { + return cb(err); + } + if (stateRoot === self._trie.EMPTY_TRIE_ROOT) { + self._trie.root = stateRoot; + self._cache.clear(); + return cb(); + } + self._trie.checkRoot(stateRoot, function (err, hasRoot) { + if (err || !hasRoot) { + cb(err || new Error('State trie does not contain state root')); + } else { + self._trie.root = stateRoot; + self._cache.clear(); + cb(); + } + }); + }); +}; + +/** + * Callback for `dumpStorage` method + * @callback dumpStorage~callback + * @param {Error} error an error that may have happened or `null` + * @param {Object} accountState The state of the account as an `Object` map. + * Keys are are the storage keys, values are the storage values as strings. + * Both are represented as hex strings without the `0x` prefix. + */ + +/** + * Dumps the the storage values for an `account` specified by `address` + * @memberof DefaultStateManager + * @method dumpStorage + * @param {Buffer} address The address of the `account` to return storage for + * @param {dumpStorage~callback} cb + */ +proto.dumpStorage = function (address, cb) { + var self = this; + self._getStorageTrie(address, function (err, trie) { + if (err) { + return cb(err); + } + var storage = {}; + var stream = trie.createReadStream(); + stream.on('data', function (val) { + storage[val.key.toString('hex')] = val.value.toString('hex'); + }); + stream.on('end', function () { + cb(storage); + }); + }); +}; + +/** + * Callback for `hasGenesisState` method + * @callback hasGenesisState~callback + * @param {Error} error an error that may have happened or `null` + * @param {Boolean} hasGenesisState Whether the storage trie contains the + * canonical genesis state for the configured chain parameters. + */ + +/** + * Checks whether the current instance has the canonical genesis state + * for the configured chain parameters. + * @memberof DefaultStateManager + * @method hasGenesisState + * @param {hasGenesisState~callback} cb + */ +proto.hasGenesisState = function (cb) { + var root = this._common.genesis().stateRoot; + this._trie.checkRoot(root, cb); +}; + +/** + * Generates a canonical genesis state on the instance based on the + * configured chain parameters. Will error if there are uncommitted + * checkpoints on the instance. + * @memberof StateManager + * @method generateCanonicalGenesis + * @param {Function} cb Callback function + */ +proto.generateCanonicalGenesis = function (cb) { + var self = this; + + if (self._checkpointCount !== 0) { + return cb(new Error('Cannot create genesis state with uncommitted checkpoints')); + } + + this.hasGenesisState(function (err, genesis) { + if (!genesis && !err) { + self.generateGenesis(genesisStateByName(self._common.chainName()), cb); + } else { + cb(err); + } + }); +}; + +/** + * Initializes the provided genesis state into the state trie + * @memberof DefaultStateManager + * @method generateGenesis + * @param {Object} initState + * @param {Function} cb Callback function + */ +proto.generateGenesis = function (initState, cb) { + var self = this; + + if (self._checkpointCount !== 0) { + return cb(new Error('Cannot create genesis state with uncommitted checkpoints')); + } + + var addresses = Object.keys(initState); + async.eachSeries(addresses, function (address, done) { + var account = new Account(); + account.balance = new BN(initState[address]).toArrayLike(Buffer); + address = utils.toBuffer(address); + self._trie.put(address, account.serialize(), done); + }, cb); +}; + +/** + * Callback for `accountIsEmpty` method + * @callback accountIsEmpty~callback + * @param {Error} error an error that may have happened or `null` + * @param {Boolean} empty True if the account is empty false otherwise + */ + +/** + * Checks if the `account` corresponding to `address` is empty as defined in + * EIP-161 (https://github.com/ethereum/EIPs/blob/master/EIPS/eip-161.md) + * @memberof StateManager + * @method accountIsEmpty + * @param {Buffer} address Address to check + * @param {accountIsEmpty~callback} cb + */ +proto.accountIsEmpty = function (address, cb) { + var self = this; + self.getAccount.bind(this)(address, function (err, account) { + if (err) { + return cb(err); + } + + // should be replaced by account.isEmpty() once updated + cb(null, account.nonce.toString('hex') === '' && account.balance.toString('hex') === '' && account.codeHash.toString('hex') === utils.KECCAK256_NULL_S); + }); +}; + +/** + * Removes accounts form the state trie that have been touched, + * as defined in EIP-161 (https://github.com/ethereum/EIPs/blob/master/EIPS/eip-161.md). + * @memberof StateManager + * @method cleanupTouchedAccounts + * @param {Function} cb Callback function + */ +proto.cleanupTouchedAccounts = function (cb) { + var self = this; + var touchedArray = Array.from(self._touched); + async.forEach(touchedArray, function (addressHex, next) { + var address = Buffer.from(addressHex, 'hex'); + self.accountIsEmpty(address, function (err, empty) { + if (err) { + next(err); + return; + } + + if (empty) { + self._cache.del(address); + } + next(null); + }); + }, function () { + self._touched.clear(); + cb(); + }); +}; +},{"./cache.js":614,"async":42,"ethereumjs-account":585,"ethereumjs-common":609,"ethereumjs-common/dist/genesisStates":595,"ethereumjs-util":640,"merkle-patricia-tree/secure.js":953,"safe-buffer":1334}],633:[function(require,module,exports){ +'use strict'; + +module.exports = StorageReader; + +function StorageReader(stateManager) { + this._stateManager = stateManager; + this._storageCache = new Map(); +} + +var proto = StorageReader.prototype; + +proto.getContractStorage = function getContractStorage(address, key, cb) { + var self = this; + var addressHex = address.toString('hex'); + var keyHex = key.toString('hex'); + + self._stateManager.getContractStorage(address, key, function (err, current) { + if (err) return cb(err); + + var map = null; + if (!self._storageCache.has(addressHex)) { + map = new Map(); + self._storageCache.set(addressHex, map); + } else { + map = self._storageCache.get(addressHex); + } + + var original = null; + + if (map.has(keyHex)) { + original = map.get(keyHex); + } else { + map.set(keyHex, current); + original = current; + } + + cb(null, { + original: original, + current: current + }); + }); +}; +},{}],634:[function(require,module,exports){ +'use strict'; + +var utils = require('ethereumjs-util'); +var BN = utils.BN; +var pow32 = new BN('010000000000000000000000000000000000000000000000000000000000000000', 16); +var pow31 = new BN('0100000000000000000000000000000000000000000000000000000000000000', 16); +var pow30 = new BN('01000000000000000000000000000000000000000000000000000000000000', 16); +var pow29 = new BN('010000000000000000000000000000000000000000000000000000000000', 16); +var pow28 = new BN('0100000000000000000000000000000000000000000000000000000000', 16); +var pow27 = new BN('01000000000000000000000000000000000000000000000000000000', 16); +var pow26 = new BN('010000000000000000000000000000000000000000000000000000', 16); +var pow25 = new BN('0100000000000000000000000000000000000000000000000000', 16); +var pow24 = new BN('01000000000000000000000000000000000000000000000000', 16); +var pow23 = new BN('010000000000000000000000000000000000000000000000', 16); +var pow22 = new BN('0100000000000000000000000000000000000000000000', 16); +var pow21 = new BN('01000000000000000000000000000000000000000000', 16); +var pow20 = new BN('010000000000000000000000000000000000000000', 16); +var pow19 = new BN('0100000000000000000000000000000000000000', 16); +var pow18 = new BN('01000000000000000000000000000000000000', 16); +var pow17 = new BN('010000000000000000000000000000000000', 16); +var pow16 = new BN('0100000000000000000000000000000000', 16); +var pow15 = new BN('01000000000000000000000000000000', 16); +var pow14 = new BN('010000000000000000000000000000', 16); +var pow13 = new BN('0100000000000000000000000000', 16); +var pow12 = new BN('01000000000000000000000000', 16); +var pow11 = new BN('010000000000000000000000', 16); +var pow10 = new BN('0100000000000000000000', 16); +var pow9 = new BN('01000000000000000000', 16); +var pow8 = new BN('010000000000000000', 16); +var pow7 = new BN('0100000000000000', 16); +var pow6 = new BN('01000000000000', 16); +var pow5 = new BN('010000000000', 16); +var pow4 = new BN('0100000000', 16); +var pow3 = new BN('01000000', 16); +var pow2 = new BN('010000', 16); +var pow1 = new BN('0100', 16); + +module.exports = function (a) { + if (a.cmp(pow1) === -1) { + return 0; + } else if (a.cmp(pow2) === -1) { + return 1; + } else if (a.cmp(pow3) === -1) { + return 2; + } else if (a.cmp(pow4) === -1) { + return 3; + } else if (a.cmp(pow5) === -1) { + return 4; + } else if (a.cmp(pow6) === -1) { + return 5; + } else if (a.cmp(pow7) === -1) { + return 6; + } else if (a.cmp(pow8) === -1) { + return 7; + } else if (a.cmp(pow9) === -1) { + return 8; + } else if (a.cmp(pow10) === -1) { + return 9; + } else if (a.cmp(pow11) === -1) { + return 10; + } else if (a.cmp(pow12) === -1) { + return 11; + } else if (a.cmp(pow13) === -1) { + return 12; + } else if (a.cmp(pow14) === -1) { + return 13; + } else if (a.cmp(pow15) === -1) { + return 14; + } else if (a.cmp(pow16) === -1) { + return 15; + } else if (a.cmp(pow17) === -1) { + return 16; + } else if (a.cmp(pow18) === -1) { + return 17; + } else if (a.cmp(pow19) === -1) { + return 18; + } else if (a.cmp(pow20) === -1) { + return 19; + } else if (a.cmp(pow21) === -1) { + return 20; + } else if (a.cmp(pow22) === -1) { + return 21; + } else if (a.cmp(pow23) === -1) { + return 22; + } else if (a.cmp(pow24) === -1) { + return 23; + } else if (a.cmp(pow25) === -1) { + return 24; + } else if (a.cmp(pow26) === -1) { + return 25; + } else if (a.cmp(pow27) === -1) { + return 26; + } else if (a.cmp(pow28) === -1) { + return 27; + } else if (a.cmp(pow29) === -1) { + return 28; + } else if (a.cmp(pow30) === -1) { + return 29; + } else if (a.cmp(pow31) === -1) { + return 30; + } else if (a.cmp(pow32) === -1) { + return 31; + } else { + return 32; + } +}; +},{"ethereumjs-util":640}],635:[function(require,module,exports){ +'use strict'; + +var Buffer = require('safe-buffer').Buffer; +var async = require('async'); +var utils = require('ethereumjs-util'); +var BN = utils.BN; +var exceptions = require('../exceptions.js'); +var logTable = require('./logTable.js'); +var ERROR = exceptions.ERROR; +var VmError = exceptions.VmError; +var MASK_160 = new BN(1).shln(160).subn(1); + +// Find Ceil(`this` / `num`) +BN.prototype.divCeil = function divCeil(num) { + var dm = this.divmod(num); + + // Fast case - exact division + if (dm.mod.isZero()) return dm.div; + + // Round up + return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); +}; + +function addressToBuffer(address) { + return address.and(MASK_160).toArrayLike(Buffer, 'be', 20); +} + +// the opcode functions +module.exports = { + STOP: function STOP(runState) { + runState.stopped = true; + }, + ADD: function ADD(a, b, runState) { + return a.add(b).mod(utils.TWO_POW256); + }, + MUL: function MUL(a, b, runState) { + return a.mul(b).mod(utils.TWO_POW256); + }, + SUB: function SUB(a, b, runState) { + return a.sub(b).toTwos(256); + }, + DIV: function DIV(a, b, runState) { + if (b.isZero()) { + return new BN(b); + } else { + return a.div(b); + } + }, + SDIV: function SDIV(a, b, runState) { + if (b.isZero()) { + return new BN(b); + } else { + a = a.fromTwos(256); + b = b.fromTwos(256); + return a.div(b).toTwos(256); + } + }, + MOD: function MOD(a, b, runState) { + if (b.isZero()) { + return new BN(b); + } else { + return a.mod(b); + } + }, + SMOD: function SMOD(a, b, runState) { + if (b.isZero()) { + return new BN(b); + } else { + a = a.fromTwos(256); + b = b.fromTwos(256); + var r = a.abs().mod(b.abs()); + if (a.isNeg()) { + r = r.ineg(); + } + return r.toTwos(256); + } + }, + ADDMOD: function ADDMOD(a, b, c, runState) { + if (c.isZero()) { + return new BN(c); + } else { + return a.add(b).mod(c); + } + }, + MULMOD: function MULMOD(a, b, c, runState) { + if (c.isZero()) { + return new BN(c); + } else { + return a.mul(b).mod(c); + } + }, + EXP: function EXP(base, exponent, runState) { + if (exponent.isZero()) { + return new BN(1); + } else { + var bytes = 1 + logTable(exponent); + subGas(runState, new BN(bytes).muln(runState._common.param('gasPrices', 'expByte'))); + + var m = BN.red(utils.TWO_POW256); + base = base.toRed(m); + return base.redPow(exponent); + } + }, + SIGNEXTEND: function SIGNEXTEND(k, val, runState) { + val = val.toArrayLike(Buffer, 'be', 32); + var extendOnes = false; + + if (k.lten(31)) { + k = k.toNumber(); + + if (val[31 - k] & 0x80) { + extendOnes = true; + } + + // 31-k-1 since k-th byte shouldn't be modified + for (var i = 30 - k; i >= 0; i--) { + val[i] = extendOnes ? 0xff : 0; + } + } + + return new BN(val); + }, + // 0x10 range - bit ops + LT: function LT(a, b, runState) { + return new BN(a.lt(b) ? 1 : 0); + }, + GT: function GT(a, b, runState) { + return new BN(a.gt(b) ? 1 : 0); + }, + SLT: function SLT(a, b, runState) { + return new BN(a.fromTwos(256).lt(b.fromTwos(256)) ? 1 : 0); + }, + SGT: function SGT(a, b, runState) { + return new BN(a.fromTwos(256).gt(b.fromTwos(256)) ? 1 : 0); + }, + EQ: function EQ(a, b, runState) { + return new BN(a.eq(b) ? 1 : 0); + }, + ISZERO: function ISZERO(a, runState) { + return new BN(a.isZero() ? 1 : 0); + }, + AND: function AND(a, b, runState) { + return a.and(b); + }, + OR: function OR(a, b, runState) { + return a.or(b); + }, + XOR: function XOR(a, b, runState) { + return a.xor(b); + }, + NOT: function NOT(a, runState) { + return a.notn(256); + }, + BYTE: function BYTE(pos, word, runState) { + if (pos.gten(32)) { + return new BN(0); + } + + return new BN(word.shrn((31 - pos.toNumber()) * 8).andln(0xff)); + }, + SHL: function SHL(a, b, runState) { + if (!runState._common.gteHardfork('constantinople')) { + trap(ERROR.INVALID_OPCODE); + } + if (a.gten(256)) { + return new BN(0); + } + return b.shln(a.toNumber()).iand(utils.MAX_INTEGER); + }, + SHR: function SHR(a, b, runState) { + if (!runState._common.gteHardfork('constantinople')) { + trap(ERROR.INVALID_OPCODE); + } + if (a.gten(256)) { + return new BN(0); + } + return b.shrn(a.toNumber()); + }, + SAR: function SAR(a, b, runState) { + if (!runState._common.gteHardfork('constantinople')) { + trap(ERROR.INVALID_OPCODE); + } + var isSigned = b.testn(255); + if (a.gten(256)) { + if (isSigned) { + return new BN(utils.MAX_INTEGER); + } else { + return new BN(0); + } + } + var c = b.shrn(a.toNumber()); + if (isSigned) { + var shiftedOutWidth = 255 - a.toNumber(); + var mask = utils.MAX_INTEGER.shrn(shiftedOutWidth).shln(shiftedOutWidth); + return c.ior(mask); + } else { + return c; + } + }, + // 0x20 range - crypto + SHA3: function SHA3(offset, length, runState) { + var data = memLoad(runState, offset, length); + // copy fee + subGas(runState, new BN(runState._common.param('gasPrices', 'sha3Word')).imul(length.divCeil(new BN(32)))); + return new BN(utils.keccak256(data)); + }, + // 0x30 range - closure state + ADDRESS: function ADDRESS(runState) { + return new BN(runState.address); + }, + BALANCE: function BALANCE(address, runState, cb) { + var stateManager = runState.stateManager; + // stack to address + address = addressToBuffer(address); + + // shortcut if current account + if (address.toString('hex') === runState.address.toString('hex')) { + cb(null, new BN(runState.contract.balance)); + return; + } + + // otherwise load account then return balance + stateManager.getAccount(address, function (err, account) { + if (err) { + return cb(err); + } + cb(null, new BN(account.balance)); + }); + }, + ORIGIN: function ORIGIN(runState) { + return new BN(runState.origin); + }, + CALLER: function CALLER(runState) { + return new BN(runState.caller); + }, + CALLVALUE: function CALLVALUE(runState) { + return new BN(runState.callValue); + }, + CALLDATALOAD: function CALLDATALOAD(pos, runState) { + if (pos.gtn(runState.callData.length)) { + return new BN(0); + } else { + pos = pos.toNumber(); + var loaded = runState.callData.slice(pos, pos + 32); + loaded = loaded.length ? loaded : Buffer.from([0]); + return new BN(utils.setLengthRight(loaded, 32)); + } + }, + CALLDATASIZE: function CALLDATASIZE(runState) { + if (runState.callData.length === 1 && runState.callData[0] === 0) { + return new BN(0); + } else { + return new BN(runState.callData.length); + } + }, + CALLDATACOPY: function CALLDATACOPY(memOffset, dataOffset, dataLength, runState) { + memStore(runState, memOffset, runState.callData, dataOffset, dataLength); + // sub the COPY fee + subGas(runState, new BN(runState._common.param('gasPrices', 'copy')).imul(dataLength.divCeil(new BN(32)))); + }, + CODESIZE: function CODESIZE(runState) { + return new BN(runState.code.length); + }, + CODECOPY: function CODECOPY(memOffset, codeOffset, length, runState) { + memStore(runState, memOffset, runState.code, codeOffset, length); + // sub the COPY fee + subGas(runState, new BN(runState._common.param('gasPrices', 'copy')).imul(length.divCeil(new BN(32)))); + }, + EXTCODESIZE: function EXTCODESIZE(address, runState, cb) { + var stateManager = runState.stateManager; + address = addressToBuffer(address); + stateManager.getContractCode(address, function (err, code) { + if (err) return cb(err); + cb(null, new BN(code.length)); + }); + }, + EXTCODECOPY: function EXTCODECOPY(address, memOffset, codeOffset, length, runState, cb) { + var stateManager = runState.stateManager; + address = addressToBuffer(address); + + // FIXME: for some reason this must come before subGas + subMemUsage(runState, memOffset, length); + // copy fee + subGas(runState, new BN(runState._common.param('gasPrices', 'copy')).imul(length.divCeil(new BN(32)))); + + stateManager.getContractCode(address, function (err, code) { + if (err) return cb(err); + memStore(runState, memOffset, code, codeOffset, length, false); + cb(null); + }); + }, + EXTCODEHASH: function EXTCODEHASH(address, runState, cb) { + if (!runState._common.gteHardfork('constantinople')) { + trap(ERROR.INVALID_OPCODE); + } + var stateManager = runState.stateManager; + address = addressToBuffer(address); + + stateManager.getAccount(address, function (err, account) { + if (err) return cb(err); + + if (account.isEmpty()) { + return cb(null, new BN(0)); + } + + stateManager.getContractCode(address, function (err, code) { + if (err) return cb(err); + if (code.length === 0) { + return cb(null, new BN(utils.KECCAK256_NULL)); + } + + return cb(null, new BN(utils.keccak256(code))); + }); + }); + }, + RETURNDATASIZE: function RETURNDATASIZE(runState) { + return new BN(runState.lastReturned.length); + }, + RETURNDATACOPY: function RETURNDATACOPY(memOffset, returnDataOffset, length, runState) { + if (returnDataOffset.add(length).gtn(runState.lastReturned.length)) { + trap(ERROR.OUT_OF_GAS); + } + + memStore(runState, memOffset, utils.toBuffer(runState.lastReturned), returnDataOffset, length, false); + // sub the COPY fee + subGas(runState, new BN(runState._common.param('gasPrices', 'copy')).mul(length.divCeil(new BN(32)))); + }, + GASPRICE: function GASPRICE(runState) { + return new BN(runState.gasPrice); + }, + // '0x40' range - block operations + BLOCKHASH: function BLOCKHASH(number, runState, cb) { + var blockchain = runState.blockchain; + var diff = new BN(runState.block.header.number).sub(number); + + // block lookups must be within the past 256 blocks + if (diff.gtn(256) || diff.lten(0)) { + cb(null, new BN(0)); + return; + } + + blockchain.getBlock(number, function (err, block) { + if (err) return cb(err); + var blockHash = block.hash(); + cb(null, new BN(blockHash)); + }); + }, + COINBASE: function COINBASE(runState) { + return new BN(runState.block.header.coinbase); + }, + TIMESTAMP: function TIMESTAMP(runState) { + return new BN(runState.block.header.timestamp); + }, + NUMBER: function NUMBER(runState) { + return new BN(runState.block.header.number); + }, + DIFFICULTY: function DIFFICULTY(runState) { + return new BN(runState.block.header.difficulty); + }, + GASLIMIT: function GASLIMIT(runState) { + return new BN(runState.block.header.gasLimit); + }, + // 0x50 range - 'storage' and execution + POP: function POP() {}, + MLOAD: function MLOAD(pos, runState) { + return new BN(memLoad(runState, pos, new BN(32))); + }, + MSTORE: function MSTORE(offset, word, runState) { + word = word.toArrayLike(Buffer, 'be', 32); + memStore(runState, offset, word, new BN(0), new BN(32)); + }, + MSTORE8: function MSTORE8(offset, byte, runState) { + // NOTE: we're using a 'trick' here to get the least significant byte + byte = Buffer.from([byte.andln(0xff)]); + memStore(runState, offset, byte, new BN(0), new BN(1)); + }, + SLOAD: function SLOAD(key, runState, cb) { + var stateManager = runState.stateManager; + key = key.toArrayLike(Buffer, 'be', 32); + + stateManager.getContractStorage(runState.address, key, function (err, value) { + if (err) return cb(err); + value = value.length ? new BN(value) : new BN(0); + cb(null, value); + }); + }, + SSTORE: function SSTORE(key, val, runState, cb) { + if (runState.static) { + trap(ERROR.STATIC_STATE_CHANGE); + } + var stateManager = runState.stateManager; + var address = runState.address; + key = key.toArrayLike(Buffer, 'be', 32); + // NOTE: this should be the shortest representation + var value; + if (val.isZero()) { + value = Buffer.from([]); + } else { + value = val.toArrayLike(Buffer, 'be'); + } + + getContractStorage(runState, address, key, function (err, found) { + if (err) return cb(err); + try { + updateSstoreGas(runState, found, value); + } catch (e) { + cb(e.error); + return; + } + + stateManager.putContractStorage(address, key, value, function (err) { + if (err) return cb(err); + stateManager.getAccount(address, function (err, account) { + if (err) return cb(err); + runState.contract = account; + cb(null); + }); + }); + }); + }, + JUMP: function JUMP(dest, runState) { + if (dest.gtn(runState.code.length)) { + trap(ERROR.INVALID_JUMP + ' at ' + describeLocation(runState)); + } + + dest = dest.toNumber(); + + if (!jumpIsValid(runState, dest)) { + trap(ERROR.INVALID_JUMP + ' at ' + describeLocation(runState)); + } + + runState.programCounter = dest; + }, + JUMPI: function JUMPI(dest, cond, runState) { + if (!cond.isZero()) { + if (dest.gtn(runState.code.length)) { + trap(ERROR.INVALID_JUMP + ' at ' + describeLocation(runState)); + } + + dest = dest.toNumber(); + + if (!jumpIsValid(runState, dest)) { + trap(ERROR.INVALID_JUMP + ' at ' + describeLocation(runState)); + } + + runState.programCounter = dest; + } + }, + PC: function PC(runState) { + return new BN(runState.programCounter - 1); + }, + MSIZE: function MSIZE(runState) { + return runState.memoryWordCount.muln(32); + }, + GAS: function GAS(runState) { + return new BN(runState.gasLeft); + }, + JUMPDEST: function JUMPDEST(runState) {}, + PUSH: function PUSH(runState) { + var numToPush = runState.opCode - 0x5f; + var loaded = new BN(runState.code.slice(runState.programCounter, runState.programCounter + numToPush).toString('hex'), 16); + runState.programCounter += numToPush; + return loaded; + }, + DUP: function DUP(runState) { + // NOTE: this function manipulates the stack directly! + + var stackPos = runState.opCode - 0x7f; + if (stackPos > runState.stack.length) { + trap(ERROR.STACK_UNDERFLOW); + } + // create a new copy + return new BN(runState.stack[runState.stack.length - stackPos]); + }, + SWAP: function SWAP(runState) { + // NOTE: this function manipulates the stack directly! + + var stackPos = runState.opCode - 0x8f; + + // check the stack to make sure we have enough items on teh stack + var swapIndex = runState.stack.length - stackPos - 1; + if (swapIndex < 0) { + trap(ERROR.STACK_UNDERFLOW); + } + + // preform the swap + var topIndex = runState.stack.length - 1; + var tmp = runState.stack[topIndex]; + runState.stack[topIndex] = runState.stack[swapIndex]; + runState.stack[swapIndex] = tmp; + }, + LOG: function LOG(memOffset, memLength) { + var args = Array.prototype.slice.call(arguments, 0); + var runState = args.pop(); + if (runState.static) { + trap(ERROR.STATIC_STATE_CHANGE); + } + + var topics = args.slice(2); + topics = topics.map(function (a) { + return a.toArrayLike(Buffer, 'be', 32); + }); + + var numOfTopics = runState.opCode - 0xa0; + var mem = memLoad(runState, memOffset, memLength); + subGas(runState, new BN(runState._common.param('gasPrices', 'logTopic')).imuln(numOfTopics).iadd(memLength.muln(runState._common.param('gasPrices', 'logData')))); + + // add address + var log = [runState.address]; + log.push(topics); + + // add data + log.push(mem); + runState.logs.push(log); + }, + + // '0xf0' range - closures + CREATE: function CREATE(value, offset, length, runState, done) { + if (runState.static) { + trap(ERROR.STATIC_STATE_CHANGE); + } + + var data = memLoad(runState, offset, length); + + // set up config + var options = { + value: value, + data: data + }; + + var localOpts = { + inOffset: offset, + inLength: length, + outOffset: new BN(0), + outLength: new BN(0) + }; + + checkCallMemCost(runState, options, localOpts); + checkOutOfGas(runState, options); + makeCall(runState, options, localOpts, done); + }, + CREATE2: function CREATE2(value, offset, length, salt, runState, done) { + if (!runState._common.gteHardfork('constantinople')) { + trap(ERROR.INVALID_OPCODE); + } + + if (runState.static) { + trap(ERROR.STATIC_STATE_CHANGE); + } + + var data = memLoad(runState, offset, length); + + // set up config + var options = { + value: value, + data: data, + salt: salt.toArrayLike(Buffer, 'be', 32) + }; + + var localOpts = { + inOffset: offset, + inLength: length, + outOffset: new BN(0), + outLength: new BN(0) + + // Deduct gas costs for hashing + };subGas(runState, new BN(runState._common.param('gasPrices', 'sha3Word')).imul(length.divCeil(new BN(32)))); + checkCallMemCost(runState, options, localOpts); + checkOutOfGas(runState, options); + makeCall(runState, options, localOpts, done); + }, + CALL: function CALL(gasLimit, toAddress, value, inOffset, inLength, outOffset, outLength, runState, done) { + var stateManager = runState.stateManager; + toAddress = addressToBuffer(toAddress); + + if (runState.static && !value.isZero()) { + trap(ERROR.STATIC_STATE_CHANGE); + } + + var data = memLoad(runState, inOffset, inLength); + + var options = { + gasLimit: gasLimit, + value: value, + to: toAddress, + data: data, + static: runState.static + }; + + var localOpts = { + inOffset: inOffset, + inLength: inLength, + outOffset: outOffset, + outLength: outLength + }; + + if (!value.isZero()) { + subGas(runState, new BN(runState._common.param('gasPrices', 'callValueTransfer'))); + } + + stateManager.accountIsEmpty(toAddress, function (err, empty) { + if (err) { + done(err); + return; + } + + if (empty) { + if (!value.isZero()) { + try { + subGas(runState, new BN(runState._common.param('gasPrices', 'callNewAccount'))); + } catch (e) { + done(e.error); + return; + } + } + } + + try { + checkCallMemCost(runState, options, localOpts); + checkOutOfGas(runState, options); + } catch (e) { + done(e.error); + return; + } + + if (!value.isZero()) { + runState.gasLeft.iaddn(runState._common.param('gasPrices', 'callStipend')); + options.gasLimit.iaddn(runState._common.param('gasPrices', 'callStipend')); + } + + makeCall(runState, options, localOpts, done); + }); + }, + CALLCODE: function CALLCODE(gas, toAddress, value, inOffset, inLength, outOffset, outLength, runState, done) { + var stateManager = runState.stateManager; + toAddress = addressToBuffer(toAddress); + + var data = memLoad(runState, inOffset, inLength); + + var options = { + gasLimit: gas, + value: value, + data: data, + to: runState.address, + static: runState.static + }; + + var localOpts = { + inOffset: inOffset, + inLength: inLength, + outOffset: outOffset, + outLength: outLength + }; + + if (!value.isZero()) { + subGas(runState, new BN(runState._common.param('gasPrices', 'callValueTransfer'))); + } + + checkCallMemCost(runState, options, localOpts); + checkOutOfGas(runState, options); + + if (!value.isZero()) { + runState.gasLeft.iaddn(runState._common.param('gasPrices', 'callStipend')); + options.gasLimit.iaddn(runState._common.param('gasPrices', 'callStipend')); + } + + // load the code + stateManager.getAccount(toAddress, function (err, account) { + if (err) return done(err); + if (runState._precompiled[toAddress.toString('hex')]) { + options.compiled = true; + options.code = runState._precompiled[toAddress.toString('hex')]; + makeCall(runState, options, localOpts, done); + } else { + stateManager.getContractCode(toAddress, function (err, code, compiled) { + if (err) return done(err); + options.compiled = compiled || false; + options.code = code; + makeCall(runState, options, localOpts, done); + }); + } + }); + }, + DELEGATECALL: function DELEGATECALL(gas, toAddress, inOffset, inLength, outOffset, outLength, runState, done) { + var stateManager = runState.stateManager; + var value = runState.callValue; + toAddress = addressToBuffer(toAddress); + + var data = memLoad(runState, inOffset, inLength); + + var options = { + gasLimit: gas, + value: value, + data: data, + to: runState.address, + caller: runState.caller, + delegatecall: true, + static: runState.static + }; + + var localOpts = { + inOffset: inOffset, + inLength: inLength, + outOffset: outOffset, + outLength: outLength + }; + + checkCallMemCost(runState, options, localOpts); + checkOutOfGas(runState, options); + + // load the code + stateManager.getAccount(toAddress, function (err, account) { + if (err) return done(err); + if (runState._precompiled[toAddress.toString('hex')]) { + options.compiled = true; + options.code = runState._precompiled[toAddress.toString('hex')]; + makeCall(runState, options, localOpts, done); + } else { + stateManager.getContractCode(toAddress, function (err, code, compiled) { + if (err) return done(err); + options.compiled = compiled || false; + options.code = code; + makeCall(runState, options, localOpts, done); + }); + } + }); + }, + STATICCALL: function STATICCALL(gasLimit, toAddress, inOffset, inLength, outOffset, outLength, runState, done) { + var value = new BN(0); + toAddress = addressToBuffer(toAddress); + + var data = memLoad(runState, inOffset, inLength); + + var options = { + gasLimit: gasLimit, + value: value, + to: toAddress, + data: data, + static: true + }; + + var localOpts = { + inOffset: inOffset, + inLength: inLength, + outOffset: outOffset, + outLength: outLength + }; + + try { + checkCallMemCost(runState, options, localOpts); + checkOutOfGas(runState, options); + } catch (e) { + done(e.error); + return; + } + + makeCall(runState, options, localOpts, done); + }, + RETURN: function RETURN(offset, length, runState) { + runState.returnValue = memLoad(runState, offset, length); + }, + REVERT: function REVERT(offset, length, runState) { + runState.stopped = true; + runState.returnValue = memLoad(runState, offset, length); + trap(ERROR.REVERT); + }, + // '0x70', range - other + SELFDESTRUCT: function SELFDESTRUCT(selfdestructToAddress, runState, cb) { + if (runState.static) { + trap(ERROR.STATIC_STATE_CHANGE); + } + var stateManager = runState.stateManager; + var contract = runState.contract; + var contractAddress = runState.address; + selfdestructToAddress = addressToBuffer(selfdestructToAddress); + + stateManager.getAccount(selfdestructToAddress, function (err, toAccount) { + // update balances + if (err) { + cb(err); + return; + } + + stateManager.accountIsEmpty(selfdestructToAddress, function (error, empty) { + if (error) { + cb(error); + return; + } + + if (new BN(contract.balance).gtn(0)) { + if (empty) { + try { + subGas(runState, new BN(runState._common.param('gasPrices', 'callNewAccount'))); + } catch (e) { + cb(e.error); + return; + } + } + } + + // only add to refund if this is the first selfdestruct for the address + if (!runState.selfdestruct[contractAddress.toString('hex')]) { + runState.gasRefund = runState.gasRefund.addn(runState._common.param('gasPrices', 'selfdestructRefund')); + } + runState.selfdestruct[contractAddress.toString('hex')] = selfdestructToAddress; + runState.stopped = true; + + var newBalance = new BN(contract.balance).add(new BN(toAccount.balance)); + async.waterfall([stateManager.getAccount.bind(stateManager, selfdestructToAddress), function (account, cb) { + account.balance = newBalance; + stateManager.putAccount(selfdestructToAddress, account, cb); + }, stateManager.getAccount.bind(stateManager, contractAddress), function (account, cb) { + account.balance = new BN(0); + stateManager.putAccount(contractAddress, account, cb); + }], function (err) { + // The reason for this is to avoid sending an array of results + cb(err); + }); + }); + }); + } +}; + +function describeLocation(runState) { + var hash = utils.keccak256(runState.code).toString('hex'); + var address = runState.address.toString('hex'); + var pc = runState.programCounter - 1; + return hash + '/' + address + ':' + pc; +} + +function subGas(runState, amount) { + runState.gasLeft.isub(amount); + if (runState.gasLeft.ltn(0)) { + runState.gasLeft = new BN(0); + trap(ERROR.OUT_OF_GAS); + } +} + +function trap(err) { + throw new VmError(err); +} + +/** + * Subtracts the amount needed for memory usage from `runState.gasLeft` + * @method subMemUsage + * @param {Object} runState + * @param {BN} offset + * @param {BN} length + * @returns {String} + */ +function subMemUsage(runState, offset, length) { + // YP (225): access with zero length will not extend the memory + if (length.isZero()) return; + + var newMemoryWordCount = offset.add(length).divCeil(new BN(32)); + if (newMemoryWordCount.lte(runState.memoryWordCount)) return; + + var words = newMemoryWordCount; + var fee = new BN(runState._common.param('gasPrices', 'memory')); + var quadCoeff = new BN(runState._common.param('gasPrices', 'quadCoeffDiv')); + // words * 3 + words ^2 / 512 + var cost = words.mul(fee).add(words.mul(words).div(quadCoeff)); + + if (cost.gt(runState.highestMemCost)) { + subGas(runState, cost.sub(runState.highestMemCost)); + runState.highestMemCost = cost; + } + + runState.memoryWordCount = newMemoryWordCount; +} + +/** + * Loads bytes from memory and returns them as a buffer. If an error occurs + * a string is instead returned. The function also subtracts the amount of + * gas need for memory expansion. + * @method memLoad + * @param {Object} runState + * @param {BN} offset where to start reading from + * @param {BN} length how far to read + * @returns {Buffer|String} + */ +function memLoad(runState, offset, length) { + // check to see if we have enougth gas for the mem read + subMemUsage(runState, offset, length); + + // shortcut + if (length.isZero()) { + return Buffer.alloc(0); + } + + // NOTE: in theory this could overflow, but unlikely due to OOG above + offset = offset.toNumber(); + length = length.toNumber(); + + var loaded = runState.memory.slice(offset, offset + length); + // fill the remaining lenth with zeros + for (var i = loaded.length; i < length; i++) { + loaded[i] = 0; + } + return Buffer.from(loaded); +} + +/** + * Stores bytes to memory. If an error occurs a string is instead returned. + * The function also subtracts the amount of gas need for memory expansion. + * @method memStore + * @param {Object} runState + * @param {BN} offset where to start reading from + * @param {Buffer} val + * @param {BN} valOffset + * @param {BN} length how far to read + * @param {Boolean} skipSubMem + * @returns {Buffer|String} + */ +function memStore(runState, offset, val, valOffset, length, skipSubMem) { + if (skipSubMem !== false) { + subMemUsage(runState, offset, length); + } + + // shortcut + if (length.isZero()) { + return; + } + + // NOTE: in theory this could overflow, but unlikely due to OOG above + offset = offset.toNumber(); + length = length.toNumber(); + + var safeLen = 0; + if (valOffset.addn(length).gtn(val.length)) { + if (valOffset.gten(val.length)) { + safeLen = 0; + } else { + valOffset = valOffset.toNumber(); + safeLen = val.length - valOffset; + } + } else { + valOffset = valOffset.toNumber(); + safeLen = val.length; + } + + var i = 0; + if (safeLen > 0) { + safeLen = safeLen > length ? length : safeLen; + for (; i < safeLen; i++) { + runState.memory[offset + i] = val[valOffset + i]; + } + } + + /* + pad the remaining length with zeros IF AND ONLY IF a value was stored + (even if value offset > value length, strange spec...) + */ + if (val.length > 0 && i < length) { + for (; i < length; i++) { + runState.memory[offset + i] = 0; + } + } +} + +// checks if a jump is valid given a destination +function jumpIsValid(runState, dest) { + return runState.validJumps.indexOf(dest) !== -1; +} + +// checks to see if we have enough gas left for the memory reads and writes +// required by the CALLs +function checkCallMemCost(runState, callOptions, localOpts) { + // calculates the gas need for saving the output in memory + subMemUsage(runState, localOpts.outOffset, localOpts.outLength); + + if (!callOptions.gasLimit) { + callOptions.gasLimit = new BN(runState.gasLeft); + } +} + +function checkOutOfGas(runState, callOptions) { + var gasAllowed = runState.gasLeft.sub(runState.gasLeft.divn(64)); + if (callOptions.gasLimit.gt(gasAllowed)) { + callOptions.gasLimit = gasAllowed; + } +} + +// sets up and calls runCall +function makeCall(runState, callOptions, localOpts, cb) { + var selfdestruct = Object.assign({}, runState.selfdestruct); + callOptions.caller = callOptions.caller || runState.address; + callOptions.origin = runState.origin; + callOptions.gasPrice = runState.gasPrice; + callOptions.block = runState.block; + callOptions.static = callOptions.static || false; + callOptions.selfdestruct = selfdestruct; + callOptions.storageReader = runState.storageReader; + + // increment the runState.depth + callOptions.depth = runState.depth + 1; + + // empty the return data buffer + runState.lastReturned = Buffer.alloc(0); + + // check if account has enough ether + // Note: in the case of delegatecall, the value is persisted and doesn't need to be deducted again + if (runState.depth >= runState._common.param('vm', 'stackLimit') || callOptions.delegatecall !== true && new BN(runState.contract.balance).lt(callOptions.value)) { + cb(null, new BN(0)); + } else { + // if creating a new contract then increament the nonce + if (!callOptions.to) { + runState.contract.nonce = new BN(runState.contract.nonce).addn(1); + } + + runState.stateManager.putAccount(runState.address, runState.contract, function (err) { + if (err) return cb(err); + runState._vm.runCall(callOptions, parseCallResults); + }); + } + + function parseCallResults(err, results) { + if (err) return cb(err); + + // concat the runState.logs + if (results.vm.logs) { + runState.logs = runState.logs.concat(results.vm.logs); + } + + // add gasRefund + if (results.vm.gasRefund) { + runState.gasRefund = runState.gasRefund.add(results.vm.gasRefund); + } + + // this should always be safe + runState.gasLeft.isub(results.gasUsed); + + // save results to memory + if (results.vm.return && (!results.vm.exceptionError || results.vm.exceptionError.error === ERROR.REVERT)) { + memStore(runState, localOpts.outOffset, results.vm.return, new BN(0), localOpts.outLength, false); + + if (results.vm.exceptionError && results.vm.exceptionError.error === ERROR.REVERT && isCreateOpCode(runState.opName)) { + runState.lastReturned = results.vm.return; + } + + switch (runState.opName) { + case 'CALL': + case 'CALLCODE': + case 'DELEGATECALL': + case 'STATICCALL': + runState.lastReturned = results.vm.return; + break; + } + } + + if (!results.vm.exceptionError) { + Object.assign(runState.selfdestruct, selfdestruct); + // update stateRoot on current contract + runState.stateManager.getAccount(runState.address, function (err, account) { + if (err) return cb(err); + + runState.contract = account; + // push the created address to the stack + if (results.createdAddress) { + cb(null, new BN(results.createdAddress)); + } else { + cb(null, new BN(results.vm.exception)); + } + }); + } else { + // creation failed so don't increment the nonce + if (results.vm.createdAddress) { + runState.contract.nonce = new BN(runState.contract.nonce).subn(1); + } + + cb(null, new BN(results.vm.exception)); + } + } +} + +function isCreateOpCode(opName) { + return opName === 'CREATE' || opName === 'CREATE2'; +} + +function getContractStorage(runState, address, key, cb) { + if (runState._common.hardfork() === 'constantinople') { + runState.storageReader.getContractStorage(address, key, cb); + } else { + runState.stateManager.getContractStorage(address, key, cb); + } +} + +function updateSstoreGas(runState, found, value) { + if (runState._common.hardfork() === 'constantinople') { + var original = found.original; + var current = found.current; + if (current.equals(value)) { + // If current value equals new value (this is a no-op), 200 gas is deducted. + subGas(runState, new BN(runState._common.param('gasPrices', 'netSstoreNoopGas'))); + return; + } + // If current value does not equal new value + if (original.equals(current)) { + // If original value equals current value (this storage slot has not been changed by the current execution context) + if (original.length === 0) { + // If original value is 0, 20000 gas is deducted. + return subGas(runState, new BN(runState._common.param('gasPrices', 'netSstoreInitGas'))); + } + if (value.length === 0) { + // If new value is 0, add 15000 gas to refund counter. + runState.gasRefund = runState.gasRefund.addn(runState._common.param('gasPrices', 'netSstoreClearRefund')); + } + // Otherwise, 5000 gas is deducted. + return subGas(runState, new BN(runState._common.param('gasPrices', 'netSstoreCleanGas'))); + } + // If original value does not equal current value (this storage slot is dirty), 200 gas is deducted. Apply both of the following clauses. + if (original.length !== 0) { + // If original value is not 0 + if (current.length === 0) { + // If current value is 0 (also means that new value is not 0), remove 15000 gas from refund counter. We can prove that refund counter will never go below 0. + runState.gasRefund = runState.gasRefund.subn(runState._common.param('gasPrices', 'netSstoreClearRefund')); + } else if (value.length === 0) { + // If new value is 0 (also means that current value is not 0), add 15000 gas to refund counter. + runState.gasRefund = runState.gasRefund.addn(runState._common.param('gasPrices', 'netSstoreClearRefund')); + } + } + if (original.equals(value)) { + // If original value equals new value (this storage slot is reset) + if (original.length === 0) { + // If original value is 0, add 19800 gas to refund counter. + runState.gasRefund = runState.gasRefund.addn(runState._common.param('gasPrices', 'netSstoreResetClearRefund')); + } else { + // Otherwise, add 4800 gas to refund counter. + runState.gasRefund = runState.gasRefund.addn(runState._common.param('gasPrices', 'netSstoreResetRefund')); + } + } + return subGas(runState, new BN(runState._common.param('gasPrices', 'netSstoreDirtyGas'))); + } else { + if (value.length === 0 && !found.length) { + subGas(runState, new BN(runState._common.param('gasPrices', 'sstoreReset'))); + } else if (value.length === 0 && found.length) { + subGas(runState, new BN(runState._common.param('gasPrices', 'sstoreReset'))); + runState.gasRefund.iaddn(runState._common.param('gasPrices', 'sstoreRefund')); + } else if (value.length !== 0 && !found.length) { + subGas(runState, new BN(runState._common.param('gasPrices', 'sstoreSet'))); + } else if (value.length !== 0 && found.length) { + subGas(runState, new BN(runState._common.param('gasPrices', 'sstoreReset'))); + } + } +} +},{"../exceptions.js":615,"./logTable.js":634,"async":42,"ethereumjs-util":640,"safe-buffer":1334}],636:[function(require,module,exports){ +'use strict'; + +var codes = { + // 0x0 range - arithmetic ops + // name, baseCost, off stack, on stack, dynamic, async + 0x00: ['STOP', 0, 0, 0, false], + 0x01: ['ADD', 3, 2, 1, false], + 0x02: ['MUL', 5, 2, 1, false], + 0x03: ['SUB', 3, 2, 1, false], + 0x04: ['DIV', 5, 2, 1, false], + 0x05: ['SDIV', 5, 2, 1, false], + 0x06: ['MOD', 5, 2, 1, false], + 0x07: ['SMOD', 5, 2, 1, false], + 0x08: ['ADDMOD', 8, 3, 1, false], + 0x09: ['MULMOD', 8, 3, 1, false], + 0x0a: ['EXP', 10, 2, 1, false], + 0x0b: ['SIGNEXTEND', 5, 2, 1, false], + + // 0x10 range - bit ops + 0x10: ['LT', 3, 2, 1, false], + 0x11: ['GT', 3, 2, 1, false], + 0x12: ['SLT', 3, 2, 1, false], + 0x13: ['SGT', 3, 2, 1, false], + 0x14: ['EQ', 3, 2, 1, false], + 0x15: ['ISZERO', 3, 1, 1, false], + 0x16: ['AND', 3, 2, 1, false], + 0x17: ['OR', 3, 2, 1, false], + 0x18: ['XOR', 3, 2, 1, false], + 0x19: ['NOT', 3, 1, 1, false], + 0x1a: ['BYTE', 3, 2, 1, false], + 0x1b: ['SHL', 3, 2, 1, false], + 0x1c: ['SHR', 3, 2, 1, false], + 0x1d: ['SAR', 3, 2, 1, false], + + // 0x20 range - crypto + 0x20: ['SHA3', 30, 2, 1, false], + + // 0x30 range - closure state + 0x30: ['ADDRESS', 2, 0, 1, true], + 0x31: ['BALANCE', 400, 1, 1, true, true], + 0x32: ['ORIGIN', 2, 0, 1, true], + 0x33: ['CALLER', 2, 0, 1, true], + 0x34: ['CALLVALUE', 2, 0, 1, true], + 0x35: ['CALLDATALOAD', 3, 1, 1, true], + 0x36: ['CALLDATASIZE', 2, 0, 1, true], + 0x37: ['CALLDATACOPY', 3, 3, 0, true], + 0x38: ['CODESIZE', 2, 0, 1, false], + 0x39: ['CODECOPY', 3, 3, 0, false], + 0x3a: ['GASPRICE', 2, 0, 1, false], + 0x3b: ['EXTCODESIZE', 700, 1, 1, true, true], + 0x3c: ['EXTCODECOPY', 700, 4, 0, true, true], + 0x3d: ['RETURNDATASIZE', 2, 0, 1, true], + 0x3e: ['RETURNDATACOPY', 3, 3, 0, true], + 0x3f: ['EXTCODEHASH', 400, 1, 1, true, true], + + // '0x40' range - block operations + 0x40: ['BLOCKHASH', 20, 1, 1, true, true], + 0x41: ['COINBASE', 2, 0, 1, true], + 0x42: ['TIMESTAMP', 2, 0, 1, true], + 0x43: ['NUMBER', 2, 0, 1, true], + 0x44: ['DIFFICULTY', 2, 0, 1, true], + 0x45: ['GASLIMIT', 2, 0, 1, true], + + // 0x50 range - 'storage' and execution + 0x50: ['POP', 2, 1, 0, false], + 0x51: ['MLOAD', 3, 1, 1, false], + 0x52: ['MSTORE', 3, 2, 0, false], + 0x53: ['MSTORE8', 3, 2, 0, false], + 0x54: ['SLOAD', 200, 1, 1, true, true], + 0x55: ['SSTORE', 0, 2, 0, true, true], + 0x56: ['JUMP', 8, 1, 0, false], + 0x57: ['JUMPI', 10, 2, 0, false], + 0x58: ['PC', 2, 0, 1, false], + 0x59: ['MSIZE', 2, 0, 1, false], + 0x5a: ['GAS', 2, 0, 1, false], + 0x5b: ['JUMPDEST', 1, 0, 0, false], + + // 0x60, range + 0x60: ['PUSH', 3, 0, 1, false], + 0x61: ['PUSH', 3, 0, 1, false], + 0x62: ['PUSH', 3, 0, 1, false], + 0x63: ['PUSH', 3, 0, 1, false], + 0x64: ['PUSH', 3, 0, 1, false], + 0x65: ['PUSH', 3, 0, 1, false], + 0x66: ['PUSH', 3, 0, 1, false], + 0x67: ['PUSH', 3, 0, 1, false], + 0x68: ['PUSH', 3, 0, 1, false], + 0x69: ['PUSH', 3, 0, 1, false], + 0x6a: ['PUSH', 3, 0, 1, false], + 0x6b: ['PUSH', 3, 0, 1, false], + 0x6c: ['PUSH', 3, 0, 1, false], + 0x6d: ['PUSH', 3, 0, 1, false], + 0x6e: ['PUSH', 3, 0, 1, false], + 0x6f: ['PUSH', 3, 0, 1, false], + 0x70: ['PUSH', 3, 0, 1, false], + 0x71: ['PUSH', 3, 0, 1, false], + 0x72: ['PUSH', 3, 0, 1, false], + 0x73: ['PUSH', 3, 0, 1, false], + 0x74: ['PUSH', 3, 0, 1, false], + 0x75: ['PUSH', 3, 0, 1, false], + 0x76: ['PUSH', 3, 0, 1, false], + 0x77: ['PUSH', 3, 0, 1, false], + 0x78: ['PUSH', 3, 0, 1, false], + 0x79: ['PUSH', 3, 0, 1, false], + 0x7a: ['PUSH', 3, 0, 1, false], + 0x7b: ['PUSH', 3, 0, 1, false], + 0x7c: ['PUSH', 3, 0, 1, false], + 0x7d: ['PUSH', 3, 0, 1, false], + 0x7e: ['PUSH', 3, 0, 1, false], + 0x7f: ['PUSH', 3, 0, 1, false], + + 0x80: ['DUP', 3, 0, 1, false], + 0x81: ['DUP', 3, 0, 1, false], + 0x82: ['DUP', 3, 0, 1, false], + 0x83: ['DUP', 3, 0, 1, false], + 0x84: ['DUP', 3, 0, 1, false], + 0x85: ['DUP', 3, 0, 1, false], + 0x86: ['DUP', 3, 0, 1, false], + 0x87: ['DUP', 3, 0, 1, false], + 0x88: ['DUP', 3, 0, 1, false], + 0x89: ['DUP', 3, 0, 1, false], + 0x8a: ['DUP', 3, 0, 1, false], + 0x8b: ['DUP', 3, 0, 1, false], + 0x8c: ['DUP', 3, 0, 1, false], + 0x8d: ['DUP', 3, 0, 1, false], + 0x8e: ['DUP', 3, 0, 1, false], + 0x8f: ['DUP', 3, 0, 1, false], + + 0x90: ['SWAP', 3, 0, 0, false], + 0x91: ['SWAP', 3, 0, 0, false], + 0x92: ['SWAP', 3, 0, 0, false], + 0x93: ['SWAP', 3, 0, 0, false], + 0x94: ['SWAP', 3, 0, 0, false], + 0x95: ['SWAP', 3, 0, 0, false], + 0x96: ['SWAP', 3, 0, 0, false], + 0x97: ['SWAP', 3, 0, 0, false], + 0x98: ['SWAP', 3, 0, 0, false], + 0x99: ['SWAP', 3, 0, 0, false], + 0x9a: ['SWAP', 3, 0, 0, false], + 0x9b: ['SWAP', 3, 0, 0, false], + 0x9c: ['SWAP', 3, 0, 0, false], + 0x9d: ['SWAP', 3, 0, 0, false], + 0x9e: ['SWAP', 3, 0, 0, false], + 0x9f: ['SWAP', 3, 0, 0, false], + + 0xa0: ['LOG', 375, 2, 0, false], + 0xa1: ['LOG', 375, 3, 0, false], + 0xa2: ['LOG', 375, 4, 0, false], + 0xa3: ['LOG', 375, 5, 0, false], + 0xa4: ['LOG', 375, 6, 0, false], + + // '0xf0' range - closures + 0xf0: ['CREATE', 32000, 3, 1, true, true], + 0xf1: ['CALL', 700, 7, 1, true, true], + 0xf2: ['CALLCODE', 700, 7, 1, true, true], + 0xf3: ['RETURN', 0, 2, 0, false], + 0xf4: ['DELEGATECALL', 700, 6, 1, true, true], + 0xf5: ['CREATE2', 32000, 4, 1, true, true], + 0xfa: ['STATICCALL', 700, 6, 1, true, true], + 0xfd: ['REVERT', 0, 2, 0, false], + + // '0x70', range - other + 0xfe: ['INVALID', 0, 0, 0, false], + 0xff: ['SELFDESTRUCT', 5000, 1, 0, false, true] +}; + +module.exports = function (op, full, freeLogs) { + var code = codes[op] ? codes[op] : ['INVALID', 0, 0, 0, false, false]; + var opcode = code[0]; + + if (full) { + if (opcode === 'LOG') { + opcode += op - 0xa0; + } + + if (opcode === 'PUSH') { + opcode += op - 0x5f; + } + + if (opcode === 'DUP') { + opcode += op - 0x7f; + } + + if (opcode === 'SWAP') { + opcode += op - 0x8f; + } + } + + var fee = code[1]; + + if (freeLogs) { + if (opcode === 'LOG') { + fee = 0; + } + } + + return { name: opcode, opcode: op, fee: fee, in: code[2], out: code[3], dynamic: code[4], async: code[5] }; +}; +},{}],637:[function(require,module,exports){ +(function (Buffer){ +const Common = require('ethereumjs-common').default +const utils = require('ethereumjs-util') +const BN = utils.BN + /** + * An object that repersents the block header + * @constructor + * @param {Array} data raw data, deserialized + * @param {Array} opts Options + * @param {String|Number} opts.chain The chain for the block header [default: 'mainnet'] + * @param {String} opts.hardfork Hardfork for the block header [default: null, block number-based behaviour] + * @param {Object} opts.common Alternatively pass a Common instance instead of setting chain/hardfork directly + * @prop {Buffer} parentHash the blocks' parent's hash + * @prop {Buffer} uncleHash sha3(rlp_encode(uncle_list)) + * @prop {Buffer} coinbase the miner address + * @prop {Buffer} stateRoot The root of a Merkle Patricia tree + * @prop {Buffer} transactionTrie the root of a Trie containing the transactions + * @prop {Buffer} receiptTrie the root of a Trie containing the transaction Reciept + * @prop {Buffer} bloom + * @prop {Buffer} difficulty + * @prop {Buffer} number the block's height + * @prop {Buffer} gasLimit + * @prop {Buffer} gasUsed + * @prop {Buffer} timestamp + * @prop {Buffer} extraData + * @prop {Array.} raw an array of buffers containing the raw blocks. + */ +var BlockHeader = module.exports = function (data, opts) { + opts = opts || {} + + if (opts.common) { + if (opts.chain) { + throw new Error('Instantiation with both opts.common and opts.chain parameter not allowed!') + } + this._common = opts.common + } else { + let chain = opts.chain ? opts.chain : 'mainnet' + let hardfork = opts.hardfork ? opts.hardfork : null + this._common = new Common(chain, hardfork) + } + + var fields = [{ + name: 'parentHash', + length: 32, + default: utils.zeros(32) + }, { + name: 'uncleHash', + default: utils.SHA3_RLP_ARRAY + }, { + name: 'coinbase', + length: 20, + default: utils.zeros(20) + }, { + name: 'stateRoot', + length: 32, + default: utils.zeros(32) + }, { + name: 'transactionsTrie', + length: 32, + default: utils.SHA3_RLP + }, { + name: 'receiptTrie', + length: 32, + default: utils.SHA3_RLP + }, { + name: 'bloom', + default: utils.zeros(256) + }, { + name: 'difficulty', + default: Buffer.from([]) + }, { + name: 'number', + // TODO: params.homeSteadForkNumber.v left for legacy reasons, replace on future release + default: utils.intToBuffer(1150000) + }, { + name: 'gasLimit', + default: Buffer.from('ffffffffffffff', 'hex') + }, { + name: 'gasUsed', + empty: true, + default: Buffer.from([]) + }, { + name: 'timestamp', + default: Buffer.from([]) + }, { + name: 'extraData', + allowZero: true, + empty: true, + default: Buffer.from([]) + }, { + name: 'mixHash', + default: utils.zeros(32) + // length: 32 + }, { + name: 'nonce', + default: utils.zeros(8) // sha3(42) + }] + utils.defineProperties(this, fields, data) +} + +/** + * Returns the canoncical difficulty of the block + * @method canonicalDifficulty + * @param {Block} parentBlock the parent `Block` of the this header + * @return {BN} + */ +BlockHeader.prototype.canonicalDifficulty = function (parentBlock) { + const hardfork = this._common.hardfork() || this._common.activeHardfork(utils.bufferToInt(this.number)) + const blockTs = new BN(this.timestamp) + const parentTs = new BN(parentBlock.header.timestamp) + const parentDif = new BN(parentBlock.header.difficulty) + const minimumDifficulty = new BN(this._common.param('pow', 'minimumDifficulty', hardfork)) + var offset = parentDif.div(new BN(this._common.param('pow', 'difficultyBoundDivisor', hardfork))) + var num = new BN(this.number) + var a + var cutoff + var dif + + if (this._common.hardforkGteHardfork(hardfork, 'byzantium')) { + // max((2 if len(parent.uncles) else 1) - ((timestamp - parent.timestamp) // 9), -99) (EIP100) + var uncleAddend = parentBlock.header.uncleHash.equals(utils.SHA3_RLP_ARRAY) ? 1 : 2 + a = blockTs.sub(parentTs).idivn(9).ineg().iaddn(uncleAddend) + cutoff = new BN(-99) + // MAX(cutoff, a) + if (cutoff.cmp(a) === 1) { + a = cutoff + } + dif = parentDif.add(offset.mul(a)) + } + + if (this._common.hardforkGteHardfork(hardfork, 'constantinople')) { + // Constantinople difficulty bomb delay (EIP1234) + num.isubn(5000000) + if (num.ltn(0)) { + num = new BN(0) + } + } else if (this._common.hardforkGteHardfork(hardfork, 'byzantium')) { + // Byzantium difficulty bomb delay (EIP649) + num.isubn(3000000) + if (num.ltn(0)) { + num = new BN(0) + } + } else if (this._common.hardforkGteHardfork(hardfork, 'homestead')) { + // 1 - (block_timestamp - parent_timestamp) // 10 + a = blockTs.sub(parentTs).idivn(10).ineg().iaddn(1) + cutoff = new BN(-99) + // MAX(cutoff, a) + if (cutoff.cmp(a) === 1) { + a = cutoff + } + dif = parentDif.add(offset.mul(a)) + } else { + // pre-homestead + if (parentTs.addn(this._common.param('pow', 'durationLimit', hardfork)).cmp(blockTs) === 1) { + dif = offset.add(parentDif) + } else { + dif = parentDif.sub(offset) + } + } + + var exp = num.idivn(100000).isubn(2) + if (!exp.isNeg()) { + dif.iadd(new BN(2).pow(exp)) + } + + if (dif.cmp(minimumDifficulty) === -1) { + dif = minimumDifficulty + } + + return dif +} + +/** + * checks that the block's `difficuly` matches the canonical difficulty + * @method validateDifficulty + * @param {Block} parentBlock this block's parent + * @return {Boolean} + */ +BlockHeader.prototype.validateDifficulty = function (parentBlock) { + const dif = this.canonicalDifficulty(parentBlock) + return dif.cmp(new BN(this.difficulty)) === 0 +} + +/** + * Validates the gasLimit + * @method validateGasLimit + * @param {Block} parentBlock this block's parent + * @returns {Boolean} + */ +BlockHeader.prototype.validateGasLimit = function (parentBlock) { + const pGasLimit = new BN(parentBlock.header.gasLimit) + const gasLimit = new BN(this.gasLimit) + const hardfork = this._common.hardfork() ? this._common.hardfork() : this._common.activeHardfork(this.number) + const a = pGasLimit.div(new BN(this._common.param('gasConfig', 'gasLimitBoundDivisor', hardfork))) + const maxGasLimit = pGasLimit.add(a) + const minGasLimit = pGasLimit.sub(a) + + return gasLimit.lt(maxGasLimit) && gasLimit.gt(minGasLimit) && gasLimit.gte(this._common.param('gasConfig', 'minGasLimit', hardfork)) +} + +/** + * Validates the entire block header + * @method validate + * @param {Blockchain} blockChain the blockchain that this block is validating against + * @param {Bignum} [height] if this is an uncle header, this is the height of the block that is including it + * @param {Function} cb the callback function. The callback is given an `error` if the block is invalid + */ +BlockHeader.prototype.validate = function (blockchain, height, cb) { + var self = this + if (arguments.length === 2) { + cb = height + height = false + } + + if (this.isGenesis()) { + return cb() + } + + // find the blocks parent + blockchain.getBlock(self.parentHash, function (err, parentBlock) { + if (err) { + return cb('could not find parent block') + } + + self.parentBlock = parentBlock + + var number = new BN(self.number) + if (number.cmp(new BN(parentBlock.header.number).iaddn(1)) !== 0) { + return cb('invalid number') + } + + if (height) { + var dif = height.sub(new BN(parentBlock.header.number)) + if (!(dif.cmpn(8) === -1 && dif.cmpn(1) === 1)) { + return cb('uncle block has a parent that is too old or to young') + } + } + + if (!self.validateDifficulty(parentBlock)) { + return cb('invalid Difficulty') + } + + if (!self.validateGasLimit(parentBlock)) { + return cb('invalid gas limit') + } + + if (utils.bufferToInt(parentBlock.header.number) + 1 !== utils.bufferToInt(self.number)) { + return cb('invalid heigth') + } + + if (utils.bufferToInt(self.timestamp) <= utils.bufferToInt(parentBlock.header.timestamp)) { + return cb('invalid timestamp') + } + + const hardfork = self._common.hardfork() ? self._common.hardfork() : self._common.activeHardfork(height) + if (self.extraData.length > self._common.param('vm', 'maxExtraDataSize', hardfork)) { + return cb('invalid amount of extra data') + } + + cb() + }) +} + +/** + * Returns the sha3 hash of the blockheader + * @method hash + * @return {Buffer} + */ +BlockHeader.prototype.hash = function () { + return utils.rlphash(this.raw) +} + +/** + * checks if the blockheader is a genesis header + * @method isGenesis + * @return {Boolean} + */ +BlockHeader.prototype.isGenesis = function () { + return this.number.toString('hex') === '' +} + +/** + * turns the header into the canonical genesis block header + * @method setGenesisParams + */ +BlockHeader.prototype.setGenesisParams = function () { + this.timestamp = this._common.genesis().timestamp + this.gasLimit = this._common.genesis().gasLimit + this.difficulty = this._common.genesis().difficulty + this.extraData = this._common.genesis().extraData + this.nonce = this._common.genesis().nonce + this.stateRoot = this._common.genesis().stateRoot + this.number = Buffer.from([]) +} + +}).call(this,require("buffer").Buffer) +},{"buffer":113,"ethereumjs-common":609,"ethereumjs-util":639}],638:[function(require,module,exports){ +(function (Buffer){ +const Common = require('ethereumjs-common').default +const ethUtil = require('ethereumjs-util') +const Tx = require('ethereumjs-tx') +const Trie = require('merkle-patricia-tree') +const BN = ethUtil.BN +const rlp = ethUtil.rlp +const async = require('async') +const BlockHeader = require('./header') + +/** + * Creates a new block object + * @constructor the raw serialized or the deserialized block. + * @param {Array|Buffer|Object} data + * @param {Array} opts Options + * @param {String|Number} opts.chain The chain for the block [default: 'mainnet'] + * @param {String} opts.hardfork Hardfork for the block [default: null, block number-based behaviour] + * @param {Object} opts.common Alternatively pass a Common instance (ethereumjs-common) instead of setting chain/hardfork directly + * @prop {Header} header the block's header + * @prop {Array.
} uncleList an array of uncle headers + * @prop {Array.} raw an array of buffers containing the raw blocks. + */ +var Block = module.exports = function (data, opts) { + opts = opts || {} + + if (opts.common) { + if (opts.chain) { + throw new Error('Instantiation with both opts.common and opts.chain parameter not allowed!') + } + this._common = opts.common + } else { + let chain = opts.chain ? opts.chain : 'mainnet' + let hardfork = opts.hardfork ? opts.hardfork : null + this._common = new Common(chain, hardfork) + } + + this.transactions = [] + this.uncleHeaders = [] + this._inBlockChain = false + this.txTrie = new Trie() + + Object.defineProperty(this, 'raw', { + get: function () { + return this.serialize(false) + } + }) + + var rawTransactions, rawUncleHeaders + + // defaults + if (!data) { + data = [[], [], []] + } + + if (Buffer.isBuffer(data)) { + data = rlp.decode(data) + } + + if (Array.isArray(data)) { + this.header = new BlockHeader(data[0], opts) + rawTransactions = data[1] + rawUncleHeaders = data[2] + } else { + this.header = new BlockHeader(data.header, opts) + rawTransactions = data.transactions || [] + rawUncleHeaders = data.uncleHeaders || [] + } + + // parse uncle headers + for (var i = 0; i < rawUncleHeaders.length; i++) { + this.uncleHeaders.push(new BlockHeader(rawUncleHeaders[i], opts)) + } + + // parse transactions + for (i = 0; i < rawTransactions.length; i++) { + var tx = new Tx(rawTransactions[i]) + tx._homestead = true + this.transactions.push(tx) + } +} + +Block.Header = BlockHeader + +/** + * Produces a hash the RLP of the block + * @method hash + */ +Block.prototype.hash = function () { + return this.header.hash() +} + +/** + * Determines if a given block is the genesis block + * @method isGenisis + * @return Boolean + */ +Block.prototype.isGenesis = function () { + return this.header.isGenesis() +} + +/** + * turns the block into the canonical genesis block + * @method setGenesisParams + */ +Block.prototype.setGenesisParams = function () { + this.header.setGenesisParams() +} + +/** + * Produces a serialization of the block. + * @method serialize + * @param {Boolean} rlpEncode whether to rlp encode the block or not + */ +Block.prototype.serialize = function (rlpEncode) { + var raw = [this.header.raw, [], + [] + ] + + // rlpEnode defaults to true + if (typeof rlpEncode === 'undefined') { + rlpEncode = true + } + + this.transactions.forEach(function (tx) { + raw[1].push(tx.raw) + }) + + this.uncleHeaders.forEach(function (uncle) { + raw[2].push(uncle.raw) + }) + + return rlpEncode ? rlp.encode(raw) : raw +} + +/** + * Generate transaction trie. The tx trie must be generated before the transaction trie can + * be validated with `validateTransactionTrie` + * @method genTxTrie + * @param {Function} cb the callback + */ +Block.prototype.genTxTrie = function (cb) { + var i = 0 + var self = this + + async.eachSeries(this.transactions, function (tx, done) { + self.txTrie.put(rlp.encode(i), tx.serialize(), done) + i++ + }, cb) +} + +/** + * Validates the transaction trie + * @method validateTransactionTrie + * @return {Boolean} + */ +Block.prototype.validateTransactionsTrie = function () { + var txT = this.header.transactionsTrie.toString('hex') + if (this.transactions.length) { + return txT === this.txTrie.root.toString('hex') + } else { + return txT === ethUtil.SHA3_RLP.toString('hex') + } +} + +/** + * Validates the transactions + * @method validateTransactions + * @param {Boolean} [stringError=false] whether to return a string with a dscription of why the validation failed or return a Bloolean + * @return {Boolean} + */ +Block.prototype.validateTransactions = function (stringError) { + var errors = [] + + this.transactions.forEach(function (tx, i) { + var error = tx.validate(true) + if (error) { + errors.push(error + ' at tx ' + i) + } + }) + + if (stringError === undefined || stringError === false) { + return errors.length === 0 + } else { + return arrayToString(errors) + } +} + +/** + * Validates the entire block. Returns a string to the callback if block is invalid + * @method validate + * @param {BlockChain} blockChain the blockchain that this block wants to be part of + * @param {Function} cb the callback which is given a `String` if the block is not valid + */ +Block.prototype.validate = function (blockChain, cb) { + var self = this + var errors = [] + + async.parallel([ + // validate uncles + self.validateUncles.bind(self, blockChain), + // validate block + self.header.validate.bind(self.header, blockChain), + // generate the transaction trie + self.genTxTrie.bind(self) + ], function (err) { + if (err) { + errors.push(err) + } + + if (!self.validateTransactionsTrie()) { + errors.push('invalid transaction trie') + } + + var txErrors = self.validateTransactions(true) + if (txErrors !== '') { + errors.push(txErrors) + } + + if (!self.validateUnclesHash()) { + errors.push('invalid uncle hash') + } + + cb(arrayToString(errors)) + }) +} + +/** + * Validates the uncle's hash + * @method validateUncleHash + * @return {Boolean} + */ +Block.prototype.validateUnclesHash = function () { + var raw = [] + this.uncleHeaders.forEach(function (uncle) { + raw.push(uncle.raw) + }) + + raw = rlp.encode(raw) + return ethUtil.sha3(raw).toString('hex') === this.header.uncleHash.toString('hex') +} + +/** + * Validates the uncles that are in the block if any. Returns a string to the callback if uncles are invalid + * @method validateUncles + * @param {Blockchain} blockChaina an instance of the Blockchain + * @param {Function} cb the callback + */ +Block.prototype.validateUncles = function (blockChain, cb) { + if (this.isGenesis()) { + return cb() + } + + var self = this + + if (self.uncleHeaders.length > 2) { + return cb('too many uncle headers') + } + + var uncleHashes = self.uncleHeaders.map(function (header) { + return header.hash().toString('hex') + }) + + if (!((new Set(uncleHashes)).size === uncleHashes.length)) { + return cb('duplicate uncles') + } + + async.each(self.uncleHeaders, function (uncle, cb2) { + var height = new BN(self.header.number) + async.parallel([ + uncle.validate.bind(uncle, blockChain, height), + // check to make sure the uncle is not already in the blockchain + function (cb3) { + blockChain.getDetails(uncle.hash(), function (err, blockInfo) { + // TODO: remove uncles from BC + if (blockInfo && blockInfo.isUncle) { + cb3(err || 'uncle already included') + } else { + cb3() + } + }) + } + ], cb2) + }, cb) +} + +/** + * Converts the block toJSON + * @method toJSON + * @param {Bool} labeled whether to create an labeled object or an array + * @return {Object} + */ +Block.prototype.toJSON = function (labeled) { + if (labeled) { + var obj = { + header: this.header.toJSON(true), + transactions: [], + uncleHeaders: [] + } + + this.transactions.forEach(function (tx) { + obj.transactions.push(tx.toJSON(labeled)) + }) + + this.uncleHeaders.forEach(function (uh) { + obj.uncleHeaders.push(uh.toJSON()) + }) + return obj + } else { + return ethUtil.baToJSON(this.raw) + } +} + +function arrayToString (array) { + try { + return array.reduce(function (str, err) { + if (str) { + str += ' ' + } + return str + err + }) + } catch (e) { + return '' + } +} + +}).call(this,{"isBuffer":require("../../../is-buffer/index.js")}) +},{"../../../is-buffer/index.js":839,"./header":637,"async":42,"ethereumjs-common":609,"ethereumjs-tx":610,"ethereumjs-util":639,"merkle-patricia-tree":947}],639:[function(require,module,exports){ +arguments[4][612][0].apply(exports,arguments) +},{"assert":35,"bn.js":66,"create-hash":466,"dup":612,"ethjs-util":707,"keccak":868,"rlp":1331,"safe-buffer":1334,"secp256k1":1339}],640:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var BN = require("bn.js"); +exports.BN = BN; +var rlp = require("rlp"); +exports.rlp = rlp; +var createKeccakHash = require('keccak'); +var secp256k1 = require('secp256k1'); +exports.secp256k1 = secp256k1; +var assert = require('assert'); +var createHash = require('create-hash'); +var Buffer = require('safe-buffer').Buffer; +var ethjsUtil = require('ethjs-util'); +Object.assign(exports, ethjsUtil); +/** + * The max integer that this VM can handle + */ +exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16); +/** + * 2^256 + */ +exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16); +/** + * Keccak-256 hash of null + */ +exports.KECCAK256_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'; +/** + * Keccak-256 hash of null + */ +exports.KECCAK256_NULL = Buffer.from(exports.KECCAK256_NULL_S, 'hex'); +/** + * Keccak-256 of an RLP of an empty array + */ +exports.KECCAK256_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'; +/** + * Keccak-256 of an RLP of an empty array + */ +exports.KECCAK256_RLP_ARRAY = Buffer.from(exports.KECCAK256_RLP_ARRAY_S, 'hex'); +/** + * Keccak-256 hash of the RLP of null + */ +exports.KECCAK256_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'; +/** + * Keccak-256 hash of the RLP of null + */ +exports.KECCAK256_RLP = Buffer.from(exports.KECCAK256_RLP_S, 'hex'); +/** + * Returns a buffer filled with 0s. + * @param bytes the number of bytes the buffer should be + */ +exports.zeros = function (bytes) { + return Buffer.allocUnsafe(bytes).fill(0); +}; +/** + * Returns a zero address. + */ +exports.zeroAddress = function () { + var addressLength = 20; + var addr = exports.zeros(addressLength); + return exports.bufferToHex(addr); +}; +/** + * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes. + * Or it truncates the beginning if it exceeds. + * @param msg the value to pad (Buffer|Array) + * @param length the number of bytes the output should be + * @param right whether to start padding form the left or right + * @return (Buffer|Array) + */ +exports.setLengthLeft = function (msg, length, right) { + if (right === void 0) { right = false; } + var buf = exports.zeros(length); + msg = exports.toBuffer(msg); + if (right) { + if (msg.length < length) { + msg.copy(buf); + return buf; + } + return msg.slice(0, length); + } + else { + if (msg.length < length) { + msg.copy(buf, length - msg.length); + return buf; + } + return msg.slice(-length); + } +}; +exports.setLength = exports.setLengthLeft; +/** + * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes. + * Or it truncates the beginning if it exceeds. + * @param msg the value to pad (Buffer|Array) + * @param length the number of bytes the output should be + * @return (Buffer|Array) + */ +exports.setLengthRight = function (msg, length) { + return exports.setLength(msg, length, true); +}; +/** + * Trims leading zeros from a `Buffer` or an `Array`. + * @param a (Buffer|Array|String) + * @return (Buffer|Array|String) + */ +exports.unpad = function (a) { + a = ethjsUtil.stripHexPrefix(a); + var first = a[0]; + while (a.length > 0 && first.toString() === '0') { + a = a.slice(1); + first = a[0]; + } + return a; +}; +exports.stripZeros = exports.unpad; +/** + * Attempts to turn a value into a `Buffer`. As input it supports `Buffer`, `String`, `Number`, null/undefined, `BN` and other objects with a `toArray()` method. + * @param v the value + */ +exports.toBuffer = function (v) { + if (!Buffer.isBuffer(v)) { + if (Array.isArray(v)) { + v = Buffer.from(v); + } + else if (typeof v === 'string') { + if (exports.isHexString(v)) { + v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex'); + } + else { + v = Buffer.from(v); + } + } + else if (typeof v === 'number') { + v = exports.intToBuffer(v); + } + else if (v === null || v === undefined) { + v = Buffer.allocUnsafe(0); + } + else if (BN.isBN(v)) { + v = v.toArrayLike(Buffer); + } + else if (v.toArray) { + // converts a BN to a Buffer + v = Buffer.from(v.toArray()); + } + else { + throw new Error('invalid type'); + } + } + return v; +}; +/** + * Converts a `Buffer` to a `Number`. + * @param buf `Buffer` object to convert + * @throws If the input number exceeds 53 bits. + */ +exports.bufferToInt = function (buf) { + return new BN(exports.toBuffer(buf)).toNumber(); +}; +/** + * Converts a `Buffer` into a hex `String`. + * @param buf `Buffer` object to convert + */ +exports.bufferToHex = function (buf) { + buf = exports.toBuffer(buf); + return '0x' + buf.toString('hex'); +}; +/** + * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers. + * @param num Signed integer value + */ +exports.fromSigned = function (num) { + return new BN(num).fromTwos(256); +}; +/** + * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers. + * @param num + */ +exports.toUnsigned = function (num) { + return Buffer.from(num.toTwos(256).toArray()); +}; +/** + * Creates Keccak hash of the input + * @param a The input data (Buffer|Array|String|Number) + * @param bits The Keccak width + */ +exports.keccak = function (a, bits) { + if (bits === void 0) { bits = 256; } + a = exports.toBuffer(a); + if (!bits) + bits = 256; + return createKeccakHash("keccak" + bits) + .update(a) + .digest(); +}; +/** + * Creates Keccak-256 hash of the input, alias for keccak(a, 256). + * @param a The input data (Buffer|Array|String|Number) + */ +exports.keccak256 = function (a) { + return exports.keccak(a); +}; +/** + * Creates SHA256 hash of the input. + * @param a The input data (Buffer|Array|String|Number) + */ +exports.sha256 = function (a) { + a = exports.toBuffer(a); + return createHash('sha256') + .update(a) + .digest(); +}; +/** + * Creates RIPEMD160 hash of the input. + * @param a The input data (Buffer|Array|String|Number) + * @param padded Whether it should be padded to 256 bits or not + */ +exports.ripemd160 = function (a, padded) { + a = exports.toBuffer(a); + var hash = createHash('rmd160') + .update(a) + .digest(); + if (padded === true) { + return exports.setLength(hash, 32); + } + else { + return hash; + } +}; +/** + * Creates SHA-3 hash of the RLP encoded version of the input. + * @param a The input data + */ +exports.rlphash = function (a) { + return exports.keccak(rlp.encode(a)); +}; +/** + * Checks if the private key satisfies the rules of the curve secp256k1. + */ +exports.isValidPrivate = function (privateKey) { + return secp256k1.privateKeyVerify(privateKey); +}; +/** + * Checks if the public key satisfies the rules of the curve secp256k1 + * and the requirements of Ethereum. + * @param publicKey The two points of an uncompressed key, unless sanitize is enabled + * @param sanitize Accept public keys in other formats + */ +exports.isValidPublic = function (publicKey, sanitize) { + if (sanitize === void 0) { sanitize = false; } + if (publicKey.length === 64) { + // Convert to SEC1 for secp256k1 + return secp256k1.publicKeyVerify(Buffer.concat([Buffer.from([4]), publicKey])); + } + if (!sanitize) { + return false; + } + return secp256k1.publicKeyVerify(publicKey); +}; +/** + * Returns the ethereum address of a given public key. + * Accepts "Ethereum public keys" and SEC1 encoded keys. + * @param pubKey The two points of an uncompressed key, unless sanitize is enabled + * @param sanitize Accept public keys in other formats + */ +exports.pubToAddress = function (pubKey, sanitize) { + if (sanitize === void 0) { sanitize = false; } + pubKey = exports.toBuffer(pubKey); + if (sanitize && pubKey.length !== 64) { + pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1); + } + assert(pubKey.length === 64); + // Only take the lower 160bits of the hash + return exports.keccak(pubKey).slice(-20); +}; +exports.publicToAddress = exports.pubToAddress; +/** + * Returns the ethereum public key of a given private key. + * @param privateKey A private key must be 256 bits wide + */ +exports.privateToPublic = function (privateKey) { + privateKey = exports.toBuffer(privateKey); + // skip the type flag and use the X, Y points + return secp256k1.publicKeyCreate(privateKey, false).slice(1); +}; +/** + * Converts a public key to the Ethereum format. + */ +exports.importPublic = function (publicKey) { + publicKey = exports.toBuffer(publicKey); + if (publicKey.length !== 64) { + publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1); + } + return publicKey; +}; +/** + * Returns the ECDSA signature of a message hash. + */ +exports.ecsign = function (msgHash, privateKey, chainId) { + var sig = secp256k1.sign(msgHash, privateKey); + var recovery = sig.recovery; + var ret = { + r: sig.signature.slice(0, 32), + s: sig.signature.slice(32, 64), + v: chainId ? recovery + (chainId * 2 + 35) : recovery + 27, + }; + return ret; +}; +/** + * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call. + * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign` + * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key + * used to produce the signature. + */ +exports.hashPersonalMessage = function (message) { + var prefix = exports.toBuffer("\u0019Ethereum Signed Message:\n" + message.length.toString()); + return exports.keccak(Buffer.concat([prefix, message])); +}; +/** + * ECDSA public key recovery from signature. + * @returns Recovered public key + */ +exports.ecrecover = function (msgHash, v, r, s, chainId) { + var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64); + var recovery = calculateSigRecovery(v, chainId); + if (!isValidSigRecovery(recovery)) { + throw new Error('Invalid signature v value'); + } + var senderPubKey = secp256k1.recover(msgHash, signature, recovery); + return secp256k1.publicKeyConvert(senderPubKey, false).slice(1); +}; +/** + * Convert signature parameters into the format of `eth_sign` RPC method. + * @returns Signature + */ +exports.toRpcSig = function (v, r, s, chainId) { + var recovery = calculateSigRecovery(v, chainId); + if (!isValidSigRecovery(recovery)) { + throw new Error('Invalid signature v value'); + } + // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin + return exports.bufferToHex(Buffer.concat([exports.setLengthLeft(r, 32), exports.setLengthLeft(s, 32), exports.toBuffer(v)])); +}; +/** + * Convert signature format of the `eth_sign` RPC method to signature parameters + * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053 + */ +exports.fromRpcSig = function (sig) { + var buf = exports.toBuffer(sig); + // NOTE: with potential introduction of chainId this might need to be updated + if (buf.length !== 65) { + throw new Error('Invalid signature length'); + } + var v = buf[64]; + // support both versions of `eth_sign` responses + if (v < 27) { + v += 27; + } + return { + v: v, + r: buf.slice(0, 32), + s: buf.slice(32, 64), + }; +}; +/** + * Returns the ethereum address of a given private key. + * @param privateKey A private key must be 256 bits wide + */ +exports.privateToAddress = function (privateKey) { + return exports.publicToAddress(exports.privateToPublic(privateKey)); +}; +/** + * Checks if the address is a valid. Accepts checksummed addresses too. + */ +exports.isValidAddress = function (address) { + return /^0x[0-9a-fA-F]{40}$/.test(address); +}; +/** + * Checks if a given address is a zero address. + */ +exports.isZeroAddress = function (address) { + var zeroAddr = exports.zeroAddress(); + return zeroAddr === exports.addHexPrefix(address); +}; +/** + * Returns a checksummed address. + */ +exports.toChecksumAddress = function (address) { + address = ethjsUtil.stripHexPrefix(address).toLowerCase(); + var hash = exports.keccak(address).toString('hex'); + var ret = '0x'; + for (var i = 0; i < address.length; i++) { + if (parseInt(hash[i], 16) >= 8) { + ret += address[i].toUpperCase(); + } + else { + ret += address[i]; + } + } + return ret; +}; +/** + * Checks if the address is a valid checksummed address. + */ +exports.isValidChecksumAddress = function (address) { + return exports.isValidAddress(address) && exports.toChecksumAddress(address) === address; +}; +/** + * Generates an address of a newly created contract. + * @param from The address which is creating this new address + * @param nonce The nonce of the from account + */ +exports.generateAddress = function (from, nonce) { + from = exports.toBuffer(from); + var nonceBN = new BN(nonce); + if (nonceBN.isZero()) { + // in RLP we want to encode null in the case of zero nonce + // read the RLP documentation for an answer if you dare + return exports.rlphash([from, null]).slice(-20); + } + // Only take the lower 160bits of the hash + return exports.rlphash([from, Buffer.from(nonceBN.toArray())]).slice(-20); +}; +/** + * Generates an address for a contract created using CREATE2. + * @param from The address which is creating this new address + * @param salt A salt + * @param initCode The init code of the contract being created + */ +exports.generateAddress2 = function (from, salt, initCode) { + var fromBuf = exports.toBuffer(from); + var saltBuf = exports.toBuffer(salt); + var initCodeBuf = exports.toBuffer(initCode); + assert(fromBuf.length === 20); + assert(saltBuf.length === 32); + var address = exports.keccak256(Buffer.concat([Buffer.from('ff', 'hex'), fromBuf, saltBuf, exports.keccak256(initCodeBuf)])); + return address.slice(-20); +}; +/** + * Returns true if the supplied address belongs to a precompiled account (Byzantium). + */ +exports.isPrecompiled = function (address) { + var a = exports.unpad(address); + return a.length === 1 && a[0] >= 1 && a[0] <= 8; +}; +/** + * Adds "0x" to a given `String` if it does not already start with "0x". + */ +exports.addHexPrefix = function (str) { + if (typeof str !== 'string') { + return str; + } + return ethjsUtil.isHexPrefixed(str) ? str : '0x' + str; +}; +/** + * Validate a ECDSA signature. + * @param homesteadOrLater Indicates whether this is being used on either the homestead hardfork or a later one + */ +exports.isValidSignature = function (v, r, s, homesteadOrLater, chainId) { + if (homesteadOrLater === void 0) { homesteadOrLater = true; } + var SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16); + var SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16); + if (r.length !== 32 || s.length !== 32) { + return false; + } + if (!isValidSigRecovery(calculateSigRecovery(v, chainId))) { + return false; + } + var rBN = new BN(r); + var sBN = new BN(s); + if (rBN.isZero() || rBN.gt(SECP256K1_N) || sBN.isZero() || sBN.gt(SECP256K1_N)) { + return false; + } + if (homesteadOrLater && sBN.cmp(SECP256K1_N_DIV_2) === 1) { + return false; + } + return true; +}; +/** + * Converts a `Buffer` or `Array` to JSON. + * @param ba (Buffer|Array) + * @return (Array|String|null) + */ +exports.baToJSON = function (ba) { + if (Buffer.isBuffer(ba)) { + return "0x" + ba.toString('hex'); + } + else if (ba instanceof Array) { + var array = []; + for (var i = 0; i < ba.length; i++) { + array.push(exports.baToJSON(ba[i])); + } + return array; + } +}; +/** + * Defines properties on a `Object`. It make the assumption that underlying data is binary. + * @param self the `Object` to define properties on + * @param fields an array fields to define. Fields can contain: + * * `name` - the name of the properties + * * `length` - the number of bytes the field can have + * * `allowLess` - if the field can be less than the length + * * `allowEmpty` + * @param data data to be validated against the definitions + */ +exports.defineProperties = function (self, fields, data) { + self.raw = []; + self._fields = []; + // attach the `toJSON` + self.toJSON = function (label) { + if (label === void 0) { label = false; } + if (label) { + var obj_1 = {}; + self._fields.forEach(function (field) { + obj_1[field] = "0x" + self[field].toString('hex'); + }); + return obj_1; + } + return exports.baToJSON(self.raw); + }; + self.serialize = function serialize() { + return rlp.encode(self.raw); + }; + fields.forEach(function (field, i) { + self._fields.push(field.name); + function getter() { + return self.raw[i]; + } + function setter(v) { + v = exports.toBuffer(v); + if (v.toString('hex') === '00' && !field.allowZero) { + v = Buffer.allocUnsafe(0); + } + if (field.allowLess && field.length) { + v = exports.stripZeros(v); + assert(field.length >= v.length, "The field " + field.name + " must not have more " + field.length + " bytes"); + } + else if (!(field.allowZero && v.length === 0) && field.length) { + assert(field.length === v.length, "The field " + field.name + " must have byte length of " + field.length); + } + self.raw[i] = v; + } + Object.defineProperty(self, field.name, { + enumerable: true, + configurable: true, + get: getter, + set: setter, + }); + if (field.default) { + self[field.name] = field.default; + } + // attach alias + if (field.alias) { + Object.defineProperty(self, field.alias, { + enumerable: false, + configurable: true, + set: setter, + get: getter, + }); + } + }); + // if the constuctor is passed data + if (data) { + if (typeof data === 'string') { + data = Buffer.from(ethjsUtil.stripHexPrefix(data), 'hex'); + } + if (Buffer.isBuffer(data)) { + data = rlp.decode(data); + } + if (Array.isArray(data)) { + if (data.length > self._fields.length) { + throw new Error('wrong number of fields in data'); + } + // make sure all the items are buffers + data.forEach(function (d, i) { + self[self._fields[i]] = exports.toBuffer(d); + }); + } + else if (typeof data === 'object') { + var keys_1 = Object.keys(data); + fields.forEach(function (field) { + if (keys_1.indexOf(field.name) !== -1) + self[field.name] = data[field.name]; + if (keys_1.indexOf(field.alias) !== -1) + self[field.alias] = data[field.alias]; + }); + } + else { + throw new Error('invalid data'); + } + } +}; +function calculateSigRecovery(v, chainId) { + return chainId ? v - (2 * chainId + 35) : v - 27; +} +function isValidSigRecovery(recovery) { + return recovery === 0 || recovery === 1; +} + +},{"assert":35,"bn.js":66,"create-hash":466,"ethjs-util":707,"keccak":868,"rlp":1331,"safe-buffer":1334,"secp256k1":1339}],641:[function(require,module,exports){ +'use strict'; + +var Interface = require('./interface.js'); + +var utils = (function() { + var convert = require('../utils/convert.js'); + return { + defineProperty: require('../utils/properties.js').defineProperty, + + getAddress: require('../utils/address.js').getAddress, + + bigNumberify: require('../utils/bignumber.js').bigNumberify, + + arrayify: convert.arrayify, + hexlify: convert.hexlify, + }; +})(); + +var errors = require('../utils/errors'); + +var allowedTransactionKeys = { + data: true, from: true, gasLimit: true, gasPrice:true, nonce: true, to: true, value: true +} + +function copyObject(object) { + var result = {}; + for (var key in object) { + result[key] = object[key]; + } + return result; +} + + +function Contract(addressOrName, contractInterface, signerOrProvider) { + if (!(this instanceof Contract)) { throw new Error('missing new'); } + + // @TODO: Maybe still check the addressOrName looks like a valid address or name? + //address = utils.getAddress(address); + + if (!(contractInterface instanceof Interface)) { + contractInterface = new Interface(contractInterface); + } + + if (!signerOrProvider) { throw new Error('missing signer or provider'); } + + var signer = signerOrProvider; + var provider = null; + + if (signerOrProvider.provider) { + provider = signerOrProvider.provider; + } else { + provider = signerOrProvider; + signer = null; + } + + utils.defineProperty(this, 'address', addressOrName); + utils.defineProperty(this, 'interface', contractInterface); + utils.defineProperty(this, 'signer', signer); + utils.defineProperty(this, 'provider', provider); + + var addressPromise = provider.resolveName(addressOrName); + + function runMethod(method, estimateOnly) { + return function() { + var transaction = {} + + var params = Array.prototype.slice.call(arguments); + + // If 1 extra parameter was passed in, it contains overrides + if (params.length === method.inputs.types.length + 1 && typeof(params[params.length - 1]) === 'object') { + transaction = copyObject(params.pop()); + + // Check for unexpected keys (e.g. using "gas" instead of "gasLimit") + for (var key in transaction) { + if (!allowedTransactionKeys[key]) { + throw new Error('unknown transaction override ' + key); + } + } + } + + // Check overrides make sense + ['data', 'to'].forEach(function(key) { + if (transaction[key] != null) { + throw new Error('cannot override ' + key) ; + } + }); + + var call = method.apply(contractInterface, params); + + // Send to the contract address + transaction.to = addressOrName; + + // Set the transaction data + transaction.data = call.data; + + switch (call.type) { + case 'call': + + // Call (constant functions) always cost 0 ether + if (estimateOnly) { + return Promise.resolve(new utils.bigNumberify(0)); + } + + // Check overrides make sense + ['gasLimit', 'gasPrice', 'value'].forEach(function(key) { + if (transaction[key] != null) { + throw new Error('call cannot override ' + key) ; + } + }); + + var fromPromise = null; + if (transaction.from == null && signer && signer.getAddress) { + fromPromise = signer.getAddress(); + if (!(fromPromise instanceof Promise)) { + fromPromise = Promise.resolve(fromPromise); + } + } else { + fromPromise = Promise.resolve(null); + } + + return fromPromise.then(function(address) { + if (address) { + transaction.from = utils.getAddress(address); + } + return provider.call(transaction); + + }).then(function(value) { + try { + if ((utils.arrayify(value).length % 32) !== 0) { + throw new Error('call exception'); + } + var result = call.parse(value); + } catch (error) { + if ((value === '0x' && method.outputs.types.length > 0) || error.message === 'call exception') { + errors.throwError('call exception', errors.CALL_EXCEPTION, { + address: addressOrName, + method: call.signature, + value: params + }); + } + throw error; + } + if (method.outputs.types.length === 1) { + result = result[0]; + } + return result; + }); + + case 'transaction': + if (!signer) { return Promise.reject(new Error('missing signer')); } + + // Make sure they aren't overriding something they shouldn't + if (transaction.from != null) { + throw new Error('transaction cannot override from') ; + } + + // Only computing the transaction estimate + if (estimateOnly) { + if (signer && signer.estimateGas) { + return signer.estimateGas(transaction); + } + + return provider.estimateGas(transaction) + } + + // If the signer supports sendTrasaction, use it + if (signer.sendTransaction) { + return signer.sendTransaction(transaction); + } + + if (!signer.sign) { + return Promise.reject(new Error('custom signer does not support signing')); + } + + if (transaction.gasLimit == null) { + transaction.gasLimit = signer.defaultGasLimit || 2000000; + } + + var noncePromise = null; + if (transaction.nonce != null) { + noncePromise = Promise.resolve(transaction.nonce) + } else if (signer.getTransactionCount) { + noncePromise = signer.getTransactionCount(); + if (!(noncePromise instanceof Promise)) { + noncePromise = Promise.resolve(noncePromise); + } + } else { + var addressPromise = signer.getAddress(); + if (!(addressPromise instanceof Promise)) { + addressPromise = Promise.resolve(addressPromise); + } + noncePromise = addressPromise.then(function(address) { + return provider.getTransactionCount(address, 'pending'); + }); + } + + var gasPricePromise = null; + if (transaction.gasPrice) { + gasPricePromise = Promise.resolve(transaction.gasPrice); + } else { + gasPricePromise = provider.getGasPrice(); + } + + return Promise.all([ + noncePromise, + gasPricePromise + + ]).then(function(results) { + transaction.nonce = results[0]; + transaction.gasPrice = results[1]; + return signer.sign(transaction); + + }).then(function(signedTransaction) { + return provider.sendTransaction(signedTransaction); + }); + } + }; + } + + var estimate = {}; + utils.defineProperty(this, 'estimate', estimate); + + var functions = {}; + utils.defineProperty(this, 'functions', functions); + + var events = {}; + utils.defineProperty(this, 'events', events); + + Object.keys(contractInterface.functions).forEach(function(methodName) { + var method = contractInterface.functions[methodName]; + + var run = runMethod(method, false); + + if (this[methodName] == null) { + utils.defineProperty(this, methodName, run); + } else { + console.log('WARNING: Multiple definitions for ' + method); + } + + if (functions[method] == null) { + utils.defineProperty(functions, methodName, run); + utils.defineProperty(estimate, methodName, runMethod(method, true)); + } + }, this); + + Object.keys(contractInterface.events).forEach(function(eventName) { + var eventInfo = contractInterface.events[eventName]; + + var eventCallback = null; + + function handleEvent(log) { + addressPromise.then(function(address) { + + // Not meant for us (the topics just has the same name) + if (address != log.address) { return; } + + try { + var result = eventInfo.parse(log.topics, log.data); + + // Some useful things to have with the log + log.args = result; + log.event = eventName; + log.parse = eventInfo.parse; + log.removeListener = function() { + provider.removeListener(eventInfo.topics, handleEvent); + } + + log.getBlock = function() { return provider.getBlock(log.blockHash);; } + log.getTransaction = function() { return provider.getTransaction(log.transactionHash); } + log.getTransactionReceipt = function() { return provider.getTransactionReceipt(log.transactionHash); } + log.eventSignature = eventInfo.signature; + + eventCallback.apply(log, Array.prototype.slice.call(result)); + } catch (error) { + console.log(error); + } + + return null; + }).catch(function(error) { + //console.log(error); + }); + } + + var property = { + enumerable: true, + get: function() { + return eventCallback; + }, + set: function(value) { + if (!value) { value = null; } + + if (!value && eventCallback) { + provider.removeListener(eventInfo.topics, handleEvent); + + } else if (value && !eventCallback) { + provider.on(eventInfo.topics, handleEvent); + } + + eventCallback = value; + } + }; + + var propertyName = 'on' + eventName.toLowerCase(); + if (this[propertyName] == null) { + Object.defineProperty(this, propertyName, property); + } + + Object.defineProperty(events, eventName, property); + + }, this); +} + +utils.defineProperty(Contract.prototype, 'connect', function(signerOrProvider) { + return new Contract(this.address, this.interface, signerOrProvider); +}); + +utils.defineProperty(Contract, 'getDeployTransaction', function(bytecode, contractInterface) { + + if (!(contractInterface instanceof Interface)) { + contractInterface = new Interface(contractInterface); + } + + var args = Array.prototype.slice.call(arguments); + args.splice(1, 1); + + return { + data: contractInterface.deployFunction.apply(contractInterface, args).bytecode + } +}); + +module.exports = Contract; + +},{"../utils/address.js":678,"../utils/bignumber.js":679,"../utils/convert.js":683,"../utils/errors":685,"../utils/properties.js":692,"./interface.js":643}],642:[function(require,module,exports){ +'use strict'; + +var Contract = require('./contract.js'); +var Interface = require('./interface.js'); + +module.exports = { + Contract: Contract, + Interface: Interface, +} + + +},{"./contract.js":641,"./interface.js":643}],643:[function(require,module,exports){ +'use strict'; + +// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI + +var utils = (function() { + var AbiCoder = require('../utils/abi-coder'); + var convert = require('../utils/convert'); + var properties = require('../utils/properties'); + var utf8 = require('../utils/utf8'); + + return { + defineFrozen: properties.defineFrozen, + defineProperty: properties.defineProperty, + + coder: AbiCoder.defaultCoder, + parseSignature: AbiCoder.parseSignature, + + arrayify: convert.arrayify, + concat: convert.concat, + isHexString: convert.isHexString, + + toUtf8Bytes: utf8.toUtf8Bytes, + + keccak256: require('../utils/keccak256'), + }; +})(); + +var errors = require('../utils/errors'); + +function parseParams(params) { + var names = []; + var types = []; + + params.forEach(function(param) { + if (param.components != null) { + if (param.type.substring(0, 5) !== 'tuple') { + throw new Error('internal error; report on GitHub'); + } + var suffix = ''; + var arrayBracket = param.type.indexOf('['); + if (arrayBracket >= 0) { suffix = param.type.substring(arrayBracket); } + + var result = parseParams(param.components); + names.push({ name: (param.name || null), names: result.names }); + types.push('tuple(' + result.types.join(',') + ')' + suffix) + } else { + names.push(param.name || null); + types.push(param.type); + } + }); + + return { + names: names, + types: types + } +} + +function populateDescription(object, items) { + for (var key in items) { + utils.defineProperty(object, key, items[key]); + } + return object; +} + +/** + * - bytecode (optional; only for deploy) + * - type ("deploy") + */ +function DeployDescription() { } + +/** + * - name + * - signature + * - sighash + * - + * - + * - + * - + * - type: ("call" | "transaction") + */ +function FunctionDescription() { } + +/** + * - anonymous + * - name + * - signature + * - parse + * - topics + * - inputs + * - type ("event") + */ +function EventDescription() { } + +function Indexed(value) { + utils.defineProperty(this, 'indexed', true); + utils.defineProperty(this, 'hash', value); +} + +function Result() {} + +function Interface(abi) { + if (!(this instanceof Interface)) { throw new Error('missing new'); } + + if (typeof(abi) === 'string') { + try { + abi = JSON.parse(abi); + } catch (error) { + errors.throwError('could not parse ABI JSON', errors.INVALID_ARGUMENT, { + arg: 'abi', + errorMessage: error.message, + value: abi + }); + } + } + + var _abi = []; + abi.forEach(function(fragment) { + if (typeof(fragment) === 'string') { + fragment = utils.parseSignature(fragment); + } + _abi.push(fragment); + }); + + utils.defineFrozen(this, 'abi', _abi); + + var methods = {}, events = {}, deploy = null; + + utils.defineProperty(this, 'functions', methods); + utils.defineProperty(this, 'events', events); + + function addMethod(method) { + switch (method.type) { + case 'constructor': + var func = (function() { + var inputParams = parseParams(method.inputs); + + var func = function(bytecode) { + if (!utils.isHexString(bytecode)) { + errors.throwError('invalid contract bytecode', errors.INVALID_ARGUMENT, { + arg: 'bytecode', + type: typeof(bytecode), + value: bytecode + }); + } + + var params = Array.prototype.slice.call(arguments, 1); + if (params.length < inputParams.types.length) { + errors.throwError('missing constructor argument', errors.MISSING_ARGUMENT, { + arg: (inputParams.names[params.length] || 'unknown'), + count: params.length, + expectedCount: inputParams.types.length + }); + } else if (params.length > inputParams.types.length) { + errors.throwError('too many constructor arguments', errors.UNEXPECTED_ARGUMENT, { + count: params.length, + expectedCount: inputParams.types.length + }); + } + + try { + var encodedParams = utils.coder.encode(method.inputs, params) + } catch (error) { + errors.throwError('invalid constructor argument', errors.INVALID_ARGUMENT, { + arg: error.arg, + reason: error.reason, + value: error.value + }); + } + + var result = { + bytecode: bytecode + encodedParams.substring(2), + type: 'deploy' + } + + return populateDescription(new DeployDescription(), result); + } + + utils.defineFrozen(func, 'inputs', inputParams); + utils.defineProperty(func, 'payable', (method.payable == null || !!method.payable)) + + return func; + })(); + + if (!deploy) { deploy = func; } + + break; + + case 'function': + var func = (function() { + var inputParams = parseParams(method.inputs); + var outputParams = parseParams(method.outputs); + + var signature = '(' + inputParams.types.join(',') + ')'; + signature = signature.replace(/tuple/g, ''); + signature = method.name + signature; + + var parse = function(data) { + try { + return utils.coder.decode(method.outputs, utils.arrayify(data)); + } catch(error) { + errors.throwError('invalid data for function output', errors.INVALID_ARGUMENT, { + arg: 'data', + errorArg: error.arg, + errorValue: error.value, + value: data, + reason: error.reason + }); + } + }; + + var sighash = utils.keccak256(utils.toUtf8Bytes(signature)).substring(0, 10); + var func = function() { + var result = { + name: method.name, + signature: signature, + sighash: sighash, + type: ((method.constant) ? 'call': 'transaction') + }; + + var params = Array.prototype.slice.call(arguments, 0); + + if (params.length < inputParams.types.length) { + errors.throwError('missing input argument', errors.MISSING_ARGUMENT, { + arg: (inputParams.names[params.length] || 'unknown'), + count: params.length, + expectedCount: inputParams.types.length, + name: method.name + }); + } else if (params.length > inputParams.types.length) { + errors.throwError('too many input arguments', errors.UNEXPECTED_ARGUMENT, { + count: params.length, + expectedCount: inputParams.types.length + }); + } + + try { + var encodedParams = utils.coder.encode(method.inputs, params); + } catch (error) { + errors.throwError('invalid input argument', errors.INVALID_ARGUMENT, { + arg: error.arg, + reason: error.reason, + value: error.value + }); + } + + result.data = sighash + encodedParams.substring(2); + result.parse = parse; + + return populateDescription(new FunctionDescription(), result); + } + + utils.defineFrozen(func, 'inputs', inputParams); + utils.defineFrozen(func, 'outputs', outputParams); + + utils.defineProperty(func, 'payable', (method.payable == null || !!method.payable)) + + utils.defineProperty(func, 'parseResult', parse); + + utils.defineProperty(func, 'signature', signature); + utils.defineProperty(func, 'sighash', sighash); + + return func; + })(); + + // Expose the first (and hopefully unique named function + if (method.name && methods[method.name] == null) { + utils.defineProperty(methods, method.name, func); + } + + // Expose all methods by their signature, for overloaded functions + if (methods[func.signature] == null) { + utils.defineProperty(methods, func.signature, func); + } + + break; + + case 'event': + var func = (function() { + var inputParams = parseParams(method.inputs); + + var signature = '(' + inputParams.types.join(',') + ')'; + signature = signature.replace(/tuple/g, ''); + signature = method.name + signature; + + var result = { + anonymous: (!!method.anonymous), + name: method.name, + signature: signature, + type: 'event' + }; + + result.parse = function(topics, data) { + if (data == null) { + data = topics; + topics = null; + } + + // Strip the signature off of non-anonymous topics + if (topics != null && !method.anonymous) { topics = topics.slice(1); } + + var inputIndexed = [], inputNonIndexed = []; + var inputDynamic = []; + method.inputs.forEach(function(param, index) { + + if (param.indexed) { + if (param.type === 'string' || param.type === 'bytes' || param.type.indexOf('[') >= 0 || param.type.substring(0, 5) === 'tuple') { + inputIndexed.push({ type: 'bytes32', name: (param.name || '')}); + inputDynamic.push(true); + } else { + inputIndexed.push(param); + inputDynamic.push(false); + } + } else { + inputNonIndexed.push(param); + inputDynamic.push(false); + } + }); + + if (topics != null) { + var resultIndexed = utils.coder.decode( + inputIndexed, + utils.concat(topics) + ); + } + + var resultNonIndexed = utils.coder.decode( + inputNonIndexed, + utils.arrayify(data) + ); + + var result = new Result(); + var nonIndexedIndex = 0, indexedIndex = 0; + method.inputs.forEach(function(input, index) { + if (input.indexed) { + if (topics == null) { + result[index] = new Indexed(null); + + } else if (inputDynamic[index]) { + result[index] = new Indexed(resultIndexed[indexedIndex++]); + } else { + result[index] = resultIndexed[indexedIndex++]; + } + } else { + result[index] = resultNonIndexed[nonIndexedIndex++]; + } + if (input.name) { result[input.name] = result[index]; } + }); + + result.length = method.inputs.length; + + return result; + }; + + var func = populateDescription(new EventDescription(), result) + utils.defineFrozen(func, 'topics', [ utils.keccak256(utils.toUtf8Bytes(signature)) ]); + utils.defineFrozen(func, 'inputs', inputParams); + return func; + })(); + + // Expose the first (and hopefully unique) event name + if (method.name && events[method.name] == null) { + utils.defineProperty(events, method.name, func); + } + + // Expose all events by their signature, for overloaded functions + if (methods[func.signature] == null) { + utils.defineProperty(methods, func.signature, func); + } + + break; + + case 'fallback': + // Nothing to do for fallback + break; + + default: + console.log('WARNING: unsupported ABI type - ' + method.type); + break; + } + }; + + _abi.forEach(addMethod, this); + + // If there wasn't a constructor, create the default constructor + if (!deploy) { + addMethod({type: 'constructor', inputs: []}); + } + + utils.defineProperty(this, 'deployFunction', deploy); +} + +utils.defineProperty(Interface.prototype, 'parseTransaction', function(tx) { + var sighash = tx.data.substring(0, 10).toLowerCase(); + for (var name in this.functions) { + if (name.indexOf('(') === -1) { continue; } + var func = this.functions[name]; + if (func.sighash === sighash) { + var result = utils.coder.decode(func.inputs.types, '0x' + tx.data.substring(10)); + return { + args: result, + signature: func.signature, + sighash: func.sighash, + parse: func.parseResult, + value: tx.value, + }; + } + } + return null; +}); + +module.exports = Interface; + +},{"../utils/abi-coder":677,"../utils/convert":683,"../utils/errors":685,"../utils/keccak256":689,"../utils/properties":692,"../utils/utf8":698}],644:[function(require,module,exports){ +'use strict'; + +var version = require('./package.json').version; + +var contracts = require('./contracts'); +var providers = require('./providers'); +var errors = require('./utils/errors'); +var utils = require('./utils'); +var wallet = require('./wallet'); + +module.exports = { + Wallet: wallet.Wallet, + + HDNode: wallet.HDNode, + SigningKey: wallet.SigningKey, + + Contract: contracts.Contract, + Interface: contracts.Interface, + + networks: providers.networks, + providers: providers, + + errors: errors, + utils: utils, + + version: version, +}; + +},{"./contracts":642,"./package.json":667,"./providers":671,"./utils":688,"./utils/errors":685,"./wallet":700}],645:[function(require,module,exports){ +'use strict'; + +var elliptic = exports; + +elliptic.version = require('../package.json').version; +elliptic.utils = require('./elliptic/utils'); +elliptic.rand = require('brorand'); +elliptic.hmacDRBG = require('./elliptic/hmac-drbg'); +elliptic.curve = require('./elliptic/curve'); +elliptic.curves = require('./elliptic/curves'); + +// Protocols +elliptic.ec = require('./elliptic/ec'); +elliptic.eddsa = require('./elliptic/eddsa'); + +},{"../package.json":661,"./elliptic/curve":648,"./elliptic/curves":651,"./elliptic/ec":652,"./elliptic/eddsa":655,"./elliptic/hmac-drbg":658,"./elliptic/utils":660,"brorand":76}],646:[function(require,module,exports){ +arguments[4][549][0].apply(exports,arguments) +},{"../../elliptic":645,"bn.js":66,"dup":549}],647:[function(require,module,exports){ +'use strict'; + +var curve = require('../curve'); +var elliptic = require('../../elliptic'); +var BN = require('bn.js'); +var inherits = require('inherits'); +var Base = curve.base; + +var assert = elliptic.utils.assert; + +function EdwardsCurve(conf) { + // NOTE: Important as we are creating point in Base.call() + this.twisted = (conf.a | 0) !== 1; + this.mOneA = this.twisted && (conf.a | 0) === -1; + this.extended = this.mOneA; + + Base.call(this, 'edwards', conf); + + this.a = new BN(conf.a, 16).umod(this.red.m); + this.a = this.a.toRed(this.red); + this.c = new BN(conf.c, 16).toRed(this.red); + this.c2 = this.c.redSqr(); + this.d = new BN(conf.d, 16).toRed(this.red); + this.dd = this.d.redAdd(this.d); + + assert(!this.twisted || this.c.fromRed().cmpn(1) === 0); + this.oneC = (conf.c | 0) === 1; +} +inherits(EdwardsCurve, Base); +module.exports = EdwardsCurve; + +EdwardsCurve.prototype._mulA = function _mulA(num) { + if (this.mOneA) + return num.redNeg(); + else + return this.a.redMul(num); +}; + +EdwardsCurve.prototype._mulC = function _mulC(num) { + if (this.oneC) + return num; + else + return this.c.redMul(num); +}; + +// Just for compatibility with Short curve +EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) { + return this.point(x, y, z, t); +}; + +EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) { + x = new BN(x, 16); + if (!x.red) + x = x.toRed(this.red); + + var x2 = x.redSqr(); + var rhs = this.c2.redSub(this.a.redMul(x2)); + var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2)); + + var y2 = rhs.redMul(lhs.redInvm()); + var y = y2.redSqrt(); + if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) + throw new Error('invalid point'); + + var isOdd = y.fromRed().isOdd(); + if (odd && !isOdd || !odd && isOdd) + y = y.redNeg(); + + return this.point(x, y); +}; + +EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) { + y = new BN(y, 16); + if (!y.red) + y = y.toRed(this.red); + + // x^2 = (y^2 - 1) / (d y^2 + 1) + var y2 = y.redSqr(); + var lhs = y2.redSub(this.one); + var rhs = y2.redMul(this.d).redAdd(this.one); + var x2 = lhs.redMul(rhs.redInvm()); + + if (x2.cmp(this.zero) === 0) { + if (odd) + throw new Error('invalid point'); + else + return this.point(this.zero, y); + } + + var x = x2.redSqrt(); + if (x.redSqr().redSub(x2).cmp(this.zero) !== 0) + throw new Error('invalid point'); + + if (x.isOdd() !== odd) + x = x.redNeg(); + + return this.point(x, y); +}; + +EdwardsCurve.prototype.validate = function validate(point) { + if (point.isInfinity()) + return true; + + // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2) + point.normalize(); + + var x2 = point.x.redSqr(); + var y2 = point.y.redSqr(); + var lhs = x2.redMul(this.a).redAdd(y2); + var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2))); + + return lhs.cmp(rhs) === 0; +}; + +function Point(curve, x, y, z, t) { + Base.BasePoint.call(this, curve, 'projective'); + if (x === null && y === null && z === null) { + this.x = this.curve.zero; + this.y = this.curve.one; + this.z = this.curve.one; + this.t = this.curve.zero; + this.zOne = true; + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + this.z = z ? new BN(z, 16) : this.curve.one; + this.t = t && new BN(t, 16); + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); + if (this.t && !this.t.red) + this.t = this.t.toRed(this.curve.red); + this.zOne = this.z === this.curve.one; + + // Use extended coordinates + if (this.curve.extended && !this.t) { + this.t = this.x.redMul(this.y); + if (!this.zOne) + this.t = this.t.redMul(this.z.redInvm()); + } + } +} +inherits(Point, Base.BasePoint); + +EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) { + return Point.fromJSON(this, obj); +}; + +EdwardsCurve.prototype.point = function point(x, y, z, t) { + return new Point(this, x, y, z, t); +}; + +Point.fromJSON = function fromJSON(curve, obj) { + return new Point(curve, obj[0], obj[1], obj[2]); +}; + +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +Point.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.x.cmpn(0) === 0 && + this.y.cmp(this.z) === 0; +}; + +Point.prototype._extDbl = function _extDbl() { + // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + // #doubling-dbl-2008-hwcd + // 4M + 4S + + // A = X1^2 + var a = this.x.redSqr(); + // B = Y1^2 + var b = this.y.redSqr(); + // C = 2 * Z1^2 + var c = this.z.redSqr(); + c = c.redIAdd(c); + // D = a * A + var d = this.curve._mulA(a); + // E = (X1 + Y1)^2 - A - B + var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b); + // G = D + B + var g = d.redAdd(b); + // F = G - C + var f = g.redSub(c); + // H = D - B + var h = d.redSub(b); + // X3 = E * F + var nx = e.redMul(f); + // Y3 = G * H + var ny = g.redMul(h); + // T3 = E * H + var nt = e.redMul(h); + // Z3 = F * G + var nz = f.redMul(g); + return this.curve.point(nx, ny, nz, nt); +}; + +Point.prototype._projDbl = function _projDbl() { + // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html + // #doubling-dbl-2008-bbjlp + // #doubling-dbl-2007-bl + // and others + // Generally 3M + 4S or 2M + 4S + + // B = (X1 + Y1)^2 + var b = this.x.redAdd(this.y).redSqr(); + // C = X1^2 + var c = this.x.redSqr(); + // D = Y1^2 + var d = this.y.redSqr(); + + var nx; + var ny; + var nz; + if (this.curve.twisted) { + // E = a * C + var e = this.curve._mulA(c); + // F = E + D + var f = e.redAdd(d); + if (this.zOne) { + // X3 = (B - C - D) * (F - 2) + nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two)); + // Y3 = F * (E - D) + ny = f.redMul(e.redSub(d)); + // Z3 = F^2 - 2 * F + nz = f.redSqr().redSub(f).redSub(f); + } else { + // H = Z1^2 + var h = this.z.redSqr(); + // J = F - 2 * H + var j = f.redSub(h).redISub(h); + // X3 = (B-C-D)*J + nx = b.redSub(c).redISub(d).redMul(j); + // Y3 = F * (E - D) + ny = f.redMul(e.redSub(d)); + // Z3 = F * J + nz = f.redMul(j); + } + } else { + // E = C + D + var e = c.redAdd(d); + // H = (c * Z1)^2 + var h = this.curve._mulC(this.c.redMul(this.z)).redSqr(); + // J = E - 2 * H + var j = e.redSub(h).redSub(h); + // X3 = c * (B - E) * J + nx = this.curve._mulC(b.redISub(e)).redMul(j); + // Y3 = c * E * (C - D) + ny = this.curve._mulC(e).redMul(c.redISub(d)); + // Z3 = E * J + nz = e.redMul(j); + } + return this.curve.point(nx, ny, nz); +}; + +Point.prototype.dbl = function dbl() { + if (this.isInfinity()) + return this; + + // Double in extended coordinates + if (this.curve.extended) + return this._extDbl(); + else + return this._projDbl(); +}; + +Point.prototype._extAdd = function _extAdd(p) { + // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + // #addition-add-2008-hwcd-3 + // 8M + + // A = (Y1 - X1) * (Y2 - X2) + var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x)); + // B = (Y1 + X1) * (Y2 + X2) + var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x)); + // C = T1 * k * T2 + var c = this.t.redMul(this.curve.dd).redMul(p.t); + // D = Z1 * 2 * Z2 + var d = this.z.redMul(p.z.redAdd(p.z)); + // E = B - A + var e = b.redSub(a); + // F = D - C + var f = d.redSub(c); + // G = D + C + var g = d.redAdd(c); + // H = B + A + var h = b.redAdd(a); + // X3 = E * F + var nx = e.redMul(f); + // Y3 = G * H + var ny = g.redMul(h); + // T3 = E * H + var nt = e.redMul(h); + // Z3 = F * G + var nz = f.redMul(g); + return this.curve.point(nx, ny, nz, nt); +}; + +Point.prototype._projAdd = function _projAdd(p) { + // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html + // #addition-add-2008-bbjlp + // #addition-add-2007-bl + // 10M + 1S + + // A = Z1 * Z2 + var a = this.z.redMul(p.z); + // B = A^2 + var b = a.redSqr(); + // C = X1 * X2 + var c = this.x.redMul(p.x); + // D = Y1 * Y2 + var d = this.y.redMul(p.y); + // E = d * C * D + var e = this.curve.d.redMul(c).redMul(d); + // F = B - E + var f = b.redSub(e); + // G = B + E + var g = b.redAdd(e); + // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D) + var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d); + var nx = a.redMul(f).redMul(tmp); + var ny; + var nz; + if (this.curve.twisted) { + // Y3 = A * G * (D - a * C) + ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c))); + // Z3 = F * G + nz = f.redMul(g); + } else { + // Y3 = A * G * (D - C) + ny = a.redMul(g).redMul(d.redSub(c)); + // Z3 = c * F * G + nz = this.curve._mulC(f).redMul(g); + } + return this.curve.point(nx, ny, nz); +}; + +Point.prototype.add = function add(p) { + if (this.isInfinity()) + return p; + if (p.isInfinity()) + return this; + + if (this.curve.extended) + return this._extAdd(p); + else + return this._projAdd(p); +}; + +Point.prototype.mul = function mul(k) { + if (this._hasDoubles(k)) + return this.curve._fixedNafMul(this, k); + else + return this.curve._wnafMul(this, k); +}; + +Point.prototype.mulAdd = function mulAdd(k1, p, k2) { + return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false); +}; + +Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) { + return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true); +}; + +Point.prototype.normalize = function normalize() { + if (this.zOne) + return this; + + // Normalize coordinates + var zi = this.z.redInvm(); + this.x = this.x.redMul(zi); + this.y = this.y.redMul(zi); + if (this.t) + this.t = this.t.redMul(zi); + this.z = this.curve.one; + this.zOne = true; + return this; +}; + +Point.prototype.neg = function neg() { + return this.curve.point(this.x.redNeg(), + this.y, + this.z, + this.t && this.t.redNeg()); +}; + +Point.prototype.getX = function getX() { + this.normalize(); + return this.x.fromRed(); +}; + +Point.prototype.getY = function getY() { + this.normalize(); + return this.y.fromRed(); +}; + +Point.prototype.eq = function eq(other) { + return this === other || + this.getX().cmp(other.getX()) === 0 && + this.getY().cmp(other.getY()) === 0; +}; + +Point.prototype.eqXToP = function eqXToP(x) { + var rx = x.toRed(this.curve.red).redMul(this.z); + if (this.x.cmp(rx) === 0) + return true; + + var xc = x.clone(); + var t = this.curve.redN.redMul(this.z); + for (;;) { + xc.iadd(this.curve.n); + if (xc.cmp(this.curve.p) >= 0) + return false; + + rx.redIAdd(t); + if (this.x.cmp(rx) === 0) + return true; + } + return false; +}; + +// Compatibility with BaseCurve +Point.prototype.toP = Point.prototype.normalize; +Point.prototype.mixedAdd = Point.prototype.add; + +},{"../../elliptic":645,"../curve":648,"bn.js":66,"inherits":662}],648:[function(require,module,exports){ +arguments[4][551][0].apply(exports,arguments) +},{"./base":646,"./edwards":647,"./mont":649,"./short":650,"dup":551}],649:[function(require,module,exports){ +arguments[4][552][0].apply(exports,arguments) +},{"../../elliptic":645,"../curve":648,"bn.js":66,"dup":552,"inherits":662}],650:[function(require,module,exports){ +'use strict'; + +var curve = require('../curve'); +var elliptic = require('../../elliptic'); +var BN = require('bn.js'); +var inherits = require('inherits'); +var Base = curve.base; + +var assert = elliptic.utils.assert; + +function ShortCurve(conf) { + Base.call(this, 'short', conf); + + this.a = new BN(conf.a, 16).toRed(this.red); + this.b = new BN(conf.b, 16).toRed(this.red); + this.tinv = this.two.redInvm(); + + this.zeroA = this.a.fromRed().cmpn(0) === 0; + this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0; + + // If the curve is endomorphic, precalculate beta and lambda + this.endo = this._getEndomorphism(conf); + this._endoWnafT1 = new Array(4); + this._endoWnafT2 = new Array(4); +} +inherits(ShortCurve, Base); +module.exports = ShortCurve; + +ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) { + // No efficient endomorphism + if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1) + return; + + // Compute beta and lambda, that lambda * P = (beta * Px; Py) + var beta; + var lambda; + if (conf.beta) { + beta = new BN(conf.beta, 16).toRed(this.red); + } else { + var betas = this._getEndoRoots(this.p); + // Choose the smallest beta + beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1]; + beta = beta.toRed(this.red); + } + if (conf.lambda) { + lambda = new BN(conf.lambda, 16); + } else { + // Choose the lambda that is matching selected beta + var lambdas = this._getEndoRoots(this.n); + if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) { + lambda = lambdas[0]; + } else { + lambda = lambdas[1]; + assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0); + } + } + + // Get basis vectors, used for balanced length-two representation + var basis; + if (conf.basis) { + basis = conf.basis.map(function(vec) { + return { + a: new BN(vec.a, 16), + b: new BN(vec.b, 16) + }; + }); + } else { + basis = this._getEndoBasis(lambda); + } + + return { + beta: beta, + lambda: lambda, + basis: basis + }; +}; + +ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) { + // Find roots of for x^2 + x + 1 in F + // Root = (-1 +- Sqrt(-3)) / 2 + // + var red = num === this.p ? this.red : BN.mont(num); + var tinv = new BN(2).toRed(red).redInvm(); + var ntinv = tinv.redNeg(); + + var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv); + + var l1 = ntinv.redAdd(s).fromRed(); + var l2 = ntinv.redSub(s).fromRed(); + return [ l1, l2 ]; +}; + +ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) { + // aprxSqrt >= sqrt(this.n) + var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2)); + + // 3.74 + // Run EGCD, until r(L + 1) < aprxSqrt + var u = lambda; + var v = this.n.clone(); + var x1 = new BN(1); + var y1 = new BN(0); + var x2 = new BN(0); + var y2 = new BN(1); + + // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n) + var a0; + var b0; + // First vector + var a1; + var b1; + // Second vector + var a2; + var b2; + + var prevR; + var i = 0; + var r; + var x; + while (u.cmpn(0) !== 0) { + var q = v.div(u); + r = v.sub(q.mul(u)); + x = x2.sub(q.mul(x1)); + var y = y2.sub(q.mul(y1)); + + if (!a1 && r.cmp(aprxSqrt) < 0) { + a0 = prevR.neg(); + b0 = x1; + a1 = r.neg(); + b1 = x; + } else if (a1 && ++i === 2) { + break; + } + prevR = r; + + v = u; + u = r; + x2 = x1; + x1 = x; + y2 = y1; + y1 = y; + } + a2 = r.neg(); + b2 = x; + + var len1 = a1.sqr().add(b1.sqr()); + var len2 = a2.sqr().add(b2.sqr()); + if (len2.cmp(len1) >= 0) { + a2 = a0; + b2 = b0; + } + + // Normalize signs + if (a1.negative) { + a1 = a1.neg(); + b1 = b1.neg(); + } + if (a2.negative) { + a2 = a2.neg(); + b2 = b2.neg(); + } + + return [ + { a: a1, b: b1 }, + { a: a2, b: b2 } + ]; +}; + +ShortCurve.prototype._endoSplit = function _endoSplit(k) { + var basis = this.endo.basis; + var v1 = basis[0]; + var v2 = basis[1]; + + var c1 = v2.b.mul(k).divRound(this.n); + var c2 = v1.b.neg().mul(k).divRound(this.n); + + var p1 = c1.mul(v1.a); + var p2 = c2.mul(v2.a); + var q1 = c1.mul(v1.b); + var q2 = c2.mul(v2.b); + + // Calculate answer + var k1 = k.sub(p1).sub(p2); + var k2 = q1.add(q2).neg(); + return { k1: k1, k2: k2 }; +}; + +ShortCurve.prototype.pointFromX = function pointFromX(x, odd) { + x = new BN(x, 16); + if (!x.red) + x = x.toRed(this.red); + + var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b); + var y = y2.redSqrt(); + if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) + throw new Error('invalid point'); + + // XXX Is there any way to tell if the number is odd without converting it + // to non-red form? + var isOdd = y.fromRed().isOdd(); + if (odd && !isOdd || !odd && isOdd) + y = y.redNeg(); + + return this.point(x, y); +}; + +ShortCurve.prototype.validate = function validate(point) { + if (point.inf) + return true; + + var x = point.x; + var y = point.y; + + var ax = this.a.redMul(x); + var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b); + return y.redSqr().redISub(rhs).cmpn(0) === 0; +}; + +ShortCurve.prototype._endoWnafMulAdd = + function _endoWnafMulAdd(points, coeffs, jacobianResult) { + var npoints = this._endoWnafT1; + var ncoeffs = this._endoWnafT2; + for (var i = 0; i < points.length; i++) { + var split = this._endoSplit(coeffs[i]); + var p = points[i]; + var beta = p._getBeta(); + + if (split.k1.negative) { + split.k1.ineg(); + p = p.neg(true); + } + if (split.k2.negative) { + split.k2.ineg(); + beta = beta.neg(true); + } + + npoints[i * 2] = p; + npoints[i * 2 + 1] = beta; + ncoeffs[i * 2] = split.k1; + ncoeffs[i * 2 + 1] = split.k2; + } + var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult); + + // Clean-up references to points and coefficients + for (var j = 0; j < i * 2; j++) { + npoints[j] = null; + ncoeffs[j] = null; + } + return res; +}; + +function Point(curve, x, y, isRed) { + Base.BasePoint.call(this, curve, 'affine'); + if (x === null && y === null) { + this.x = null; + this.y = null; + this.inf = true; + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + // Force redgomery representation when loading from JSON + if (isRed) { + this.x.forceRed(this.curve.red); + this.y.forceRed(this.curve.red); + } + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + this.inf = false; + } +} +inherits(Point, Base.BasePoint); + +ShortCurve.prototype.point = function point(x, y, isRed) { + return new Point(this, x, y, isRed); +}; + +ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) { + return Point.fromJSON(this, obj, red); +}; + +Point.prototype._getBeta = function _getBeta() { + if (!this.curve.endo) + return; + + var pre = this.precomputed; + if (pre && pre.beta) + return pre.beta; + + var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y); + if (pre) { + var curve = this.curve; + var endoMul = function(p) { + return curve.point(p.x.redMul(curve.endo.beta), p.y); + }; + pre.beta = beta; + beta.precomputed = { + beta: null, + naf: pre.naf && { + wnd: pre.naf.wnd, + points: pre.naf.points.map(endoMul) + }, + doubles: pre.doubles && { + step: pre.doubles.step, + points: pre.doubles.points.map(endoMul) + } + }; + } + return beta; +}; + +Point.prototype.toJSON = function toJSON() { + if (!this.precomputed) + return [ this.x, this.y ]; + + return [ this.x, this.y, this.precomputed && { + doubles: this.precomputed.doubles && { + step: this.precomputed.doubles.step, + points: this.precomputed.doubles.points.slice(1) + }, + naf: this.precomputed.naf && { + wnd: this.precomputed.naf.wnd, + points: this.precomputed.naf.points.slice(1) + } + } ]; +}; + +Point.fromJSON = function fromJSON(curve, obj, red) { + if (typeof obj === 'string') + obj = JSON.parse(obj); + var res = curve.point(obj[0], obj[1], red); + if (!obj[2]) + return res; + + function obj2point(obj) { + return curve.point(obj[0], obj[1], red); + } + + var pre = obj[2]; + res.precomputed = { + beta: null, + doubles: pre.doubles && { + step: pre.doubles.step, + points: [ res ].concat(pre.doubles.points.map(obj2point)) + }, + naf: pre.naf && { + wnd: pre.naf.wnd, + points: [ res ].concat(pre.naf.points.map(obj2point)) + } + }; + return res; +}; + +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +Point.prototype.isInfinity = function isInfinity() { + return this.inf; +}; + +Point.prototype.add = function add(p) { + // O + P = P + if (this.inf) + return p; + + // P + O = P + if (p.inf) + return this; + + // P + P = 2P + if (this.eq(p)) + return this.dbl(); + + // P + (-P) = O + if (this.neg().eq(p)) + return this.curve.point(null, null); + + // P + Q = O + if (this.x.cmp(p.x) === 0) + return this.curve.point(null, null); + + var c = this.y.redSub(p.y); + if (c.cmpn(0) !== 0) + c = c.redMul(this.x.redSub(p.x).redInvm()); + var nx = c.redSqr().redISub(this.x).redISub(p.x); + var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); + return this.curve.point(nx, ny); +}; + +Point.prototype.dbl = function dbl() { + if (this.inf) + return this; + + // 2P = O + var ys1 = this.y.redAdd(this.y); + if (ys1.cmpn(0) === 0) + return this.curve.point(null, null); + + var a = this.curve.a; + + var x2 = this.x.redSqr(); + var dyinv = ys1.redInvm(); + var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv); + + var nx = c.redSqr().redISub(this.x.redAdd(this.x)); + var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); + return this.curve.point(nx, ny); +}; + +Point.prototype.getX = function getX() { + return this.x.fromRed(); +}; + +Point.prototype.getY = function getY() { + return this.y.fromRed(); +}; + +Point.prototype.mul = function mul(k) { + k = new BN(k, 16); + + if (this._hasDoubles(k)) + return this.curve._fixedNafMul(this, k); + else if (this.curve.endo) + return this.curve._endoWnafMulAdd([ this ], [ k ]); + else + return this.curve._wnafMul(this, k); +}; + +Point.prototype.mulAdd = function mulAdd(k1, p2, k2) { + var points = [ this, p2 ]; + var coeffs = [ k1, k2 ]; + if (this.curve.endo) + return this.curve._endoWnafMulAdd(points, coeffs); + else + return this.curve._wnafMulAdd(1, points, coeffs, 2); +}; + +Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) { + var points = [ this, p2 ]; + var coeffs = [ k1, k2 ]; + if (this.curve.endo) + return this.curve._endoWnafMulAdd(points, coeffs, true); + else + return this.curve._wnafMulAdd(1, points, coeffs, 2, true); +}; + +Point.prototype.eq = function eq(p) { + return this === p || + this.inf === p.inf && + (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0); +}; + +Point.prototype.neg = function neg(_precompute) { + if (this.inf) + return this; + + var res = this.curve.point(this.x, this.y.redNeg()); + if (_precompute && this.precomputed) { + var pre = this.precomputed; + var negate = function(p) { + return p.neg(); + }; + res.precomputed = { + naf: pre.naf && { + wnd: pre.naf.wnd, + points: pre.naf.points.map(negate) + }, + doubles: pre.doubles && { + step: pre.doubles.step, + points: pre.doubles.points.map(negate) + } + }; + } + return res; +}; + +Point.prototype.toJ = function toJ() { + if (this.inf) + return this.curve.jpoint(null, null, null); + + var res = this.curve.jpoint(this.x, this.y, this.curve.one); + return res; +}; + +function JPoint(curve, x, y, z) { + Base.BasePoint.call(this, curve, 'jacobian'); + if (x === null && y === null && z === null) { + this.x = this.curve.one; + this.y = this.curve.one; + this.z = new BN(0); + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + this.z = new BN(z, 16); + } + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); + + this.zOne = this.z === this.curve.one; +} +inherits(JPoint, Base.BasePoint); + +ShortCurve.prototype.jpoint = function jpoint(x, y, z) { + return new JPoint(this, x, y, z); +}; + +JPoint.prototype.toP = function toP() { + if (this.isInfinity()) + return this.curve.point(null, null); + + var zinv = this.z.redInvm(); + var zinv2 = zinv.redSqr(); + var ax = this.x.redMul(zinv2); + var ay = this.y.redMul(zinv2).redMul(zinv); + + return this.curve.point(ax, ay); +}; + +JPoint.prototype.neg = function neg() { + return this.curve.jpoint(this.x, this.y.redNeg(), this.z); +}; + +JPoint.prototype.add = function add(p) { + // O + P = P + if (this.isInfinity()) + return p; + + // P + O = P + if (p.isInfinity()) + return this; + + // 12M + 4S + 7A + var pz2 = p.z.redSqr(); + var z2 = this.z.redSqr(); + var u1 = this.x.redMul(pz2); + var u2 = p.x.redMul(z2); + var s1 = this.y.redMul(pz2.redMul(p.z)); + var s2 = p.y.redMul(z2.redMul(this.z)); + + var h = u1.redSub(u2); + var r = s1.redSub(s2); + if (h.cmpn(0) === 0) { + if (r.cmpn(0) !== 0) + return this.curve.jpoint(null, null, null); + else + return this.dbl(); + } + + var h2 = h.redSqr(); + var h3 = h2.redMul(h); + var v = u1.redMul(h2); + + var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); + var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); + var nz = this.z.redMul(p.z).redMul(h); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.mixedAdd = function mixedAdd(p) { + // O + P = P + if (this.isInfinity()) + return p.toJ(); + + // P + O = P + if (p.isInfinity()) + return this; + + // 8M + 3S + 7A + var z2 = this.z.redSqr(); + var u1 = this.x; + var u2 = p.x.redMul(z2); + var s1 = this.y; + var s2 = p.y.redMul(z2).redMul(this.z); + + var h = u1.redSub(u2); + var r = s1.redSub(s2); + if (h.cmpn(0) === 0) { + if (r.cmpn(0) !== 0) + return this.curve.jpoint(null, null, null); + else + return this.dbl(); + } + + var h2 = h.redSqr(); + var h3 = h2.redMul(h); + var v = u1.redMul(h2); + + var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); + var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); + var nz = this.z.redMul(h); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.dblp = function dblp(pow) { + if (pow === 0) + return this; + if (this.isInfinity()) + return this; + if (!pow) + return this.dbl(); + + if (this.curve.zeroA || this.curve.threeA) { + var r = this; + for (var i = 0; i < pow; i++) + r = r.dbl(); + return r; + } + + // 1M + 2S + 1A + N * (4S + 5M + 8A) + // N = 1 => 6M + 6S + 9A + var a = this.curve.a; + var tinv = this.curve.tinv; + + var jx = this.x; + var jy = this.y; + var jz = this.z; + var jz4 = jz.redSqr().redSqr(); + + // Reuse results + var jyd = jy.redAdd(jy); + for (var i = 0; i < pow; i++) { + var jx2 = jx.redSqr(); + var jyd2 = jyd.redSqr(); + var jyd4 = jyd2.redSqr(); + var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); + + var t1 = jx.redMul(jyd2); + var nx = c.redSqr().redISub(t1.redAdd(t1)); + var t2 = t1.redISub(nx); + var dny = c.redMul(t2); + dny = dny.redIAdd(dny).redISub(jyd4); + var nz = jyd.redMul(jz); + if (i + 1 < pow) + jz4 = jz4.redMul(jyd4); + + jx = nx; + jz = nz; + jyd = dny; + } + + return this.curve.jpoint(jx, jyd.redMul(tinv), jz); +}; + +JPoint.prototype.dbl = function dbl() { + if (this.isInfinity()) + return this; + + if (this.curve.zeroA) + return this._zeroDbl(); + else if (this.curve.threeA) + return this._threeDbl(); + else + return this._dbl(); +}; + +JPoint.prototype._zeroDbl = function _zeroDbl() { + var nx; + var ny; + var nz; + // Z = 1 + if (this.zOne) { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html + // #doubling-mdbl-2007-bl + // 1M + 5S + 14A + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // S = 2 * ((X1 + YY)^2 - XX - YYYY) + var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + s = s.redIAdd(s); + // M = 3 * XX + a; a = 0 + var m = xx.redAdd(xx).redIAdd(xx); + // T = M ^ 2 - 2*S + var t = m.redSqr().redISub(s).redISub(s); + + // 8 * YYYY + var yyyy8 = yyyy.redIAdd(yyyy); + yyyy8 = yyyy8.redIAdd(yyyy8); + yyyy8 = yyyy8.redIAdd(yyyy8); + + // X3 = T + nx = t; + // Y3 = M * (S - T) - 8 * YYYY + ny = m.redMul(s.redISub(t)).redISub(yyyy8); + // Z3 = 2*Y1 + nz = this.y.redAdd(this.y); + } else { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html + // #doubling-dbl-2009-l + // 2M + 5S + 13A + + // A = X1^2 + var a = this.x.redSqr(); + // B = Y1^2 + var b = this.y.redSqr(); + // C = B^2 + var c = b.redSqr(); + // D = 2 * ((X1 + B)^2 - A - C) + var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c); + d = d.redIAdd(d); + // E = 3 * A + var e = a.redAdd(a).redIAdd(a); + // F = E^2 + var f = e.redSqr(); + + // 8 * C + var c8 = c.redIAdd(c); + c8 = c8.redIAdd(c8); + c8 = c8.redIAdd(c8); + + // X3 = F - 2 * D + nx = f.redISub(d).redISub(d); + // Y3 = E * (D - X3) - 8 * C + ny = e.redMul(d.redISub(nx)).redISub(c8); + // Z3 = 2 * Y1 * Z1 + nz = this.y.redMul(this.z); + nz = nz.redIAdd(nz); + } + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype._threeDbl = function _threeDbl() { + var nx; + var ny; + var nz; + // Z = 1 + if (this.zOne) { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html + // #doubling-mdbl-2007-bl + // 1M + 5S + 15A + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // S = 2 * ((X1 + YY)^2 - XX - YYYY) + var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + s = s.redIAdd(s); + // M = 3 * XX + a + var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a); + // T = M^2 - 2 * S + var t = m.redSqr().redISub(s).redISub(s); + // X3 = T + nx = t; + // Y3 = M * (S - T) - 8 * YYYY + var yyyy8 = yyyy.redIAdd(yyyy); + yyyy8 = yyyy8.redIAdd(yyyy8); + yyyy8 = yyyy8.redIAdd(yyyy8); + ny = m.redMul(s.redISub(t)).redISub(yyyy8); + // Z3 = 2 * Y1 + nz = this.y.redAdd(this.y); + } else { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b + // 3M + 5S + + // delta = Z1^2 + var delta = this.z.redSqr(); + // gamma = Y1^2 + var gamma = this.y.redSqr(); + // beta = X1 * gamma + var beta = this.x.redMul(gamma); + // alpha = 3 * (X1 - delta) * (X1 + delta) + var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta)); + alpha = alpha.redAdd(alpha).redIAdd(alpha); + // X3 = alpha^2 - 8 * beta + var beta4 = beta.redIAdd(beta); + beta4 = beta4.redIAdd(beta4); + var beta8 = beta4.redAdd(beta4); + nx = alpha.redSqr().redISub(beta8); + // Z3 = (Y1 + Z1)^2 - gamma - delta + nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta); + // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2 + var ggamma8 = gamma.redSqr(); + ggamma8 = ggamma8.redIAdd(ggamma8); + ggamma8 = ggamma8.redIAdd(ggamma8); + ggamma8 = ggamma8.redIAdd(ggamma8); + ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8); + } + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype._dbl = function _dbl() { + var a = this.curve.a; + + // 4M + 6S + 10A + var jx = this.x; + var jy = this.y; + var jz = this.z; + var jz4 = jz.redSqr().redSqr(); + + var jx2 = jx.redSqr(); + var jy2 = jy.redSqr(); + + var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); + + var jxd4 = jx.redAdd(jx); + jxd4 = jxd4.redIAdd(jxd4); + var t1 = jxd4.redMul(jy2); + var nx = c.redSqr().redISub(t1.redAdd(t1)); + var t2 = t1.redISub(nx); + + var jyd8 = jy2.redSqr(); + jyd8 = jyd8.redIAdd(jyd8); + jyd8 = jyd8.redIAdd(jyd8); + jyd8 = jyd8.redIAdd(jyd8); + var ny = c.redMul(t2).redISub(jyd8); + var nz = jy.redAdd(jy).redMul(jz); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.trpl = function trpl() { + if (!this.curve.zeroA) + return this.dbl().add(this); + + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl + // 5M + 10S + ... + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // ZZ = Z1^2 + var zz = this.z.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // M = 3 * XX + a * ZZ2; a = 0 + var m = xx.redAdd(xx).redIAdd(xx); + // MM = M^2 + var mm = m.redSqr(); + // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM + var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + e = e.redIAdd(e); + e = e.redAdd(e).redIAdd(e); + e = e.redISub(mm); + // EE = E^2 + var ee = e.redSqr(); + // T = 16*YYYY + var t = yyyy.redIAdd(yyyy); + t = t.redIAdd(t); + t = t.redIAdd(t); + t = t.redIAdd(t); + // U = (M + E)^2 - MM - EE - T + var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t); + // X3 = 4 * (X1 * EE - 4 * YY * U) + var yyu4 = yy.redMul(u); + yyu4 = yyu4.redIAdd(yyu4); + yyu4 = yyu4.redIAdd(yyu4); + var nx = this.x.redMul(ee).redISub(yyu4); + nx = nx.redIAdd(nx); + nx = nx.redIAdd(nx); + // Y3 = 8 * Y1 * (U * (T - U) - E * EE) + var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee))); + ny = ny.redIAdd(ny); + ny = ny.redIAdd(ny); + ny = ny.redIAdd(ny); + // Z3 = (Z1 + E)^2 - ZZ - EE + var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.mul = function mul(k, kbase) { + k = new BN(k, kbase); + + return this.curve._wnafMul(this, k); +}; + +JPoint.prototype.eq = function eq(p) { + if (p.type === 'affine') + return this.eq(p.toJ()); + + if (this === p) + return true; + + // x1 * z2^2 == x2 * z1^2 + var z2 = this.z.redSqr(); + var pz2 = p.z.redSqr(); + if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0) + return false; + + // y1 * z2^3 == y2 * z1^3 + var z3 = z2.redMul(this.z); + var pz3 = pz2.redMul(p.z); + return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0; +}; + +JPoint.prototype.eqXToP = function eqXToP(x) { + var zs = this.z.redSqr(); + var rx = x.toRed(this.curve.red).redMul(zs); + if (this.x.cmp(rx) === 0) + return true; + + var xc = x.clone(); + var t = this.curve.redN.redMul(zs); + for (;;) { + xc.iadd(this.curve.n); + if (xc.cmp(this.curve.p) >= 0) + return false; + + rx.redIAdd(t); + if (this.x.cmp(rx) === 0) + return true; + } + return false; +}; + +JPoint.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; + +JPoint.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.z.cmpn(0) === 0; +}; + +},{"../../elliptic":645,"../curve":648,"bn.js":66,"inherits":662}],651:[function(require,module,exports){ +arguments[4][554][0].apply(exports,arguments) +},{"../elliptic":645,"./precomputed/secp256k1":659,"dup":554,"hash.js":803}],652:[function(require,module,exports){ +'use strict'; + +var BN = require('bn.js'); +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; +var assert = utils.assert; + +var KeyPair = require('./key'); +var Signature = require('./signature'); + +function EC(options) { + if (!(this instanceof EC)) + return new EC(options); + + // Shortcut `elliptic.ec(curve-name)` + if (typeof options === 'string') { + assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options); + + options = elliptic.curves[options]; + } + + // Shortcut for `elliptic.ec(elliptic.curves.curveName)` + if (options instanceof elliptic.curves.PresetCurve) + options = { curve: options }; + + this.curve = options.curve.curve; + this.n = this.curve.n; + this.nh = this.n.ushrn(1); + this.g = this.curve.g; + + // Point on curve + this.g = options.curve.g; + this.g.precompute(options.curve.n.bitLength() + 1); + + // Hash for function for DRBG + this.hash = options.hash || options.curve.hash; +} +module.exports = EC; + +EC.prototype.keyPair = function keyPair(options) { + return new KeyPair(this, options); +}; + +EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) { + return KeyPair.fromPrivate(this, priv, enc); +}; + +EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) { + return KeyPair.fromPublic(this, pub, enc); +}; + +EC.prototype.genKeyPair = function genKeyPair(options) { + if (!options) + options = {}; + + // Instantiate Hmac_DRBG + var drbg = new elliptic.hmacDRBG({ + hash: this.hash, + pers: options.pers, + entropy: options.entropy || elliptic.rand(this.hash.hmacStrength), + nonce: this.n.toArray() + }); + + var bytes = this.n.byteLength(); + var ns2 = this.n.sub(new BN(2)); + do { + var priv = new BN(drbg.generate(bytes)); + if (priv.cmp(ns2) > 0) + continue; + + priv.iaddn(1); + return this.keyFromPrivate(priv); + } while (true); +}; + +EC.prototype._truncateToN = function truncateToN(msg, truncOnly) { + var delta = msg.byteLength() * 8 - this.n.bitLength(); + if (delta > 0) + msg = msg.ushrn(delta); + if (!truncOnly && msg.cmp(this.n) >= 0) + return msg.sub(this.n); + else + return msg; +}; + +EC.prototype.sign = function sign(msg, key, enc, options) { + if (typeof enc === 'object') { + options = enc; + enc = null; + } + if (!options) + options = {}; + + key = this.keyFromPrivate(key, enc); + msg = this._truncateToN(new BN(msg, 16)); + + // Zero-extend key to provide enough entropy + var bytes = this.n.byteLength(); + var bkey = key.getPrivate().toArray('be', bytes); + + // Zero-extend nonce to have the same byte size as N + var nonce = msg.toArray('be', bytes); + + // Instantiate Hmac_DRBG + var drbg = new elliptic.hmacDRBG({ + hash: this.hash, + entropy: bkey, + nonce: nonce, + pers: options.pers, + persEnc: options.persEnc + }); + + // Number of bytes to generate + var ns1 = this.n.sub(new BN(1)); + + for (var iter = 0; true; iter++) { + var k = options.k ? + options.k(iter) : + new BN(drbg.generate(this.n.byteLength())); + k = this._truncateToN(k, true); + if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0) + continue; + + var kp = this.g.mul(k); + if (kp.isInfinity()) + continue; + + var kpX = kp.getX(); + var r = kpX.umod(this.n); + if (r.cmpn(0) === 0) + continue; + + var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg)); + s = s.umod(this.n); + if (s.cmpn(0) === 0) + continue; + + var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | + (kpX.cmp(r) !== 0 ? 2 : 0); + + // Use complement of `s`, if it is > `n / 2` + if (options.canonical && s.cmp(this.nh) > 0) { + s = this.n.sub(s); + recoveryParam ^= 1; + } + + return new Signature({ r: r, s: s, recoveryParam: recoveryParam }); + } +}; + +EC.prototype.verify = function verify(msg, signature, key, enc) { + msg = this._truncateToN(new BN(msg, 16)); + key = this.keyFromPublic(key, enc); + signature = new Signature(signature, 'hex'); + + // Perform primitive values validation + var r = signature.r; + var s = signature.s; + if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0) + return false; + if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0) + return false; + + // Validate signature + var sinv = s.invm(this.n); + var u1 = sinv.mul(msg).umod(this.n); + var u2 = sinv.mul(r).umod(this.n); + + if (!this.curve._maxwellTrick) { + var p = this.g.mulAdd(u1, key.getPublic(), u2); + if (p.isInfinity()) + return false; + + return p.getX().umod(this.n).cmp(r) === 0; + } + + // NOTE: Greg Maxwell's trick, inspired by: + // https://git.io/vad3K + + var p = this.g.jmulAdd(u1, key.getPublic(), u2); + if (p.isInfinity()) + return false; + + // Compare `p.x` of Jacobian point with `r`, + // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the + // inverse of `p.z^2` + return p.eqXToP(r); +}; + +EC.prototype.recoverPubKey = function(msg, signature, j, enc) { + assert((3 & j) === j, 'The recovery param is more than two bits'); + signature = new Signature(signature, enc); + + var n = this.n; + var e = new BN(msg); + var r = signature.r; + var s = signature.s; + + // A set LSB signifies that the y-coordinate is odd + var isYOdd = j & 1; + var isSecondKey = j >> 1; + if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey) + throw new Error('Unable to find sencond key candinate'); + + // 1.1. Let x = r + jn. + if (isSecondKey) + r = this.curve.pointFromX(r.add(this.curve.n), isYOdd); + else + r = this.curve.pointFromX(r, isYOdd); + + var rInv = signature.r.invm(n); + var s1 = n.sub(e).mul(rInv).umod(n); + var s2 = s.mul(rInv).umod(n); + + // 1.6.1 Compute Q = r^-1 (sR - eG) + // Q = r^-1 (sR + -eG) + return this.g.mulAdd(s1, r, s2); +}; + +EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) { + signature = new Signature(signature, enc); + if (signature.recoveryParam !== null) + return signature.recoveryParam; + + for (var i = 0; i < 4; i++) { + var Qprime; + try { + Qprime = this.recoverPubKey(e, signature, i); + } catch (e) { + continue; + } + + if (Qprime.eq(Q)) + return i; + } + throw new Error('Unable to find valid recovery factor'); +}; + +},{"../../elliptic":645,"./key":653,"./signature":654,"bn.js":66}],653:[function(require,module,exports){ +arguments[4][556][0].apply(exports,arguments) +},{"../../elliptic":645,"bn.js":66,"dup":556}],654:[function(require,module,exports){ +arguments[4][557][0].apply(exports,arguments) +},{"../../elliptic":645,"bn.js":66,"dup":557}],655:[function(require,module,exports){ +arguments[4][558][0].apply(exports,arguments) +},{"../../elliptic":645,"./key":656,"./signature":657,"dup":558,"hash.js":803}],656:[function(require,module,exports){ +arguments[4][559][0].apply(exports,arguments) +},{"../../elliptic":645,"dup":559}],657:[function(require,module,exports){ +arguments[4][560][0].apply(exports,arguments) +},{"../../elliptic":645,"bn.js":66,"dup":560}],658:[function(require,module,exports){ +'use strict'; + +var hash = require('hash.js'); +var elliptic = require('../elliptic'); +var utils = elliptic.utils; +var assert = utils.assert; + +function HmacDRBG(options) { + if (!(this instanceof HmacDRBG)) + return new HmacDRBG(options); + this.hash = options.hash; + this.predResist = !!options.predResist; + + this.outLen = this.hash.outSize; + this.minEntropy = options.minEntropy || this.hash.hmacStrength; + + this.reseed = null; + this.reseedInterval = null; + this.K = null; + this.V = null; + + var entropy = utils.toArray(options.entropy, options.entropyEnc); + var nonce = utils.toArray(options.nonce, options.nonceEnc); + var pers = utils.toArray(options.pers, options.persEnc); + assert(entropy.length >= (this.minEntropy / 8), + 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); + this._init(entropy, nonce, pers); +} +module.exports = HmacDRBG; + +HmacDRBG.prototype._init = function init(entropy, nonce, pers) { + var seed = entropy.concat(nonce).concat(pers); + + this.K = new Array(this.outLen / 8); + this.V = new Array(this.outLen / 8); + for (var i = 0; i < this.V.length; i++) { + this.K[i] = 0x00; + this.V[i] = 0x01; + } + + this._update(seed); + this.reseed = 1; + this.reseedInterval = 0x1000000000000; // 2^48 +}; + +HmacDRBG.prototype._hmac = function hmac() { + return new hash.hmac(this.hash, this.K); +}; + +HmacDRBG.prototype._update = function update(seed) { + var kmac = this._hmac() + .update(this.V) + .update([ 0x00 ]); + if (seed) + kmac = kmac.update(seed); + this.K = kmac.digest(); + this.V = this._hmac().update(this.V).digest(); + if (!seed) + return; + + this.K = this._hmac() + .update(this.V) + .update([ 0x01 ]) + .update(seed) + .digest(); + this.V = this._hmac().update(this.V).digest(); +}; + +HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) { + // Optional entropy enc + if (typeof entropyEnc !== 'string') { + addEnc = add; + add = entropyEnc; + entropyEnc = null; + } + + entropy = utils.toBuffer(entropy, entropyEnc); + add = utils.toBuffer(add, addEnc); + + assert(entropy.length >= (this.minEntropy / 8), + 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); + + this._update(entropy.concat(add || [])); + this.reseed = 1; +}; + +HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) { + if (this.reseed > this.reseedInterval) + throw new Error('Reseed is required'); + + // Optional encoding + if (typeof enc !== 'string') { + addEnc = add; + add = enc; + enc = null; + } + + // Optional additional data + if (add) { + add = utils.toArray(add, addEnc); + this._update(add); + } + + var temp = []; + while (temp.length < len) { + this.V = this._hmac().update(this.V).digest(); + temp = temp.concat(this.V); + } + + var res = temp.slice(0, len); + this._update(add); + this.reseed++; + return utils.encode(res, enc); +}; + +},{"../elliptic":645,"hash.js":803}],659:[function(require,module,exports){ +arguments[4][561][0].apply(exports,arguments) +},{"dup":561}],660:[function(require,module,exports){ +'use strict'; + +var utils = exports; +var BN = require('bn.js'); + +utils.assert = function assert(val, msg) { + if (!val) + throw new Error(msg || 'Assertion failed'); +}; + +function toArray(msg, enc) { + if (Array.isArray(msg)) + return msg.slice(); + if (!msg) + return []; + var res = []; + if (typeof msg !== 'string') { + for (var i = 0; i < msg.length; i++) + res[i] = msg[i] | 0; + return res; + } + if (!enc) { + for (var i = 0; i < msg.length; i++) { + var c = msg.charCodeAt(i); + var hi = c >> 8; + var lo = c & 0xff; + if (hi) + res.push(hi, lo); + else + res.push(lo); + } + } else if (enc === 'hex') { + msg = msg.replace(/[^a-z0-9]+/ig, ''); + if (msg.length % 2 !== 0) + msg = '0' + msg; + for (var i = 0; i < msg.length; i += 2) + res.push(parseInt(msg[i] + msg[i + 1], 16)); + } + return res; +} +utils.toArray = toArray; + +function zero2(word) { + if (word.length === 1) + return '0' + word; + else + return word; +} +utils.zero2 = zero2; + +function toHex(msg) { + var res = ''; + for (var i = 0; i < msg.length; i++) + res += zero2(msg[i].toString(16)); + return res; +} +utils.toHex = toHex; + +utils.encode = function encode(arr, enc) { + if (enc === 'hex') + return toHex(arr); + else + return arr; +}; + +// Represent num in a w-NAF form +function getNAF(num, w) { + var naf = []; + var ws = 1 << (w + 1); + var k = num.clone(); + while (k.cmpn(1) >= 0) { + var z; + if (k.isOdd()) { + var mod = k.andln(ws - 1); + if (mod > (ws >> 1) - 1) + z = (ws >> 1) - mod; + else + z = mod; + k.isubn(z); + } else { + z = 0; + } + naf.push(z); + + // Optimization, shift by word if possible + var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1; + for (var i = 1; i < shift; i++) + naf.push(0); + k.iushrn(shift); + } + + return naf; +} +utils.getNAF = getNAF; + +// Represent k1, k2 in a Joint Sparse Form +function getJSF(k1, k2) { + var jsf = [ + [], + [] + ]; + + k1 = k1.clone(); + k2 = k2.clone(); + var d1 = 0; + var d2 = 0; + while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) { + + // First phase + var m14 = (k1.andln(3) + d1) & 3; + var m24 = (k2.andln(3) + d2) & 3; + if (m14 === 3) + m14 = -1; + if (m24 === 3) + m24 = -1; + var u1; + if ((m14 & 1) === 0) { + u1 = 0; + } else { + var m8 = (k1.andln(7) + d1) & 7; + if ((m8 === 3 || m8 === 5) && m24 === 2) + u1 = -m14; + else + u1 = m14; + } + jsf[0].push(u1); + + var u2; + if ((m24 & 1) === 0) { + u2 = 0; + } else { + var m8 = (k2.andln(7) + d2) & 7; + if ((m8 === 3 || m8 === 5) && m14 === 2) + u2 = -m24; + else + u2 = m24; + } + jsf[1].push(u2); + + // Second phase + if (2 * d1 === u1 + 1) + d1 = 1 - d1; + if (2 * d2 === u2 + 1) + d2 = 1 - d2; + k1.iushrn(1); + k2.iushrn(1); + } + + return jsf; +} +utils.getJSF = getJSF; + +function cachedProperty(obj, name, computer) { + var key = '_' + name; + obj.prototype[name] = function cachedProperty() { + return this[key] !== undefined ? this[key] : + this[key] = computer.call(this); + }; +} +utils.cachedProperty = cachedProperty; + +function parseBytes(bytes) { + return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') : + bytes; +} +utils.parseBytes = parseBytes; + +function intFromLE(bytes) { + return new BN(bytes, 'hex', 'le'); +} +utils.intFromLE = intFromLE; + + +},{"bn.js":66}],661:[function(require,module,exports){ +module.exports={ + "_args": [ + [ + "elliptic@6.3.3", + "/home/yann/Remix/remix-ide" + ] + ], + "_development": true, + "_from": "elliptic@6.3.3", + "_id": "elliptic@6.3.3", + "_inBundle": false, + "_integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", + "_location": "/ethers/elliptic", + "_phantomChildren": {}, + "_requested": { + "type": "version", + "registry": true, + "raw": "elliptic@6.3.3", + "name": "elliptic", + "escapedName": "elliptic", + "rawSpec": "6.3.3", + "saveSpec": null, + "fetchSpec": "6.3.3" + }, + "_requiredBy": [ + "/ethers" + ], + "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", + "_spec": "6.3.3", + "_where": "/home/yann/Remix/remix-ide", + "author": { + "name": "Fedor Indutny", + "email": "fedor@indutny.com" + }, + "bugs": { + "url": "https://github.com/indutny/elliptic/issues" + }, + "dependencies": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "inherits": "^2.0.1" + }, + "description": "EC cryptography", + "devDependencies": { + "brfs": "^1.4.3", + "coveralls": "^2.11.3", + "grunt": "^0.4.5", + "grunt-browserify": "^5.0.0", + "grunt-cli": "^1.2.0", + "grunt-contrib-connect": "^1.0.0", + "grunt-contrib-copy": "^1.0.0", + "grunt-contrib-uglify": "^1.0.1", + "grunt-mocha-istanbul": "^3.0.1", + "grunt-saucelabs": "^8.6.2", + "istanbul": "^0.4.2", + "jscs": "^2.9.0", + "jshint": "^2.6.0", + "mocha": "^2.1.0" + }, + "files": [ + "lib" + ], + "homepage": "https://github.com/indutny/elliptic", + "keywords": [ + "EC", + "Elliptic", + "curve", + "Cryptography" + ], + "license": "MIT", + "main": "lib/elliptic.js", + "name": "elliptic", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/indutny/elliptic.git" + }, + "scripts": { + "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js", + "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js", + "lint": "npm run jscs && npm run jshint", + "test": "npm run lint && npm run unit", + "unit": "istanbul test _mocha --reporter=spec test/index.js", + "version": "grunt dist && git add dist/" + }, + "version": "6.3.3" +} + +},{}],662:[function(require,module,exports){ +arguments[4][36][0].apply(exports,arguments) +},{"dup":36}],663:[function(require,module,exports){ +arguments[4][580][0].apply(exports,arguments) +},{"_process":109,"dup":580}],664:[function(require,module,exports){ +(function (process,global,clearImmediate){ +(function (global, undefined) { + "use strict"; + + if (global.setImmediate) { + return; + } + + var nextHandle = 1; // Spec says greater than zero + var tasksByHandle = {}; + var currentlyRunningATask = false; + var doc = global.document; + var setImmediate; + + function addFromSetImmediateArguments(args) { + tasksByHandle[nextHandle] = partiallyApplied.apply(undefined, args); + return nextHandle++; + } + + // This function accepts the same arguments as setImmediate, but + // returns a function that requires no arguments. + function partiallyApplied(handler) { + var args = [].slice.call(arguments, 1); + return function() { + if (typeof handler === "function") { + handler.apply(undefined, args); + } else { + (new Function("" + handler))(); + } + }; + } + + function runIfPresent(handle) { + // From the spec: "Wait until any invocations of this algorithm started before this one have completed." + // So if we're currently running a task, we'll need to delay this invocation. + if (currentlyRunningATask) { + // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a + // "too much recursion" error. + setTimeout(partiallyApplied(runIfPresent, handle), 0); + } else { + var task = tasksByHandle[handle]; + if (task) { + currentlyRunningATask = true; + try { + task(); + } finally { + clearImmediate(handle); + currentlyRunningATask = false; + } + } + } + } + + function clearImmediate(handle) { + delete tasksByHandle[handle]; + } + + function installNextTickImplementation() { + setImmediate = function() { + var handle = addFromSetImmediateArguments(arguments); + process.nextTick(partiallyApplied(runIfPresent, handle)); + return handle; + }; + } + + function canUsePostMessage() { + // The test against `importScripts` prevents this implementation from being installed inside a web worker, + // where `global.postMessage` means something completely different and can't be used for this purpose. + if (global.postMessage && !global.importScripts) { + var postMessageIsAsynchronous = true; + var oldOnMessage = global.onmessage; + global.onmessage = function() { + postMessageIsAsynchronous = false; + }; + global.postMessage("", "*"); + global.onmessage = oldOnMessage; + return postMessageIsAsynchronous; + } + } + + function installPostMessageImplementation() { + // Installs an event handler on `global` for the `message` event: see + // * https://developer.mozilla.org/en/DOM/window.postMessage + // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages + + var messagePrefix = "setImmediate$" + Math.random() + "$"; + var onGlobalMessage = function(event) { + if (event.source === global && + typeof event.data === "string" && + event.data.indexOf(messagePrefix) === 0) { + runIfPresent(+event.data.slice(messagePrefix.length)); + } + }; + + if (global.addEventListener) { + global.addEventListener("message", onGlobalMessage, false); + } else { + global.attachEvent("onmessage", onGlobalMessage); + } + + setImmediate = function() { + var handle = addFromSetImmediateArguments(arguments); + global.postMessage(messagePrefix + handle, "*"); + return handle; + }; + } + + function installMessageChannelImplementation() { + var channel = new MessageChannel(); + channel.port1.onmessage = function(event) { + var handle = event.data; + runIfPresent(handle); + }; + + setImmediate = function() { + var handle = addFromSetImmediateArguments(arguments); + channel.port2.postMessage(handle); + return handle; + }; + } + + function installReadyStateChangeImplementation() { + var html = doc.documentElement; + setImmediate = function() { + var handle = addFromSetImmediateArguments(arguments); + // Create a